Parking Solver
(by christian siebje)
Parking Solver is a plugin to automatize the layout planning of open plot parking lots.
Support Email

Parking Solver is a plugin developed in my free time to automatize the layout planning of open plot parking lots. It contains several settings and custom methods to provide a wide variety of solutions within a simple and intuitive workflow (I guess).

It can generate dozens of different layouts through several edge referencing methods, outer/ inner layout distribution methods, and spot typologies. Additionally, the design can be further detailed to contain pedestrian circulations, special spots (regarding accessibility), and bicycle spots. Note that this plugin is intended to serve only single geometric closed shapes, not supporting any kind of inner exclusion zone or vertical circulation/ structural elements (for that a separate plugin is intended).

For how to use it: the video linked below serves as step-by-step video documentation on how to get started with it (just watch it through and you are good to go :). Additionally, in the .zip there is a sample file, and here is a short description of the components and what they do. Please read carefully the sections below mentioning the Limitations/Known Bugs, Observations, and Disclaimer ;)



Parking Solver

The main component, hosting the main logic. Add only one per Grasshopper canvas;

  • Plot: Closed Polyline defining boundary of the plot;
  • Access: Points defining access for vehicles;
  • Axial Road: One or multiple lines defining road lines that subdivide the inner plot;
  • Outer Spot: Instance spot settings to be applied on outer spots (boundary);
  • Inner Spot: Instance spot settings to be applied on inner spots;
  • Special Spots: Connect here the named custom component (to override default);
  • Roads Settings: Connect here the named custom component (to override default);
  • Pedestrian Settings: Connect here the named custom component (to override default);
  • Visualize: Boolean value toggling detailed preview on or off  (bool toggle);
  • Form: WIP - no use;


Roads Settings

Roads dimensions and custom layout settings

  • Side-Out: Outter bound edge to use as starting (0 = use all edges to place spots);
  • Edges Cull: Number of edges to subtract from outer bound;
  • Reference Edge: Inner edge to use as a reference for inner spots and roads;
  • Skirt: Inner tolerance offset on boundary (default 0.50m);
  • Access Width: Define the width of access circulation roads;
  • Axial Width: Define the width of axial circulation roads;
  • Perimetral Settings: States: 0 - only inner spots / 1 - boundary spots & inner / 2 - boundary spots on both sides & inner / 3 - state 2 with inner roads having single access;
  • Snap Access: Snap entrance access to get the best spots distribution;
  • Island Radius: Maximum island corner radius;


Normal Spot

Component containing creation logic for spot objects

  • Angle: Angle rotation type of spot;
  • Stack: Allow stacking on 45 deg spots;
  • Length: Spot length;
  • Width: Spot width;
  • Road Width: Spot access road width;
  • Handicap | Elderly: Click on the checkbox to morph the component;
    • Lane Width: Access lane width;
    • Amount (%): Amount (in % of spots to replace with this type;


Pedestrian Settings

Settings for pedestrian lanes and access

  • Access: Pedestrian access as entrance points;
  • Access Width: Pedestrian Access width;
  • Circ. Width: Circulation lanes/sidewalk width;
  • Style: 0 - pedestrian lanes at roadside / 1 - pedestrian lane as sidewalks;


Special Spots

Component to merge together settings of special types of spots.

  • Handicap: Handicap spot type settings;
  • Elderly: Elderly spot type settings;


Bike Picker

Floating component responsible for picking island and spots to serve as bike spots (commands information on pop-up info boxes).

  • Pick: Pick base islands for spots (boolean button);
  • Access Width: Access width (cm) - default as 120cm;
  • Border: Border offset (cm) from boundary reference;
  • Spot Length: Bike spot length (cm) - default will optimize solution ranging from 180 to 240cm;
  • Lateral distance: Bike spot lateral distance (cm) from each double spot center - up from 90cm;
  • Amount (%): Percentage of Bikes to be added regarding total spots count;
  • Reset: Reset all bike spots (boolean button);


Spots Info

Deconstruct spots and get each information accessible.

  • Spots: Spots instances as list;


Roads Info

Deconstruct roads and get each information accessible.

  • Roads: Road instances as list;


Optimization Settings

Settings for optimization (WIP) - return weighted global fitness goal (max.).

  • Spots: Spots instances as list;


Installation / How to Use (watch the demo video for how better to use it):

Install the all zipped containing files like any other plugin in the Components Folder ("Libraries") => Don't forget to check "unblock" before decompressing the files. The components will be stored in a new tab called Parking Solver.

For how to start using please refer to the youtube video or the sample files (.3dm and .gh) contained in the zipped file.


Known Limitations / Bugs:

Although many plot typologies were tested, some may break the logic, produce an invalid result or fail on some boolean operations. Usually, small geometry adjustments or testing another setting (within Road Settings) may fix the bugs.

Concave boundary shapes are not fully supported - they can (but not necessarily) produced invalid solutions or even crash the solution

Pedestrian settings applied to concave boundary shapes may break the application / some of these settings may brake the application or dont execute boolean operations successfully.

Toggling between all possible settings and configurations in specific plot typologies may still produce invalid solutions or even break the solution. 



Fixes are planned anytime soon. New implementations/ functions not so soon . 

*When opening grasshopper file containing the solution, Recompute (right-click on gh canvas) to preview results;

*Special spots (Handicap/Elderly) states are not serialized through rhino sessions (they turn back into normal) - please make sure to toggle them back after opening the file if it contains them;

*Only use one main component (Parking Solver) per Grasshopper document;

*Rhino Document shall be in meters;



This is a personal pet project under development which I found could be useful for others as well, hence it may have some bugs or UI/UX improvements to be done (therefore, use it at your own risk). Bugs or suggestions can be reported to the provided email (

If you like this project and would want it to be further developed you can consider buying me a coffee => by clicking on the link below, or the component dog button :)



Rhino 6.27 or higher (Windows)

License Cost:
For instructions on installing Grasshopper Add-Ons, please see FAQ for details.
Parking Solver
Grasshopper for Rhino 6 for Win
Also by Christian siebje