Wilson Garden

Bengaluru Streets for People Challenge (February 2021)

The objective is to create a parametric tool that computationally applies design intent to any neighborhood and generates multiple design iterations driven by relevant input parameters such as the existing layout and parking space requirements.

The tool groups existing blocks into clusters referred to as Pedestrian Blocks that are bound by one-way streets for vehicular movement and parking. Every generated iteration provides information about the area of the Pedestrian Blocks and the number of Parking Spaces for that particular iteration.

In addition to the Pedestrian Blocks, mentioned earlier the design proposal introduces the concept of an Asteroid which is a super elliptical shaped garden located at every vehicular intersection and enforces one directional traffic flow across the neighborhood. The introduction of multiple such gardens across the neighborhood should do some justice to the name the neighborhood carries.

The one directional flow is to ensure continuous movement of traffic without any crisscrossing or directional conflict at any intersection. Traffic effectively moves in circles around Pedestrian blocks and the shortest vehicular route between any two Pedestrian Blocks within the neighborhood is a zigzag. However it continues to be direct and straight for cyclists and pedestrians who can cut across Pedestrian Blocks. This maze of one-ways should also serve to discourage through traffic.

The computational iterations are based on hard coded design intent and should necessarily be reviewed by the community to refine and correct any obvious faults and shortcomings that a purely parametrically driven design approach could throw up. However the advantage of such an approach is that discussions with the concerned community would not be based on a particular design being imposed on them, but with a tool that enables them to evaluate and refine multiple options within the framework of a broad design concept.

Road Width for One Side Parallel Parking : 8m
Road Width for Two Side Parallel Parking : 10.0m
Stall Intervals 7.0m, Stall Width: 2.0m, Aisle Width 2.5m, Lane Width 3.5m

Road Width for One Side 30 degree Parking : 12m
Stall Intervals 5.5m, Stall Width 5.0m,Aisle Width 3.5m, Lane Width 3.5m

//Control Variables
//Max Block Area
mxa01 = (Math.PI*Math.Pow(400000,2)/1000000)/23;
//Lane Width
lnW01 = 2800;
//Turning Radius
tnR01 = 7000;
//Parallel Parking
pkW01 = 2400;
pkL01 = 7000;

//Deserialize blocks as Surfaces
blk01 = List.Flatten(Geometry.DeserializeFromSAB(DSOffice.Data.ImportCSV("G:\\My Drive\\Bengaluru-Competition\\Shantinagar\\Design\\20210208.csv",false)),-1);
blk02 = Blks04((Blks03(List.ShiftIndices(blk01,1),mxa01)),mxa01);

//Perimeter Curves
prm01 = PolyCurve.ByJoinedCurves(PolySurface.ByJoinedSurfaces(blk01).PerimeterCurves());
prm02 = PolyCurve.ByJoinedCurves(blk02.PerimeterCurves());
prm03 = prm02.Offset(-lnW01);
prm04 = prm03.Fillet(tnR01,false).Fillet(tnR01,true);
prm05 = prm04.Offset(-pkW01);

//Number of Car Parking spaces including periphery
crP01 = Math.Sum(List.Flatten(Math.Floor(List.RemoveIfNot(prm05.Explode()<1>,"Line").Length/pkL01),-1));

//Number of Car Parking spaces excluding main roads
crP02 = crP01 - Math.Floor((prm01.Length/2)/pkL01);

ctl01 = PolySurface.ByJoinedSurfaces(List.Flatten(blk01.PerimeterCurves().Extrude(Vector.ZAxis()),-1));

prk01 = Surface.ByLoft(List.Transpose([prm04,prm05]));
blk03 = prm05.Patch();
int01 = ctl01.Intersect(blk03);

clr01 = GeometryColor.ByGeometryColor(prk01,Color.ByARGB(255,0,0,255));
clr02 = GeometryColor.ByGeometryColor(blk03,Color.ByARGB(255,255,255,0));
clr03 = GeometryColor.ByGeometryColor(int01,Color.ByARGB(50,255,0,0));


Last updated