ArcGIS Blog

3D Visualization & Analytics

ArcGIS Maps SDK for JavaScript

3D Print a City using ArcGIS City Download Portal: Creation and export of a 3D Object Feature Layer

By Paul Gibbs

Table of Contents

  1. Why 3D Printing?
  2. 3D Printing within the ArcGIS System
  3. Tutorial: Create 3D City and host as 3D Object Feature Layer
    1. Sourcing Data: Have to start somewhere
    2. Data Preparation: Getting data ready for printing
    3. Eliminating Overlaps: Removing extraneous buildings
    4. Publish your data to your portal
    5. Load the Data into City Download Portal: Our Final Step
  4. Frequently Asked Questions

Why 3D Printing?

When I bought my first 3D printer for $100 in 2022—right after joining Esri—I immediately wondered how I could 3D print GIS data. Open-source tools existed, but I wanted to work inside the ArcGIS System. At the time, there wasn’t a built-in way to export a printable STL file.

Now there are two workflows. One uses the ArcGIS Maps SDK for JavaScript and the other uses ArcGIS Pro, which I will cover in a future blog. As 3D printing grows, it offers a hands-on way to explore GIS data by turning a digital 3D visualization into a physical model.

3D Printing within the ArcGIS System: A start

The ArcGIS Maps SDK for JavaScript team within Esri earlier this year released the City Download Portal as an open-source project. It’s a browser tool that exports 3D-printable city models from a web scene. The tool first queries the ground mesh and 3D buildings, then exports the result as a GLB file. GLB is the binary form of glTF, the JSON-based 3D asset format.

Since slicers typically expect a triangle-mesh format, such as STL, I extended the application so it converts GLB to STL directly in the browser. I also added an optional base extrusion to create a flat print surface. As a result, the forked version of City Download Portal can export 3D-printable STL models directly through the ArcGIS Maps SDK for JavaScript.

How the Workflow Operates

The City Download Portal works by performing two key queries:

  1. Surface elevation, to retrieve the ground mesh.

  2. 3D Object Feature Layer, to retrieve the buildings associated with the scene service.

Because the app loads a web scene hosted in ArcGIS Online or ArcGIS Enterprise, you may see an authentication prompt depending on how the content is shared.

In this tutorial, I will walk through how to create your own 3D-print-ready 3D Object Feature Layer using ArcGIS Pro with building data from the Overture Maps Foundation.

Tutorial: Create 3D City and host as 3D Object Feature Layer

A screenshot of the Overture Maps explorer tool located over downtown Chicago.
Overture Maps Explorer over downtown Chicago.

Sourcing Data: Have to start somewhere

First we open the Overture Maps Explorer and follow these steps

  1. Turn on Buildings (and Building Part if needed).
  2. Pan/zoom to your area of interest.
  3. Zoom in to ~level 15+ until Download visible activates.
  4. Click Download visible.
  5. In the dialog, choose GeoJSON and download the files.
  6. Keep the buildings and building-part GeoJSON for this workflow (they include height attributes you’ll use to generate 3D models).
  7. This will download 8 GeoJSON files but the two we are interested in are buildings and building-part

 

Data Preparation: Getting data ready for printing

We have our data sourced so we can open ArcGIS Pro, create a new local scene, and lets place our two GeoJSON files within the project folder. First tool we will run is JSON To Features for both buildings and parts. Select the GeoJSON, provide an output name, and choose Polygon as the geometry type.

At this point, you should have a feature layer for Buildings and Building Parts. If the layers are not visible, adjust their elevation settings in layer properties. Set for both absolute height.
Next, select each layer. On the feature layer sub ribbon at the top, you can now select extrusion type, select base height, then for field select height and leave unit to meters.

 

Eliminating Overlaps: Removing extraneous buildings

After extrusion, you should see 3D buildings in the scene, but Buildings and Building Parts are overlapping. To start click on the map tab at the top, click select by location, use buildings as input features, relationship as intersect, selecting features as parts, and selection type as new selection. Run this and now you should have all of the intersecting buildings selected, then in the edit tab we delete these features. This will handle most overlap but if any are missed feel free to also delete any overlapping buildings.

Screenshot of ArcGIS Pro with extruded building and building part footprints
We should see no overlapping buildings.

After fixing overlaps, run Merge (Data Management Tools) to combine Buildings and Parts into a single feature class. Use both datasets as inputs and enable Add source information to output.

 

Convert 2D Data to 3D: Making extrusions solid

Currently you have a polygon feature layer that is extruded to create a 2.5D representation, the data is 2D but we extrude it out to symbolize it as 3D hence 2.5D. Now we need to run Layer 3D to Feature Class which takes the extruded polygons and creates multipatch features so they are true closed 3D Models. Run the tool with our all_buildings layer and output an all_buildings_3D feature class.

We have one final step before publishing and that is converting our multipatch feature layer to be a 3D Object Feature Layer by running the add 3D Formats to Multipatch tool. Select all_buildings_3D as the input features and we are going to add the 3D Formats .glb and .gltf. After the tool completes, you’ll have a 3D Object Feature Layer with true 3D Objects as the feature class. Then use add 3D Formats to Multipatch instead of Export 3D Objects as we are wanting to convert our Feature Class to become a 3D Object Layer Feature class which is what the tool expects as input with Export 3D Objects.

 

Publishing our 3D data: Making it ready to share

Next, follow these steps to publish the 3D Object Feature Layer as well as the 3D Scene.

  1. In ArcGIS Pro, open Share > Web Layer > Publish Web Layer.
  2. Name the layer and add Summary, Tags, and (if applicable) Categories per your org standards.
  3. Set Layer Type to Feature (or Scene for 3D object layers).
  4. Open the Configuration tab → Operations and enable Export Data (if you want users to export).
  5. Click Analyze, resolve any messages, then Publish.

Note: Publishing 3D content can create a related scene layer and build cache in your organization, which may take additional time.

Load the Data into City Download Portal: Our Final Step

Then as soon as the cache finishes, open the scene in Scene Viewer and switch to a 2D basemap to avoid visual confusion.

When the scene is ready, copy the item id from the URL at the top of the browser and paste it at the end of the URL of the forked City Download Portal.

My fork of the City Download Portal already has this item id.

Screenshot of the city download portal application with a layer of Chicago displayed
3D Object Feature Layer of Chicago's downtown buildings

The web scene should appear after authentication depending on sharing level. Then we can go ahead and query what we would like to print.
Finally, set an origin, draw out the bounding box, then we are able to select GLB or STL, give the file a name, select if we want to include the origin marker, select if we want to extrude the terrain base downward and if so how much.

 

 

Click download to get the STL file that you can 3D print. Be sure to share with us what you create and print!

Screenshot of a 3D model of LoD1 downtown chicago
3D Model of Downtown Chicago as a STL file ready for 3D printing

Frequently Asked Questions

What is 3D Printing?
3D printing is a manufacturing process that builds physical objects layer by layer from a digital 3D model. Printers read G-code generated by a slicer and deposit or solidify material (such as plastic filament or resin) to create the shape.
What is a Scene?
In the ArcGIS system, a scene is a 3D visualization environment that displays terrain, elevation, 3D layers, and other geospatial content. Scenes can be viewed in Scene Viewer, ArcGIS Pro, or the ArcGIS Maps SDK for JavaScript, and they support perspective viewing, tilt, and full 3D rendering.
What is open source?
Open source refers to software whose source code is publicly available and licensed so that anyone can view, modify, and redistribute it. Open-source projects encourage transparency, collaboration, and community-driven improvement.
What makes Paul’s version of City Download Portal different?
It uses Three.js to read the GLB output of the City Download Portal and convert it to STL. It also adds an optional extruded base beneath the model to make 3D printing easier and more stable.
What is a Slicer?
A slicer is software that takes a 3D model file (STL, OBJ, GLB, 3MF, etc.) and converts it into G-code instructions for a 3D printer. The slicer determines toolpaths, layer height, infill, supports, and print speed, translating the 3D mesh into precise movements and temperatures for the printer.
What are the limitations of this workflow?
Only 3D Object Scene Layers can be exported, because they expose full 3D geometries. Standard polygon or multipatch layers will not work unless converted into 3D Object layers first.
You mentioned a second workflow using ArcGIS Pro?
Yes. ArcGIS Pro can also generate STL files directly using a different workflow. A dedicated blog post covering that process is coming soon.
If I don’t have a 3D printer, where could I print something I make?
Many public libraries and community makerspaces offer 3D printing services. You can also use online printing services that will produce your model in a variety of materials and ship it to you.
What printer was used? What material?
I used a Bambu Lab X1 Carbon with orange PETG.
Data Attribution
Building data © OpenStreetMap contributors, Microsoft, Esri Community Maps contributors, Google, USGS, BTN, Qian Shi et al., and Overture Maps Foundation.
Licensed under ODbL and CC BY 4.0, as applicable.

Share this article

Subscribe
Notify of
0 Comments
Oldest
Newest
Inline Feedbacks
View all comments