Scene Importer#

The Aerial Omniverse Digital Twin is built on NVIDIA Omniverse. As such, it requires scene geometries to be in OpenUSD format. Geospatial information, however, is often available and distributed in other formats. To bridge the gap, the Aerial Omniverse Digital Twin offers a pipeline to import geospatial data from CityGML format as well as OpenStreetMap OSM.

Import via AODT UI#

One way of running the GIS processing tools is through the AODT UI. To set up your container for this use case, the GIS container must have a data folder mounted at the container location /src/aodt_gis/data. The channel listener script must also be running.

Container setup#

As first thing, we need to log into the nvcr.io container registry using the $oauthtoken username and the NGC API Key:

docker login nvcr.io
Username: $oauthtoken
Password: <NGC_CLI_API_KEY>

More information about NGC_CLI_API_KEY can be found at NGC - User’s Guide.

Next, we run the container and mount <local data>, which is the local folder where the source data is stored:

docker run --rm -it -v <local data>:/src/aodt_gis/data --pull=always nvcr.io/esee5uzbruax/aodt-gis:1.2.0 /bin/bash

Now that we are inside the container, we start up the channel listener using:

cd /src/aodt_gis/aodt_py/aodt_ui_gis
python3 channel_listener.py --nucleus <Nucleus server IP> --broadcast <unique broadcast channel name here>

The broadcast channel listed here will be the same one used in the UI GIS tab. The container is now ready to connect to the UI.

AODT UI setup#

Connecting to a GIS worker#

Once the GIS container is set up on the host machine, you are now able to attach a worker from the UI. The worker allows the UI to trigger GIS jobs in the host machine, and for the GIS container to communicate progress and data back to the UI. Attaching the worker takes place in the GIS Channel Configuration section.

gis_channel_configuration

The Server path is the URL for the Omniverse Nucleus server. The Broadcast Channel Name is the name of the private channel that will be created between the UI and the GIS worker. Once established, the UI and GIS worker will communicate exclusively on this channel. The server path and broadcast channel name should be the same ones used to start up the channel listener in the GIS container.

Note: The Broadcast Channel Name must be different from the EM worker broadcast channel name. The connection will not be allowed otherwise. This is to avoid interference when an EM worker and a GIS worker is attached at the same time.

Once set, click Attach  Worker to attach to an available GIS worker.

Once the server is validated and a worker is attached successfully, a confirmation window should appear:

attach_worker_success_window

If there are no workers available, the connection cannot be established, or the server is invalid, an error window will appear. In that case, check the server connection, validity, and that the channel listener is running on the GIS container.

Starting GIS Processing from the UI#

Once a worker is attached, we are able to trigger GML or OSM jobs. The progress bar below will communicate the status and progress of each job. Only one job can be run at once. Any logs generated by the UI or the GIS container will be in the Console tab of the UI with the Info filter enabled. Below are more details on how to start processing for each job type.

OpenStreetMap (OSM)#

An explanation of the parameters available through the graphical interface can be found in the latter sections of this document.

Assuming a worker is attached, once parameters are set, we can click the Start OSM Processing button. The progress bar below will reflect progress from the GIS container, along with status logs.

gis_tab_osm_progress

When the job completes successfully, the status will read Completed successfully, and the USD file will be in the path specified in the Output stage field. The console will contain additional information regarding the job generated by the attached worker. If the job fails, the status will read Failed (check console for more info). The console will contain more information about why the job failed.

CityGML#

An explanation of the parameters available through the graphical interface can be found in the previous section of this document.

Assuming a worker is attached, once the parameters are set, we can click the Start GML Processing button to produce the scene we want to analyze. The progress bar below will reflect progress of the GIS container in generating the scene, along with status logs.

gis_tab_gml_progress

When the job completes successfully, the status will read Completed successfully, and the USD file will be in the path specified in the Output stage field. If the job fails, the status will read Failed (check console for more info) and the console will contain more information.

Import via command line interface (CLI)#

We may also use the CityGML and OSM import tools using the CLI directly. To do so, as in other setup steps, we boot up the container by running

docker run --rm -it -v <local_path>:/src/aodt_gis/data  --pull=always nvcr.io/esee5uzbruax/aodt-gis:1.1.0 /bin/bash

where <local_data> is the folder where the GIS data is contained.

CityGML Import#

The GML import script can be accessed directly at

cd /src/aodt_gis/aodt_py/aodt_ui_gis
python3 gis_jobs/gml_job.py

and it has following parameters:

Parameter

Required

Description

-i

Yes

This argument specifies the URL/s of the source data.

--o

Yes

This argument specifies the URL where the USD scene needs to be saved.

--epsg_in
--epsg_out

N️o

If set, the pipeline will perform a conversion between input and output coordinate reference systems, as defined by their EPSG codes. Currently, only the transform from geographic coordinate systems (angular units) to projected coordinate systems (linear units) is supported. For example, a transform from EPSG:6697 to EPSG:32654 would be expressed as --epsg_in 6697 --epsg_out 32654.

--disable_interiors

N️o

Specifies whether or not procedurally-generated indoor spaces are to be created.

--rough

N️o

Creates rougher cuts in the mobility mesh, ie not as tight to the footprint geometry. May be used in particularly complicated or large scenes.

For example, suppose we would like to import a portion of Tokyo from PLATEAU.

First, run a script to download the Tokyo CityGML bundle to our data folder. Note, this may take some time.

cp  /src/aodt_gis/samples/get_tokyo.bash /src/aodt_gis/data
sh /src/aodt_gis/samples/get_tokyo.bash
rm -r /src/aodt_gis/data/get_tokyo.bash

Next, we can run the command

python3 gml_job.py -i /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393599_bldg_6697_2_op.gml -ei 6697 -eo 32654 -o /src/aodt_gis/data/tokyo_small.usd

The parameters

-ei 6697 -eo 32654

indicate that we are projecting from the source coordinate reference system (EPSG 6697) to the UTM (Universal Transverse Mercator) zone 54N.

Indoor spaces will be procedurally generated unless the following parameter is passed:

--disable_interiors True

Indoor spaces are created based on the building footprint per floor.

OpenStreetMap (OSM) import#

The OSM import script can be accessed directly at

cd /src/aodt_gis/aodt_py/aodt_ui_gis/
python3 gis_jobs/osm_job.py

and it has the following parameters:

Parameter

Required

Description

--output_stage

Yes

This argument specifies the URL where the USD scene needs to be saved.

-coords

Yes

This argument specifies the bounding box of the area of interest in decimal degrees and in the following order <minLon> <minLat> <maxLon> <maxLat>. The bounding box can be at most 100 sq km.

--disable_interiors

No

Specifies whether or not procedurally-generated indoor spaces are to be created.

For example, to import a map of the area around the University of Texas - Austin, we would run the following command:

python3 gis_jobs/osm_job.py -o /src/aodt_gis/data/ut_austin.usd -c -97.74384 30.27690 -97.72444 30.29416

Legacy CLI#

To access the CLI tool from previous releases, you may use the following commands or refer to prior version documentation. Please note that maps generated with the legacy pipeline will not support the generation of procedural indoor spaces.

For GML import,

python3 gis_jobs/legacy_gml_job.py --in_gmls /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/dem/533936_dem_6697_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/dem/533935_dem_6697_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393599_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393690_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393589_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393680_bldg_6697_2_op.gml -o /src/aodt_gis/data/tokyo_small_legacy.usd -ei EPSG:6697 -eo EPSG:32654 -s 100

And for OSM,

python3 osm_job.py -c -97.74384 30.27690 -97.72444 30.29416 -o /src/aodt_gis/data/ut_austin_legacy.usd

Sample maps#

Map name

Source Data

Description

Textures

Indoor

nyc.usd

OSM

OSM import for the coordinates -74.01953 40.70016 -74.0037 40.72407

N

Y

kyoto.usd

PLATEAU

A section of Kyoto defined by the following tiles. Includes DEM and procedural interiors.
/src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/dem/523546_dem_6697_00_op.gml /src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354610_bldg_6697_op.gml /src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354611_bldg_6697_op.gml /src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354600_bldg_6697_op.gml /src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354601_bldg_6697_op.gml

N

Y

kyoto_flat.usd

PLATEAU

Same as kyoto.usd, but without the DEM files. Demonstrates that a flat plane will be placed if no DEM is present.

N

Y

kyoto_small.usd

PLATEAU

A smaller and lighter map of Kyoto defined by the tile
/src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354610_bldg_6697_op.gml

N

Y

kyoto_textured.usd

PLATEAU

Legacy Kyoto map covering the same region as ````kyoto.usd```. It does not contain procedural indoor spaces, but does include textures.

Y

N

minato_lod4.usd

PLATEAU

A portion of Tokyo with LOD4 features, defined by the tile
/src/aodt_gis/data/plateau-13103-minato-ku-2023/53393690_bldg_6697_op.gml.
Source files can be found here.

N

N

tokyo.usd

PLATEAU

A section of Tokyo defined by the following tiles. Includes DEM and procedural interiors.
/src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/dem/533936_dem_6697_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/dem/533935_dem_6697_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393599_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393690_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393589_bldg_6697_2_op.gml /src/aodt_gis/data/13100_tokyo23-ku_2022_citygml_1_2_op/udx/bldg/53393680_bldg_6697_2_op.gml

N

Y

tokyo_flat.usd

PLATEAU

Same as tokyo.usd, but without the DEM files. Demonstrates that a flat plane will be placed if no DEM is present.

N

Y

tokyo_small.usd

PLATEAU

This argument specifies the bounding box of the area of interest in decimal degrees and in the following order <minLon> <minLat> <maxLon> <maxLat>. The bounding box can be at most 100 sq km.

N

Y

tokyo_textured.usd

PLATEAU

Legacy Tokyo map covering the same region as tokyo.usd. It does not contain procedural indoor spaces, but does include textures.

Y

N

zurich_flat.usd

Stadt-Zuerich.ch

Zurich map defined by the tile
/src/aodt_gis/data/zurich/Zurich_LoD2_CityGML/ganze_Stadt.gml

N

N

berlin.usd

Berlin Open Data

This map was derived from a photogrammetry model using Blender and Omniverse. It contains layers for simulation (clean and under the /World prim, as well as a visualization layer showcasing the photogrammetry. This demonstrates how a map may be prepared outside of the AODT pipeline.)

Y

N