{"id":479582,"date":"2019-04-25T02:38:23","date_gmt":"2019-04-25T09:38:23","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=479582"},"modified":"2021-04-20T01:54:40","modified_gmt":"2021-04-20T08:54:40","slug":"create-your-next-neighborhood-in-3d","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d","title":{"rendered":"Create your next neighborhood in 3D"},"author":9302,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771],"tags":[549072],"industry":[],"product":[36831],"class_list":["post-479582","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","tag-esrirdzurich","product-js-api-arcgis"],"acf":{"short_description":"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.","flexible_content":[{"acf_fc_layout":"content","content":"<p><em>Summary: how to build a 3D demo app used for participatory planning in a few simple steps using the ArcGIS API for JavaScript. A <a href=\"https:\/\/esri.github.io\/participatory-planning\/\">live version<\/a> of the app together with the <a href=\"https:\/\/github.com\/Esri\/participatory-planning\">source code<\/a> are both available on GitHub.<\/em><\/p>\n<p>Joining the 3D ArcGIS API for JavaScript team, my first task was to build a demo web application for participatory planning, engaging citizens in <a href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/arcgis-urban\/overview\">urban planning<\/a> processes. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Participatory_planning\">Wikipedia<\/a> describes participatory planning as a technique to consider the views of all involved parties. Besides harmonizing the urban planning process, citizen engagement is also characterized by the fact that ordinary people do not have the skills to use professional planning tools. An app that provides participatory planning therefore must be relatively simple to use.<\/p>\n<p>Even if the anticipated app would only serve for demonstration purposes, I was excited to build an app that essentially performs crowdsourcing through a 3D user interface.<br \/>\nAt the same time, it daunted me what it means to create an app allowing the user to sketch within a 3D space. Having not done anything alike before, I wasn\u2019t sure how much effort it would take to create an interface that was self-explanatory and efficient to use. In the end a participatory planning proposal should take roughly 10-15mins to create.<\/p>\n<p>To my relief using the latest sketching capabilities of the <a href=\"https:\/\/developers.arcgis.com\/javascript\/\" target=\"_blank\" rel=\"noopener\">ArcGIS API for JavaScript<\/a>, the main features were straightforward to implement. In the following paragraphs I want to share my experiences implementing the participatory planning app, especially the different ways a user can place objects in a 3D scene.<\/p>\n<p>For the demo application we decided to use a neighborhood in Dumbo, Brooklyn NY, an area that is currently undergoing multiple redevelopment projects (see <a href=\"https:\/\/thebridgebk.com\/huge-new-buildings-will-change-face-dumbo\/\" target=\"_blank\" rel=\"noopener\">this<\/a> or <a href=\"https:\/\/www.crainsnewyork.com\/article\/20180430\/REAL_ESTATE\/180439991\/williamsburg-con-ed-sites-on-brooklyn-waterfront-hit-the-market\" target=\"_blank\" rel=\"noopener\">this<\/a> article). Please note that the app and the code examples below are written in TypeScript.<\/p>\n"},{"acf_fc_layout":"content","content":"<h1>Preparing the area<\/h1>\n<p>Participatory planning usually takes place in cities where a predefined lot is being redeveloped. Space is dense and to make the proposals more meaningful we would like to show the surrounding buildings. Luckily many cities like New York provide <a href=\"https:\/\/www1.nyc.gov\/site\/doitt\/initiatives\/3d-building.page\" target=\"_blank\" rel=\"noopener\">3D buildings<\/a> as open source data. Being available as a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-SceneLayer.html\" target=\"_blank\" rel=\"noopener\"><code>SceneLayer<\/code><\/a> on <a href=\"http:\/\/www.arcgis.com\/home\/item.html?id=2e0761b9a4274b8db52c4bf34356911e\" target=\"_blank\" rel=\"noopener\">ArcGIS Online<\/a> we can go straight ahead and import all buildings into our web scene.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":499692,"id":499692,"title":"screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56","filename":"screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","filesize":560266,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56","alt":"","author":"9302","description":"","caption":"","name":"screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56","status":"inherit","uploaded_to":479582,"date":"2019-04-24 13:24:44","modified":"2019-04-24 13:24:44","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1382,"height":785,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","medium-width":459,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","medium_large-width":768,"medium_large-height":436,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","large-width":1382,"large-height":785,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","1536x1536-width":1382,"1536x1536-height":785,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","2048x2048-width":1382,"2048x2048-height":785,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56-819x465.png","card_image-width":819,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-arcgis-home-webscene-viewer-html-2019-04-24-14_16_56.png","wide_image-width":1382,"wide_image-height":785}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Now the only issue is that we also have buildings where we want to have our users create new proposals. One of the features of ArcGIS API for JavaScript release <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/guide\/release-notes\/\" target=\"_blank\" rel=\"noopener\">4.11<\/a> is the ability to spatially filter features on the client based on a given geometry.<\/p>\n<p>As we will see, it would be relatively simple to allow the user to define this area themselves by drawing a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-Polygon.html\" target=\"_blank\" rel=\"noopener\"><code>Polygon<\/code><\/a>. In most cases however, the redevelopment site is predefined and proposals created by users should be restricted to that area.<br \/>\nBecause of that, the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-Polygon.html\" target=\"_blank\" rel=\"noopener\"><code>Polygon<\/code><\/a> confining the area is hardcoded in the application. We pass it directly to a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-views-layers-support-FeatureFilter.html\" target=\"_blank\" rel=\"noopener\"><code>FeatureFilter<\/code><\/a> on the layer which will hide any buildings inside the geometry.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Coordinates of predefined redevelopment area<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> planningArea = [\r\n  [-<span style=\"color: #008080;\">73.9845647<\/span>, <span style=\"color: #008080;\">40.7037208<\/span>],\r\n  [-<span style=\"color: #008080;\">73.9799378<\/span>, <span style=\"color: #008080;\">40.7035781<\/span>],\r\n  [-<span style=\"color: #008080;\">73.979259<\/span>, <span style=\"color: #008080;\">40.7048104<\/span>],\r\n  [-<span style=\"color: #008080;\">73.9789216<\/span>, <span style=\"color: #008080;\">40.7062514<\/span>],\r\n  [-<span style=\"color: #008080;\">73.9864537<\/span>, <span style=\"color: #008080;\">40.7056929<\/span>],\r\n  [-<span style=\"color: #008080;\">73.9864922<\/span>, <span style=\"color: #008080;\">40.7044834<\/span>],\r\n  [-<span style=\"color: #008080;\">73.9845199<\/span>, <span style=\"color: #008080;\">40.7043917<\/span>],\r\n];\r\n\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Use FeatureFilter to hide everything inside area<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> featureFilter = <span style=\"color: #333; font-weight: bold;\">new<\/span> FeatureFilter({\r\n  spatialRelationship: <span style=\"color: #d14;\">\"disjoint\"<\/span>,\r\n  geometry: {\r\n    type: <span style=\"color: #d14;\">\"polygon\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ autocasts as new Polygon()<\/span>\r\n    rings: [planningArea],\r\n  },\r\n});\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h1>Changing the basemap<\/h1>\n<p>To keep things simple, I decided to create a very simplified basemap for the app. With the help of the new <a href=\"https:\/\/developers.arcgis.com\/vector-tile-style-editor\/\" target=\"_blank\" rel=\"noopener\">Vector Tile Editor<\/a> it was possible to create such a basemap in no time. Starting with the basic <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-Map.html#basemap\" target=\"_blank\" rel=\"noopener\">Light Gray<\/a> vector-based tile layer, I mapped every type of feature to one of the following ground types, each having a distinct color: land, parks, water, streets and walking paths.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":500572,"id":500572,"title":"screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14","filename":"screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","filesize":283627,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14","alt":"","author":"9302","description":"","caption":"","name":"screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14","status":"inherit","uploaded_to":479582,"date":"2019-04-25 06:31:20","modified":"2019-04-25 06:31:20","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2880,"height":1619,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","1536x1536-width":1536,"1536x1536-height":863,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14.png","2048x2048-width":2048,"2048x2048-height":1151,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-developers-arcgis-vector-tile-style-editor-5cf1abb43c25482e8a9e373953498999-layers-2019-04-25-08_29_14-1920x1080.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Having an empty lot with a simple basemap, it&#8217;s time we allow anyone&#8217;s creativity free rein coming up with a proposal plan. To start with, it would be nice if users could change features on the basemap. When a neighborhood is redeveloped, it\u2019s common to create new green space while laying out streets or walking paths from scratch.<\/p>\n<p>This is where we will apply the new 3D drawing capabilities of the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-Sketch-SketchViewModel.html\" target=\"_blank\" rel=\"noopener\"><code>SketchViewModel<\/code><\/a> for the first time. As we will see, drawing basic geometries on the ground is straight forward. By applying custom symbols matching the colors of the basemap, it instantly feels like we are changing the basemap.<\/p>\n<p>For streets we use a gray <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-Polyline.html\" target=\"_blank\" rel=\"noopener\"><code>Polyline<\/code><\/a>:<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Tell new SketchViewModel which layer to use\r\n\/\/ for drawing<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> sketchViewModel = <span style=\"color: #333; font-weight: bold;\">new<\/span> SketchViewModel({\r\n  layer: graphicsLayer,\r\n  view: view\r\n});\r\n\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Create gray polyline for streets<\/span>\r\nsketchViewModel.polylineSymbol = {\r\n  type: <span style=\"color: #d14;\">\"simple-line\"<\/span>,  <span style=\"color: #998; font-style: italic;\">\/\/ new SimpleLineSymbol()<\/span>\r\n  color: <span style=\"color: #d14;\">\"#cbcbcb\"<\/span>,\r\n  width: <span style=\"color: #008080;\">20<\/span>,\r\n};\r\nsketchViewModel.create(<span style=\"color: #d14;\">\"polyline\"<\/span>);\r\n<\/code><\/pre>\n<p>While for parks, lakes or concrete ground we use a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-Polygon.html\" target=\"_blank\" rel=\"noopener\"><code>Polygon<\/code><\/a>:<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Create green polygon for lawn<\/span>\r\nsketchViewModel.polygonSymbol = {\r\n  type: <span style=\"color: #d14;\">\"simple-fill\"<\/span>,  <span style=\"color: #998; font-style: italic;\">\/\/ new SimpleFillSymbol()<\/span>\r\n  color: <span style=\"color: #d14;\">\"#bdce8a\"<\/span>,\r\n  style: <span style=\"color: #d14;\">\"solid\"<\/span>,\r\n  outline: { width: <span style=\"color: #008080;\">0<\/span> },\r\n};\r\nsketchViewModel.create(<span style=\"color: #d14;\">\"polygon\"<\/span>);\r\n<\/code><\/pre>\n<p>Because we are essentially trying to change the ground layers with this, it\u2019s important to draw the new graphics on a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-GraphicsLayer.html\" target=\"_blank\" rel=\"noopener\"><code>GraphicsLayer<\/code><\/a> having elevation mode <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-GraphicsLayer.html#elevationInfo\" target=\"_blank\" rel=\"noopener\"><code>\u201con-the-ground\"<\/code><\/a>. With this setting graphics are draped onto the underlaying elevation layer.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":499712,"id":499712,"title":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19","filename":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","filesize":270364,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19","alt":"","author":"9302","description":"","caption":"","name":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19","status":"inherit","uploaded_to":479582,"date":"2019-04-24 13:25:07","modified":"2019-04-24 13:25:07","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2304,"height":1296,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19.png","2048x2048-width":2048,"2048x2048-height":1152,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_06_19-1920x1080.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Creating buildings<\/h1>\n<p>The next thing any user would probably want to do at this point is place a few buildings. Because anyone should be able to use a citizen engagement app, we want to keep the options simple while allowing for creativity. Given that it seemed like a good compromise to allow arbitrary footprints while restricting the building heights to three different numbers of floors: 3, 5 and 10.<\/p>\n<p>Going from drawing ground in the previous paragraph to drawing buildings is as simple as applying an extruded symbol to the graphic used in the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-Sketch-SketchViewModel.html\" target=\"_blank\" rel=\"noopener\"><code>SketchViewModel<\/code><\/a>. The extrusion height is taken from the selected number of stories multiplied by a constant.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Create buildings with extruded symbols<\/span>\r\nsketchViewModel.polygonSymbol = {\r\n  type: <span style=\"color: #d14;\">\"polygon-3d\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new PolygonSymbol3D()<\/span>\r\n  symbolLayers: [{\r\n    type: <span style=\"color: #d14;\">\"extrude\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new ExtrudeSymbol3DLayer()<\/span>\r\n    material: {\r\n      color: <span style=\"color: #d14;\">\"#FFFFFF\"<\/span>,\r\n    },\r\n    edges: {\r\n      type: <span style=\"color: #d14;\">\"solid\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new SolidEdges3D()<\/span>\r\n      color: <span style=\"color: #d14;\">\"#646464\"<\/span>,\r\n    },\r\n    size: numberOfFloors * <span style=\"color: #008080;\">3<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ 3 meters floor height<\/span>\r\n  }],\r\n};\r\nsketchViewModel.create(<span style=\"color: #d14;\">\"polygon\"<\/span>);\r\n<\/code><\/pre>\n<p>Any instantiated <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-Sketch-SketchViewModel.html\" target=\"_blank\" rel=\"noopener\"><code>SketchViewModel<\/code><\/a> actively listens to click events on the map. When selecting a graphic on the associated layer, the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-Sketch-SketchViewModel.html\" target=\"_blank\" rel=\"noopener\"><code>SketchViewModel<\/code><\/a> will initiate an update action and provide manipulators for each vertex of the selected graphic. That way the user can modify the shape, but also remove and add vertices.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":499722,"id":499722,"title":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14","filename":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","filesize":225197,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14","alt":"","author":"9302","description":"","caption":"","name":"screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14","status":"inherit","uploaded_to":479582,"date":"2019-04-24 13:25:15","modified":"2019-04-24 13:25:15","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2304,"height":1296,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14.png","2048x2048-width":2048,"2048x2048-height":1152,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-10_15_14-1920x1080.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Placing realistic symbols<\/h1>\n<p>While the resulting plans are a good start and serve as a sketch, we would still like to place 3D objects to make the plan look more realistic. Esri maintains a <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/guide\/esri-web-style-symbols\/index.html\" target=\"_blank\" rel=\"noopener\">gallery<\/a> of 3D models as web style symbols. It provides a set of common objects such as trees, vehicles, street signs etc.<br \/>\nHowever, with release 4.11 of the ArcGIS API for JavaScript, using your own <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/sample-code\/import-gltf\/index.html\" target=\"_blank\" rel=\"noopener\">glTF models<\/a> in a scene has become straightforward. If they are available online, you can import them simply by providing the corresponding URL. The API will then take care of downloading and rendering the model.<\/p>\n<p>In the Participatory Planning app we integrated the <a href=\"https:\/\/sketchfab.com\/developers\/download-api\/downloading-models\/javascript\" target=\"_blank\" rel=\"noopener\">SketchFab widget<\/a> providing a gallery of freely available glTF models. When the user selects a model, the widgets passes control back to the app together with a link to download the 3D model and place it into the scene.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ Add graphic with symbol layer pointing to glTF model<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> glTFModel = <span style=\"color: #333; font-weight: bold;\">new<\/span> Graphic({\r\n  geometry: {\r\n    type: <span style=\"color: #d14;\">\"point\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new Point()<\/span>\r\n    x: <span style=\"color: #008080;\">40.7<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ longitute<\/span>\r\n    y: -<span style=\"color: #008080;\">73.9<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ latitude<\/span>\r\n  },\r\n  symbol: {\r\n    type: <span style=\"color: #d14;\">\"point-3d\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new PointSymbol3D()<\/span>\r\n    symbolLayers: [{\r\n      type: <span style=\"color: #d14;\">\"object\"<\/span>, <span style=\"color: #998; font-style: italic;\">\/\/ new ObjectSymbol3DLayer()<\/span>\r\n      resource: {\r\n        <span style=\"color: #998; font-style: italic;\">\/\/ URL of glTF model<\/span>\r\n        href: <span style=\"color: #d14;\">\"https:\/\/developers.arcgis.com\/javascript\/latest\/sample-code\/import-gltf\/live\/tent.glb\"<\/span>\r\n      }\r\n    }]\r\n  }\r\n});\r\ngraphicsLayer.add(glTFModel);\r\n<\/code><\/pre>\n<p>Please note that glTF models are sometimes provided as ZIP archives. In that case it is necessary to unpack and load them as a blob object before passing them to the API. Check out the <a href=\"https:\/\/github.com\/Esri\/participatory-planning\/blob\/master\/src\/ts\/widget\/support\/GlTFImport.ts\" target=\"_blank\" rel=\"noopener\">source code<\/a> to see how this can be done directly in the Browser.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":499732,"id":499732,"title":"screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57","filename":"screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","filesize":277042,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57","alt":"","author":"9302","description":"","caption":"","name":"screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57","status":"inherit","uploaded_to":479582,"date":"2019-04-24 13:25:25","modified":"2019-04-24 13:25:25","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2304,"height":1296,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57.png","2048x2048-width":2048,"2048x2048-height":1152,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-11_13_57-1920x1080.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>As we have seen in the previous code example, 3D symbols are placed into a scene using point graphics. While the position is defined by a point geometry, size and orientation can be changed on the symbol layer. This is where the new <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-widgets-Sketch-SketchViewModel.html\" target=\"_blank\" rel=\"noopener\"><code>SketchViewModel<\/code><\/a> really shines: clicking on the 3D model it automatically adds a transform tool allowing the user to intuitively place the 3D object in the scene.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\">\r\n<span style=\"color: #998; font-style: italic;\">\/\/ After adding the glTF model, use the<\/span>\r\n<span style=\"color: #998; font-style: italic;\">\/\/ SketchViewModel to place it in the scene<\/span>\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> sketchViewModel = <span style=\"color: #333; font-weight: bold;\">new<\/span> SketchViewModel({\r\n  layer: graphicsLayer,\r\n  view: view,\r\n});\r\nsketchViewModel.update(gltfModel);\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h1>Submitting a proposal<\/h1>\n<p>How a proposal in the end is then submitted depends a lot on how they are evaluated. One might want to have a dashboard with all proposals to get an overview. In countries like the U.S. where it is mandatory to take each citizen feedback into account, it would probably make sense to equip the submissions with text and collect them in an issue tracker.<\/p>\n<p>For simplicity we decided to create a snapshot using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-views-SceneView.html#takeScreenshot\" target=\"_blank\" rel=\"noopener\">screenshot API<\/a>. Besides the user-created sketch, we also take a snapshot of what the area looks like today. This is accomplished showing the satellite basemap using the same perspective. Combining both screenshots together we get a nice before\/after view of the area:<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":500242,"id":500242,"title":"ParticipatoryPlanning (5)","filename":"ParticipatoryPlanning-5-1.png","filesize":326398,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\/participatoryplanning-5-2","alt":"","author":"9302","description":"","caption":"","name":"participatoryplanning-5-2","status":"inherit","uploaded_to":479582,"date":"2019-04-24 17:18:45","modified":"2019-04-24 17:18:45","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":864,"height":864,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","medium-width":261,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","medium_large-width":768,"medium_large-height":768,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","large-width":864,"large-height":864,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","1536x1536-width":864,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","2048x2048-width":864,"2048x2048-height":864,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1-465x465.png","card_image-width":465,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/ParticipatoryPlanning-5-1.png","wide_image-width":864,"wide_image-height":864}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>As already pointed out above, the app is available on GitHub as a <a href=\"https:\/\/esri.github.io\/participatory-planning\/\" target=\"_blank\" rel=\"noopener\">live version<\/a> and <a href=\"https:\/\/github.com\/Esri\/participatory-planning\" target=\"_blank\" rel=\"noopener\">source code<\/a>. Feel free to try it out and reuse it as a starting point for your own projects. By changing the <a href=\"https:\/\/github.com\/Esri\/participatory-planning\/blob\/master\/src\/index.ts\" target=\"_blank\" rel=\"noopener\">settings<\/a> and adding your own web scene, you can define other areas for Participatory Planning.<\/p>\n<p>I\u2019m looking forward seeing some proposals you have created! And of course I appreciate any feedback on the app or blog.<\/p>\n<h2>Thanks to<\/h2>\n<ul>\n<li><a href=\"https:\/\/sketchfab.com\/\" target=\"_blank\" rel=\"noopener\">SketchFab<\/a> for their <a href=\"https:\/\/sketchfab.com\/developers\/download-api\/downloading-models\/javascript\" target=\"_blank\" rel=\"noopener\">widget<\/a> and <a href=\"https:\/\/sketchfab.com\/3d-models\/day-trip-75372b85177c4a9ea192f004b1e72668\" target=\"_blank\" rel=\"noopener\">model<\/a> used in the participatory planning app and blog<\/li>\n<li>The New York City <a href=\"http:\/\/www1.nyc.gov\/site\/doitt\/index.page\" target=\"_blank\" rel=\"nofollow noopener\">DoITT<\/a> for publishing their buildings as <a href=\"https:\/\/www1.nyc.gov\/site\/doitt\/initiatives\/3d-building.page\" target=\"_blank\" rel=\"noopener\">3d models<\/a><\/li>\n<\/ul>\n"}],"authors":[{"ID":9302,"user_firstname":"Arno","user_lastname":"Fiva","nickname":"Arno Fiva","user_nicename":"afiva","display_name":"Arno Fiva","user_email":"afiva@esri.com","user_url":"http:\/\/js.arcgis.com","user_registered":"2019-03-26 21:36:58","user_description":"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-15_54_42-1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-15_54_42.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Create your next neighborhood in 3D using the ArcGIS API for JavaScript<\/title>\n<meta name=\"description\" content=\"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create your next neighborhood in 3D\" \/>\n<meta property=\"og:description\" content=\"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-20T08:54:40+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\"},\"author\":{\"name\":\"Arno Fiva\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224\"},\"headline\":\"Create your next neighborhood in 3D\",\"datePublished\":\"2019-04-25T09:38:23+00:00\",\"dateModified\":\"2021-04-20T08:54:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"EsriRDZurich\"],\"articleSection\":[\"3D Visualization &amp; Analytics\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\",\"name\":\"Create your next neighborhood in 3D using the ArcGIS API for JavaScript\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2019-04-25T09:38:23+00:00\",\"dateModified\":\"2021-04-20T08:54:40+00:00\",\"description\":\"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create your next neighborhood in 3D\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224\",\"name\":\"Arno Fiva\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg\",\"caption\":\"Arno Fiva\"},\"description\":\"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.\",\"sameAs\":[\"http:\/\/js.arcgis.com\",\"https:\/\/www.linkedin.com\/in\/arnofiva\/\",\"https:\/\/x.com\/arnofiva\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/afiva\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Create your next neighborhood in 3D using the ArcGIS API for JavaScript","description":"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d","og_locale":"en_US","og_type":"article","og_title":"Create your next neighborhood in 3D","og_description":"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2021-04-20T08:54:40+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d"},"author":{"name":"Arno Fiva","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224"},"headline":"Create your next neighborhood in 3D","datePublished":"2019-04-25T09:38:23+00:00","dateModified":"2021-04-20T08:54:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d"},"wordCount":6,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["EsriRDZurich"],"articleSection":["3D Visualization &amp; Analytics"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d","name":"Create your next neighborhood in 3D using the ArcGIS API for JavaScript","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2019-04-25T09:38:23+00:00","dateModified":"2021-04-20T08:54:40+00:00","description":"Crowdsourcing with citizens: building a participatory planning app with a few simple steps using the ArcGIS API for JavaScript.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/create-your-next-neighborhood-in-3d#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Create your next neighborhood in 3D"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224","name":"Arno Fiva","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg","caption":"Arno Fiva"},"description":"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.","sameAs":["http:\/\/js.arcgis.com","https:\/\/www.linkedin.com\/in\/arnofiva\/","https:\/\/x.com\/arnofiva"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/afiva"}]}},"text_date":"April 25, 2019","author_name":"Arno Fiva","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/afiva","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/04\/screencapture-esri-github-io-participatory-planning-2019-04-24-15_54_42.png","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":549072,"name":"EsriRDZurich","slug":"esrirdzurich","term_group":0,"term_taxonomy_id":549072,"taxonomy":"post_tag","description":"","parent":0,"count":96,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":687,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":363,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/479582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/9302"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=479582"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/479582\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=479582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=479582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=479582"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=479582"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=479582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}