GIS Pipeline

Build a 3D scene map from OpenStreetMap or GML data
View as Markdown

The GIS pipeline turns geospatial source data into 3D scene assets stored in S3, ready for AODT simulations and the viewer.

This quickstart shows how to access a pregenerated scene, as well as create two different maps: one from OpenStreetMap (OSM) and one from CityGML files. For deeper background, concepts, tuning, and troubleshooting, see Scene Generation.

Prerequisites

Before running these examples, confirm:

  1. The worker stack is running, including the GIS worker container and Temporal services.
  2. The client is installed and dt_client and _config are importable.
  3. An S3-compatible bucket is reachable. The default worker stack ships with MinIO at http://<worker-host>:9002 and credentials minioadmin / minioadmin.

A loaded simulation scenario (initiated with start(yaml_content)) is not required for prepare_map.

Use the generated scene

Reference the output key in your simulation YAML under gis.scene.scene_url:

1gis:
2 scene:
3 scene_url: demo_gis/tokyo
4 vegetation:
5 active: false
6 geojson: []

The same key works as the first argument to SimConfig() when you build the YAML in code:

1from _config import SimConfig, SimMode
2
3config = SimConfig("demo_gis/tokyo", SimMode.EM, "examples/example_client_assets.yml")

See Configuring Sim YAML for the full sim YAML reference.

The viewer reads Cesium 3D Tiles from <scene_url>/viz/tiles/ and quantized-mesh terrain from <scene_url>/viz/terrain/. See Viewer Installation for connection settings.

Generate a map from OSM

The simplest way to create a map is via OSM. With this method, there is no need to source GIS data yourself. Instead, source data is automatically retrieved from OSM and other publicly available sources. Only a bounding box of your area of interest is needed.

From the client/ directory, with the worker reachable:

$python examples/example_prepare_map.py \
> --s3_endpoint http://<worker-host>:9002

That run writes a Seattle bounding-box scene to s3://aerial-data/demo_gis/test_osm.usd/ using MinIO defaults.

Pick your own region with bounding-box flags and an output key:

$python examples/example_prepare_map.py \
> --s3_endpoint http://<worker-host>:9002 \
> --min_lon 139.74 --min_lat 35.66 \
> --max_lon 139.75 --max_lat 35.67 \
> --output_folder_key demo_gis/tokyo

Expected output:

Connecting to Digital Twin server at localhost:50051
Preparing OSM map -> s3://aerial-data/demo_gis/tokyo
(streaming heartbeats will appear below while the workflow runs)
...
Map ready: s3://aerial-data/demo_gis/tokyo

Once successfully run, map files will be generated in the target endpoint. These files can be browsed under <output_folder_key>/sim/ and <output_folder_key>/viz/. For more details on what these files are, visit the Scene Generation output layout.

Generate a map from CityGML

CityGML files are a supported data source. As an example data source for Japan, consider PLATEAU.

Point the example at server-accessible CityGML files and pass the input EPSG code:

$python examples/example_prepare_map.py \
> --task gml \
> --s3_endpoint http://<worker-host>:9002 \
> --input_files /data/buildings.gml /data/terrain.gml \
> --epsg_in 6697 \
> --output_folder_key demo_gis/my_gml_scene

GML jobs require non-empty --input_files and a valid --epsg_in for the source coordinate system. The paths must be reachable from the GIS worker container, not just the client machine.

Next steps