Urban Elements

Urban Elements

This blog post aims to expand the discourse on parametric urban design education by introducing ‘Urban Elements’ as conceptual urban design instruments with an inherent rule-based logic, which can help to bridge gaps in teaching parametric urban design thinking. It is the result of a course developed for and delivered to the Urban Redevelopment Authority (URA) in Singapore in 2017 and 2018 by the Future Cities Laboratory at the Singapore-ETH Centre.

Research team: Aurel von Richthofen, Katja Knecht, Yufan Miao, Kateryna Konieva, Dr. Reinhard Koenig

The ‘Urban Elements’ included ‘infrastructure’ such as urban grids and networks, formation of blocks and building plots, creation of built volumes, distribution of massing and functions. This menu of generic urban design patterns provides the key components for solving basic urban design problems. The parametric logic of the GH definitions provided introduced corresponding basic concepts of parametric thinking.

Download GH files

Examples of generic urban components taught prior to the beginning of the term in the boot camp (chart with grids, plots, massing, functions).

Examples of urban concepts taught during the term and translated into Grasshopper tutorials.

Further parametric example definitions were introduced throughout the term addressing related concepts that corresponded to the topic of the weekly lecture. Concepts covered aspects of urban form, such as plot porosity and street profiles, function distribution, reworking topography and topography evaluation, shortest path, energy calculations with the plug-in Ladybug and designing for change using the Elefront plug-in. The sample definitions and basic parametric and urban concepts covered by the tutorials were intended to provide a starting point for the participants to aid them in the development of their own parametric translations. In analogy to Christopher Alexander’s ‘Pattern Language’ these parametric urban concepts formed a basic vocabulary for the participants, which could be recombined and expanded.

Download GH files

Collection of ‘Urban Elements’ developed by participants during the course. Poster design by Binger Laucke Siebein.

Related Publications

Sorry, but the selected Zotpress account can't be found.

Rural Urban Metabolism

Rural Urban Metabolism

The videos on this site document the results of the integrated computational design summer semester course 2018 “Rural-Urban Metabolism – Metabolism-based Planning Strategies for Rural-Urban Transformation in Ethiopia” at the Bauhaus-University Weimar as part of the Advanced Urbanism MSc and European Studies MSc. Both study programs are continued in the future as Integrated Urban Development and Design master program.

The urban design course is related to the research project Integrated Infrastructure (IN³), which is an interdisciplinary international research project at the Bauhaus-Universität Weimar and the Ethiopia Institute for Architecture, Building Construction and City Development (EiABC). The project is funded by the Federal Ministry of Education and Research in Germany (BMBF), German Academic Exchange Service (DAAD) and German Aerospace Center (DLR).

Supervisors team: Sven Schneider, Philippe Schmidt, Reinhard Koenig, Abdulmalik Abdulmawla, Martin Dennemark

Project context

The transformation from a mainly agricultural society to industrialisation that is faced these days in Ethiopia is linked to substantial changes of the country’s rural and urban areas. With these shifts, the processes of urbanisation and expectations towards modernisation is seen as a chance to create new and adaptive urban planning proposals that meet specific needs and conditions of the Ethiopian development context in Sub-Saharan Africa. While the World Bank is promoting rapid economic growth for Ethiopia, still the country is one of the poorest countries in the world, and the question arises in how far urban design and planning can create concepts and flexible urban models that are reactive enough to stimulate different scenarios responding for  balanced development.

One of the main frameworks to create such balance for emerging cities are the United Nations Sustainable Development Goals. Different key factors like food security, energy, water and sanitation are linked to resource questions of material and land and how those can be influential on the development of prospective cities. Thus, for the development of new towns in rapidly urbanizing regions the understanding of material flows and circulation within the urban system is crucial when it comes about any building activity that determines the urban form and what we finally experience as urban, including open and public space and healthy living conditions. 

To better understand how such flows of material resources and energy are linked to building activities in rural  urbanisation processes and their impact on the existing environment, in our study project, we are referring to urban metabolism as a framework for urban design and planning of small cities.

Participants will be analysing urban patterns and flows of small cities, learn about the context between urban metabolism and its spatial implications and apply tools and methods for a spatial analysis and finally implement that knowledge in spatial models and concepts to simulate possible development scenarios. The findings should also make visible the opportunities and limitations of such concepts for disciplines concerned with urban development, taking into account environmental, social and economic factors.

Introduction Lecture

to the project “Rural Urban Metabolism” in Ethiopia by Vertr. Prof. Dr. Sven Schneider


by Constantin Friedrich Kozák, Jonas Wiel, Shunsuke Yoshida & Silke Weise

Bio Communal City

by Harneet Kaur, Truc Anh Nguyen & Yun Shu

SAN City

by Aurelija Matuleviciute, Marina Evstifeeva & Philip Schäffler

Seriti 2.0

by Andrej Sluka, Lina Ayser Jamil Halaseh & Siim Kuusik

Walkable City

by Furui Yang, Maria Dorothea Mönig & Ting-Yu Hsu

Frontiers of Water

by Alejandra Urrutia Pinto, Jakob Moritz Becker & Nils Fabian Voerste

Radius City

by Ayah Al-Sabbagh, Bastiaan Woudenberg & Xuanyu Li

Recreation City

by Mengxi Kou, Yuanji Shi & Yulin Wang

Balancing Wurer

by Michaela Mösing, Benjamin Rothmeier, Anthea Swart & Yunhang Wang

Cognitive Urban Design Computing @ FCL

Cognitive Urban Design Computing @ FCL

This post documents our research in the Cognitive Design Computing (CoDeC) workstream of the Big Data Informed Urban Design and Governance project at the Future Cities Lab in Singapore with status July 2018. It is structured in our research on generation, analysis, and exploration methods. We demonstrate our methods in the context of the synergy project Waterfront Tanjong Pagar in Singapore. In this context we used partially inputs from other FCL research groups. The idea of Cognitive Urban Design Computing is to combine unique human design competences with computational methods for the generation, analysis, and exploration of urban designs. The loop of analysis and generation methods is the basis for automated spatial synthesis. Design space exploration methods are used for the presentation and selection of synthesized design variants.

Research Team: Katja Knecht, Yufan Miao, Kateryna Konieva, Pol Foreman, Reinhard Koenig (contact author), Gerhard Schmitt, in collaboration with Dietmar Leyk.


The image illustrates the framework for Cognitive Urban Design Computing.

Overview of the spatial synthesis process for Waterfront Tanjong Pagar

Generation and Analysis

Kateryna Konieva

We use the Waterfront Tanjong Pagar area for demonstrating the automated loop of generation and analysis of urban design variants. The video below shows the parametric design workflow with various analysis methods integrated in the spatial synthesis process. Currently we use network analysis, economic potentials, view analysis, as well as solar and shadow analysis.


Yufan Miao

For the automatization of the spatial synthesis process, we use evolutionary multi-criteria optimization algorithms. Therefore we needed to develop an appropriate data structure to represent spatial configurations (streets, parcels, and buildings), which allows the application of evolutionary operators (crossover, mutation, and adaption).

Design Space Exploration

Katja Knecht

The spatial synthesis process we presented allows to generate a large number of urban design variants. To present these variants in a meaningful way to urban planners or stakeholders, we explore the usage of design space exploration tools and new interface concepts. The aim is to provide a platform to discuss, compare and evaluate variants based on analysis results in order to allow stakeholders to take informed design decisions.

Comparison of design alternatives using the beta.speckle online interface.

The following video shows how design variants can be filtered according to specified design and performance characteristics in the Design Explorer application:


How design alternatives can be assessed and evaluated in the Speckle online viewer, e.g. by comparing analysis results such as shading and sunlight hours analysis, can be seen in the following clip:

Building Typologies

Pol Foreman

In collaboration with the FCL synergy project Waterfront Tanjong Pagar led by Dietmar Leyk, we developed a parametric urban masterplan, which allows the generation of adequately detailed urban block typologies and buildings.


Big Data Informed Urban Design and Governance

The Cognitive Design Computing (CoDeC) workstream is part of the Big Data Informed Urban Design and Governance project at the Future Cities Lab in Singapore. The video below gives an overview of all workstreams of the project and how they are related to each other.

Acknowledgement This research was conducted at the Future Cities Laboratory at the Singapore- ETH Centre, which was established cooperatively between ETH Zurich and Singapore’s National Research Foundation (FI 370074016) under its Campus for Research Excellence and Technological Enterprise programme (CREATE).

Related Publications

Sorry, but the selected Zotpress account can't be found.

Please enter a password to see the content.

Wrong password, please try again
Computational Urban Design Prototyping

Computational Urban Design Prototyping

The presented study is made for Cape Town city in South Africa, in which approximately 7.5 million people living in informal settlements and about 2.5 million housing units are needed. This motivates us to develop upgrading strategies for informal settlements. For this purpose, we developed an adaptive and interactive tool for rapid computational urban design prototyping. The tool can be used to generate urban layouts including street networks, blocks, parcels and buildings based on requirements specified by an urban designer. For implementing  the layout generation process, we developed an underlying tree data structure to represent street networks and parcellings. Moreover, network analysis methods were applied for controlling the distribution of buildings in the communities so that preferred neighborhood relationships are considered. Finally we demonstrated how to compare designs based on spatial analysis.

Research Team: Reinhard Koenig (contact author), Peter Bus, Yufan Miao, Chang-Mei Chih, Artem Chirkin.
The presented research evolves within the context of a collaboration with Scott Lloyd from the Urban Think Tank (U-TT) at ETH Zurich.


This page contains accompanying material for the paper Computational Urban Design Prototyping: Interactive Planning Synthesis Methods Demonstrated by a Case Study in Cape Town, published in the International Journal of Architectural Computing (IJAC), [it’s currently under review].

The Computational Urban Design Process

We implemented a new data structure for a slicing tree. The slicing (A) starts from one edge (1). After that, it slices the edge (2) on the left side of the slicing line (B) and next the one on the right (C, 4). A slicing line is stored in the slicing tree by assigning it to the edge it crosses. At the same time, the slicing lines are ranked based on their levels in the tree structure.

The case study area is Enkanini in Cape Town City, South Africa, for which we generate urban planning variants in a fast and interactive way.

Example of two urban layouts for the sliced parcels, generated freely (left) and using initial street segments to guide street network generation (right).

To increase the precision for generating parcels with a defined width, we nested the block and parcel generation.

Using the Speckle plug-in for Grasshopper the generated urban layouts can be made accessible online to share and communicate the design as well as to allow stakeholders to explore design alternatives. In accordance with the initial specifications, the interface allows to change the dimensions of the parcels within a defined parameter range using sliders to adjust the parcels width and depth.

The generated urban layouts can be analysed with various methods. In this example we assessed pedestrian accessibility of the educational and commercial facilities by using a gravity-based method.

Video of the Computational Urban Design Process

Related Publications

Sorry, but the selected Zotpress account can't be found.

Download Grasshopper Definitions


The Grasshopper files are created for Grasshopper (build 0.9.0076) with Rhino3D v.5. To open and run the models you need to install the DeCodingSpaces-Toolbox (we used version 2018.01) – food4rhino is not always working.

Download Adaptive EmpowerShack Grasshopper Definition

Adaptive Urban Masterplan 05/18

Adaptive Urban Masterplan 05/18

This page shows a technical demonstration of an adaptive urban masterplan developed in the Smart Spatial Planning Systems group at the Austrian Institute of Technology (AIT) in May 2018. The concept results from a long-term collaboration beween Bauhaus-University Weimar, ETH Zurich, FCL Singapore, and AIT. The masterplan is implemented as Grasshopper definition and can be controlled with a simplified user interface in Rhino3D. There is a protected download of the Grasshopper definition at the end of this page.
We offer to create an adaptive urban masterplan for your individual projects. For more information, please contact Dr. Koenig.

Research Team: Ondřej Veselý and Reinhard Koenig (contact author),

View the generated model in Mapbox

<style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /*-----CSS style for the layer and view selection widget-----*/<!-- [et_pb_line_break_holder] --> #layer-menu {<!-- [et_pb_line_break_holder] --> position: absolute;<!-- [et_pb_line_break_holder] --> z-index: 1;<!-- [et_pb_line_break_holder] --> top: 10px;<!-- [et_pb_line_break_holder] --> left: 10px;<!-- [et_pb_line_break_holder] --> width: 160px;<!-- [et_pb_line_break_holder] --> font-family: 'Open Sans', sans-serif;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> #camera-menu {<!-- [et_pb_line_break_holder] --> position: absolute;<!-- [et_pb_line_break_holder] --> z-index: 1;<!-- [et_pb_line_break_holder] --> top: 10px;<!-- [et_pb_line_break_holder] --> left: 175px;<!-- [et_pb_line_break_holder] --> width: 80px;<!-- [et_pb_line_break_holder] --> font-family: 'Open Sans', sans-serif;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .dropbtn {<!-- [et_pb_line_break_holder] --> width: 100%;<!-- [et_pb_line_break_holder] --> position: relative;<!-- [et_pb_line_break_holder] --> z-index: 2;<!-- [et_pb_line_break_holder] --> background-color: #1ebdbc; /*AIT colors*/;<!-- [et_pb_line_break_holder] --> color: white;<!-- [et_pb_line_break_holder] --> padding: 16px;<!-- [et_pb_line_break_holder] --> font-size: 16px;<!-- [et_pb_line_break_holder] --> border: none;<!-- [et_pb_line_break_holder] --> cursor: pointer;<!-- [et_pb_line_break_holder] --> outline: none;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .dropbtn:hover, .dropbtn:focus {<!-- [et_pb_line_break_holder] --> background-color: #22a1a1;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .dropdown-content {<!-- [et_pb_line_break_holder] --> border-radius: 5px;<!-- [et_pb_line_break_holder] --> text-align: left;<!-- [et_pb_line_break_holder] --> display: none;<!-- [et_pb_line_break_holder] --> position: absolute;<!-- [et_pb_line_break_holder] --> top: 55px;<!-- [et_pb_line_break_holder] --> background-color: #ffffff;<!-- [et_pb_line_break_holder] --> width: 100%;<!-- [et_pb_line_break_holder] --> overflow: auto;<!-- [et_pb_line_break_holder] --> box-shadow: 0px 0px 6px 0px rgba(0,0,0,0.4);<!-- [et_pb_line_break_holder] --> z-index: 1;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .dropdown-content a {<!-- [et_pb_line_break_holder] --> color: black;<!-- [et_pb_line_break_holder] --> padding: 12px 16px;<!-- [et_pb_line_break_holder] --> text-decoration: none;<!-- [et_pb_line_break_holder] --> display: block;<!-- [et_pb_line_break_holder] --> border-top: 1px solid #ddd;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .dropdown-content a:hover {background-color: rgb(240, 240, 240);}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> .show {display: block;} <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /*-----CSS style for the element info popup widget-----*/<!-- [et_pb_line_break_holder] --> dd {<!-- [et_pb_line_break_holder] --> margin-left: 0;<!-- [et_pb_line_break_holder] --> margin-bottom: 8px;<!-- [et_pb_line_break_holder] --> font-weight: bold;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> dt {<!-- [et_pb_line_break_holder] --> color: #1ebdbc; /*AIT colors*/<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> dl {<!-- [et_pb_line_break_holder] --> margin-bottom: 0;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{<!-- [et_pb_line_break_holder] --> border-top-color: #1ebdbc; /*AIT colors*/<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> .mapboxgl-popup-content{<!-- [et_pb_line_break_holder] --> font-size: 14px;<!-- [et_pb_line_break_holder] --> color: white;<!-- [et_pb_line_break_holder] --> background-color: rgba(0, 0, 0, 0.8);<!-- [et_pb_line_break_holder] --> box-shadow: 0 0 0px 2px #1ebdbc; /*AIT colors*/<!-- [et_pb_line_break_holder] --> min-width: 150px;<!-- [et_pb_line_break_holder] --> max-width: 300px;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /*-----CSS style for the map scale widget-----*/<!-- [et_pb_line_break_holder] --> .mapboxgl-ctrl-scale {<!-- [et_pb_line_break_holder] --> background-color: rgba(0, 0, 0, 0.75);<!-- [et_pb_line_break_holder] --> font-size: 12px;<!-- [et_pb_line_break_holder] --> border-width: medium 2px 3px;<!-- [et_pb_line_break_holder] --> border-style: none none solid;<!-- [et_pb_line_break_holder] --> border-color: #1ebdbc; /*AIT colors*/<!-- [et_pb_line_break_holder] --> padding: 0 5px;<!-- [et_pb_line_break_holder] --> color: white;<!-- [et_pb_line_break_holder] --> box-sizing: border-box;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /*-----CSS style for copyright-----*/<!-- [et_pb_line_break_holder] --> #copyright {<!-- [et_pb_line_break_holder] --> font-size: 9px;<!-- [et_pb_line_break_holder] --> color:white;<!-- [et_pb_line_break_holder] --> text-align: center;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> #copyright a {<!-- [et_pb_line_break_holder] --> color:#1ebdbc; /*AIT colors*/<!-- [et_pb_line_break_holder] --> text-decoration: none;<!-- [et_pb_line_break_holder] --> font-weight: 1000;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> </style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> <div id='map' style='min-height: 500px;'> <!-- MapBox container --><!-- [et_pb_line_break_holder] --> <nav id="layer-menu"> <!-- Layer selection menu --><!-- [et_pb_line_break_holder] --> <button onclick="dropdownToggle('layerDropdown')" class="dropbtn">Select scenario</button><!-- [et_pb_line_break_holder] --> <div id="layerDropdown" class="dropdown-content"></div><!-- [et_pb_line_break_holder] --> <div id = "copyright">created at <a target="_blank" href="https://cities.ait.ac.at/site/">AIT</a> by Ondrej Vesely,  2018</div><!-- [et_pb_line_break_holder] --> </nav><!-- [et_pb_line_break_holder] --> <nav id="camera-menu"> <!-- Camera selection menu --><!-- [et_pb_line_break_holder] --> <button onclick="dropdownToggle('cameraDropdown')" class="dropbtn">Views</button><!-- [et_pb_line_break_holder] --> <div id="cameraDropdown" class="dropdown-content"></div><!-- [et_pb_line_break_holder] --> </nav><!-- [et_pb_line_break_holder] --> </div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> <script><!-- [et_pb_line_break_holder] --> // Load Map via Mapbox API<!-- [et_pb_line_break_holder] --> mapboxgl.accessToken = 'pk.eyJ1Ijoib25kcmVqLXZlc2VseSIsImEiOiJjamlhOWo3cnkwMnY3M3ZwZjU5bm54c3BsIn0.69pwP4aK4CmFBlpU8I4giw';<!-- [et_pb_line_break_holder] --> var map = new mapboxgl.Map({<!-- [et_pb_line_break_holder] --> container: 'map',<!-- [et_pb_line_break_holder] --> style: 'mapbox://styles/ondrej-vesely/cjiwzak1b69r32qs4twegpruf'<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // Add navigation widget<!-- [et_pb_line_break_holder] --> var nav = new mapboxgl.NavigationControl();<!-- [et_pb_line_break_holder] --> map.addControl(nav,'top-right');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // Add fullscreen toggle button widget<!-- [et_pb_line_break_holder] --> var full = new mapboxgl.FullscreenControl();<!-- [et_pb_line_break_holder] --> map.addControl(full, 'top-right')<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // Add map scale widget<!-- [et_pb_line_break_holder] --> var scale = new mapboxgl.ScaleControl({<!-- [et_pb_line_break_holder] --> maxWidth: 250,<!-- [et_pb_line_break_holder] --> unit: 'metric'<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> map.addControl(scale, 'bottom-right');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // For the layers you want to switch between, put their IDs into list below<!-- [et_pb_line_break_holder] --> var toggleableLayerIds = ['dubai-buildings', 'dubai-buildings3', 'dubai-buildings4'];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // For the cameras you want to save, put its position as CameraOptions here<!-- [et_pb_line_break_holder] --> var cameras = [<!-- [et_pb_line_break_holder] --> {center: [55.194315, 25.126989], zoom: 17.5, bearing: -151, pitch: 60}, <!-- [et_pb_line_break_holder] --> {center: [55.186132, 25.118067], zoom: 17.7, bearing: -103, pitch: 60}, <!-- [et_pb_line_break_holder] --> {center: [55.188280, 25.113896], zoom: 17, bearing: 15, pitch: 60}<!-- [et_pb_line_break_holder] --> ];<!-- [et_pb_line_break_holder] --> <!-- [et_pb_line_break_holder] --> // Set first layer from their list as active on load<!-- [et_pb_line_break_holder] --> map.on('load', function() {<!-- [et_pb_line_break_holder] --> changeLayer(toggleableLayerIds[0])<!-- [et_pb_line_break_holder] --> // and then display welcome popup message<!-- [et_pb_line_break_holder] --> window.popup = new mapboxgl.Popup()<!-- [et_pb_line_break_holder] --> .setLngLat(map.getCenter())<!-- [et_pb_line_break_holder] --> .setHTML( //OLD IE COMPATABLE MUTLILINE STRING<!-- [et_pb_line_break_holder] --> '<dd>Here you can interact with generated model</dd>' +<!-- [et_pb_line_break_holder] --> '<dt>Click on "Select scenario" to choose between different variants' +<!-- [et_pb_line_break_holder] --> ' or click on buildings to display more information about them.</dt>' +<!-- [et_pb_line_break_holder] --> '<dt>To control the camera press Control + Left Mouse Button or use' +<!-- [et_pb_line_break_holder] --> ' one of the preset positions with "Views" menu.</dt>'<!-- [et_pb_line_break_holder] --> )<!-- [et_pb_line_break_holder] --> .addTo(map);<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> <!-- [et_pb_line_break_holder] --> // Dropdowns<!-- [et_pb_line_break_holder] --> // Add layer names to dropdown to switch layers on click<!-- [et_pb_line_break_holder] --> for (var i = 0; i < toggleableLayerIds.length; i++) {<!-- [et_pb_line_break_holder] --> var id = toggleableLayerIds[i];<!-- [et_pb_line_break_holder] --> var link = document.createElement('a');<!-- [et_pb_line_break_holder] --> link.href = 'javascript:changeLayer("' + id + '")';<!-- [et_pb_line_break_holder] --> link.textContent = id;<!-- [et_pb_line_break_holder] --> var layers = document.getElementById('layerDropdown');<!-- [et_pb_line_break_holder] --> layers.appendChild(link);<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --> // Add views to camera dropdown to switch cameras on click<!-- [et_pb_line_break_holder] --> for (var i = 0; i < cameras.length; i++) {<!-- [et_pb_line_break_holder] --> var link = document.createElement('a');<!-- [et_pb_line_break_holder] --> link.href = 'javascript:changeCamera(cameras[' + i + '])';<!-- [et_pb_line_break_holder] --> link.textContent = 'View ' + i;<!-- [et_pb_line_break_holder] --> var views = document.getElementById('cameraDropdown');<!-- [et_pb_line_break_holder] --> views.appendChild(link);<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // When the user clicks on the button, <!-- [et_pb_line_break_holder] --> // toggle between hiding and showing the dropdown content<!-- [et_pb_line_break_holder] --> function dropdownToggle(id) {<!-- [et_pb_line_break_holder] --> document.getElementById(id).classList.toggle("show");<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --> // Close the dropdowns if the user clicks outside of them<!-- [et_pb_line_break_holder] --> window.onclick = function(event) {<!-- [et_pb_line_break_holder] --> if (!event.target.matches('.dropbtn') <!-- [et_pb_line_break_holder] --> && !event.target.matches('.dropdown-content a')) {<!-- [et_pb_line_break_holder] --> document.getElementById("layerDropdown").classList.remove("show");<!-- [et_pb_line_break_holder] --> document.getElementById("cameraDropdown").classList.remove("show");<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // Layer switching<!-- [et_pb_line_break_holder] --> // Show chosen layer and hide the rest<!-- [et_pb_line_break_holder] --> function changeLayer(chosenLayer) {<!-- [et_pb_line_break_holder] --> for (var i = 0; i < toggleableLayerIds.length; i++) {<!-- [et_pb_line_break_holder] --> var id = toggleableLayerIds[i];<!-- [et_pb_line_break_holder] --> map.setLayoutProperty(id, 'visibility', 'none');<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --> map.setLayoutProperty(chosenLayer, 'visibility', 'visible');<!-- [et_pb_line_break_holder] --> activeLayer = chosenLayer<!-- [et_pb_line_break_holder] --> // change the cursor when hovering over active layer<!-- [et_pb_line_break_holder] --> map.on('mouseenter', activeLayer, function(event) {<!-- [et_pb_line_break_holder] --> map.getCanvas().style.cursor = 'help';<!-- [et_pb_line_break_holder] --> }); <!-- [et_pb_line_break_holder] --> map.on('mouseleave', activeLayer, function() {<!-- [et_pb_line_break_holder] --> map.getCanvas().style.cursor = '';<!-- [et_pb_line_break_holder] --> }); <!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // View switching<!-- [et_pb_line_break_holder] --> function changeCamera(cameraOptions){<!-- [et_pb_line_break_holder] --> // You can set camera fly speed here<!-- [et_pb_line_break_holder] --> cameraOptions['speed'] = '0.5'<!-- [et_pb_line_break_holder] --> map.flyTo(cameraOptions);<!-- [et_pb_line_break_holder] --> // Close all popups when changing view<!-- [et_pb_line_break_holder] --> window.popup.remove();<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> // Open popup with GeoJson properties on click<!-- [et_pb_line_break_holder] --> map.on('click', function(event) {<!-- [et_pb_line_break_holder] --> var features = map.queryRenderedFeatures(event.point, {layers: [activeLayer]});<!-- [et_pb_line_break_holder] --> var building = features[0];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> //console.log(building);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if (features.length) {<!-- [et_pb_line_break_holder] --> var landUse = building.properties.function || '–';<!-- [et_pb_line_break_holder] --> var height = Math.round(building.properties.height) || '–';<!-- [et_pb_line_break_holder] --> var id = (building.id) || '–';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> window.popup = new mapboxgl.Popup()<!-- [et_pb_line_break_holder] --> .setLngLat(event.lngLat)<!-- [et_pb_line_break_holder] --> .setHTML( //OLD IE COMPATABLE MUTLILINE STRING<!-- [et_pb_line_break_holder] --> '<dl>' +<!-- [et_pb_line_break_holder] --> '<dt>Land Use</dt>' +<!-- [et_pb_line_break_holder] --> '<dd>' + landUse + '</dd>' +<!-- [et_pb_line_break_holder] --> '<dt>Building Height</dt>' +<!-- [et_pb_line_break_holder] --> '<dd>' + height + 'm' + '</dd>' +<!-- [et_pb_line_break_holder] --> '<dt>ID#</dt>' +<!-- [et_pb_line_break_holder] --> '<dd>' + id + '</dd>' +<!-- [et_pb_line_break_holder] --> '</dl>')<!-- [et_pb_line_break_holder] --> .addTo(map);<!-- [et_pb_line_break_holder] --> };<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> </script>
The parametric masterplan definition allows creating first a custom street network. Afterwards you can define land use areas for parks, residential, office, and hospitality. Based on the land use definition, the building volumes are generated. You can adjust individual building rules like the height setbacks or distance spaces. The final urban 3D model may be analyzed concerning various aspects – e.g. by the DeCodingSpaces network analysis.

Please enter a password to access the download.

Wrong password, please try again

Pin It on Pinterest