场景导入器#

Aerial Omniverse 数字孪生构建于 NVIDIA Omniverse 之上。因此,它要求场景几何体采用 OpenUSD 格式。然而,地理空间信息通常以其他格式提供和分发。为了弥合这一差距,Aerial Omniverse 数字孪生提供了一条管道,用于从 CityGML 格式以及 OpenStreetMap OSM 导入地理空间数据。

通过 AODT UI 导入#

运行 GIS 处理工具的一种方法是通过 AODT UI。要为此用例设置您的容器,GIS 容器必须在容器位置 /src/aodt_gis/data 挂载一个数据文件夹。通道监听器脚本也必须正在运行。

容器设置#

首先,我们需要使用 $oauthtoken 用户名和 NGC API 密钥登录到 nvcr.io 容器注册表

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

有关 NGC_CLI_API_KEY 的更多信息,请访问 NGC - 用户指南

接下来,我们运行容器并挂载 <local data>,这是存储源数据的本地文件夹

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

现在我们位于容器内部,我们使用以下命令启动通道监听器

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

此处列出的广播通道将与 UI GIS 选项卡中使用的通道相同。容器现在已准备好连接到 UI。

AODT UI 设置#

连接到 GIS 工作进程#

在主机上设置好 GIS 容器后,您现在可以从 UI 附加一个工作进程。工作进程允许 UI 在主机中触发 GIS 作业,并允许 GIS 容器将进度和数据传回 UI。附加工作进程在 GIS 通道 配置 部分中进行。

gis_channel_configuration

服务器 路径 是 Omniverse Nucleus 服务器的 URL。广播 通道 名称 是将在 UI 和 GIS 工作进程之间创建的私有通道的名称。一旦建立,UI 和 GIS 工作进程将在此通道上独占通信。服务器路径和广播通道名称应与在 GIS 容器中启动通道监听器时使用的路径和名称相同。

注意:广播通道名称必须与 EM 工作进程广播通道名称不同。否则将不允许连接。这是为了避免在同时附加 EM 工作进程和 GIS 工作进程时发生干扰。

设置完成后,单击 附加  工作进程 以附加到可用的 GIS 工作进程。

成功验证服务器并成功附加工作进程后,应出现确认窗口

attach_worker_success_window

如果没有可用的工作进程,则无法建立连接,或者服务器无效,将出现错误窗口。在这种情况下,请检查服务器连接、有效性以及通道监听器是否在 GIS 容器上运行。

从 UI 启动 GIS 处理#

附加工作进程后,我们能够触发 GML 或 OSM 作业。下方的进度条将传达每个作业的状态和进度。一次只能运行一个作业。UI 或 GIS 容器生成的任何日志都将在 UI 的 控制台 选项卡中,并启用 信息 过滤器。以下是有关如何启动每种作业类型的处理的更多详细信息。

OpenStreetMap (OSM)#

有关通过图形界面提供的参数的说明,请参阅本文档的后续章节。

假设已附加工作进程,一旦设置好参数,我们就可以单击 开始 OSM 处理 按钮。下方的进度条将反映来自 GIS 容器的进度以及状态日志。

gis_tab_osm_progress

当作业成功完成时,状态将显示 已成功完成,并且 USD 文件将位于 输出 阶段 字段中指定的路径中。控制台将包含有关附加工作进程生成的作业的附加信息。如果作业失败,状态将显示 失败 (检查 控制台 以获取更多信息)。控制台将包含有关作业失败原因的更多信息。

CityGML#

有关通过图形界面提供的参数的说明,请参阅本文档的前一节。

假设已附加工作进程,一旦设置好参数,我们就可以单击 开始 GML 处理 按钮以生成我们要分析的场景。下方的进度条将反映 GIS 容器生成场景的进度以及状态日志。

gis_tab_gml_progress

当作业成功完成时,状态将显示 已成功完成,并且 USD 文件将位于 输出 阶段 字段中指定的路径中。如果作业失败,状态将显示 失败 (检查 控制台 以获取更多信息),并且控制台将包含更多信息。

通过命令行界面 (CLI) 导入#

我们也可以直接使用 CLI 使用 CityGML 和 OSM 导入工具。为此,与其他设置步骤一样,我们通过运行以下命令启动容器

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

其中 <local_data> 是包含 GIS 数据的文件夹。

CityGML 导入#

GML 导入脚本可以直接在以下位置访问

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

它具有以下参数

参数

必需

描述

-i

此参数指定源数据的 URL。

--o

此参数指定需要保存 USD 场景的 URL。

--epsg_in
--epsg_out

如果设置,管道将执行输入和输出坐标参考系统之间的转换,如其 EPSG 代码所定义。目前,仅支持从地理坐标系(角度单位)到投影坐标系(线性单位)的转换。例如,从 EPSG:6697 到 EPSG:32654 的转换将表示为 --epsg_in 6697 --epsg_out 32654

--disable_interiors

指定是否创建程序生成的室内空间。

--rough

在移动网格中创建更粗糙的切割,即不如足迹几何体那么紧密。可用于特别复杂或大型的场景。

例如,假设我们要从 PLATEAU 导入一部分东京。

首先,运行脚本将东京 CityGML 包下载到我们的数据文件夹。请注意,这可能需要一些时间。

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

接下来,我们可以运行命令

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

参数

-ei 6697 -eo 32654

表示我们正在从源坐标参考系统 (EPSG 6697) 投影到 UTM(通用横轴墨卡托)54N 区。

除非传递以下参数,否则将程序生成室内空间

--disable_interiors True

室内空间是根据每层的建筑物足迹创建的。

OpenStreetMap (OSM) 导入#

OSM 导入脚本可以直接在以下位置访问

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

它具有以下参数

参数

必需

描述

--output_stage

此参数指定需要保存 USD 场景的 URL。

-coords

此参数以十进制度数指定感兴趣区域的边界框,顺序如下:<minLon> <minLat> <maxLon> <maxLat>。边界框最大可为 100 平方公里。

--disable_interiors

指定是否创建程序生成的室内空间。

例如,要导入德克萨斯大学奥斯汀分校周围区域的地图,我们将运行以下命令

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

旧版 CLI#

要从以前的版本访问 CLI 工具,您可以使用以下命令或参考以前版本的文档。请注意,使用旧版管道生成的地图将不支持程序室内空间的生成。

对于 GML 导入,

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

对于 OSM,

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

示例地图#

地图名称

源数据

描述

纹理

室内

nyc.usd

OSM

OSM 导入坐标 -74.01953 40.70016 -74.0037 40.72407

kyoto.usd

PLATEAU

京都一部分,由以下图块定义。包括 DEM 和程序生成的室内空间。
/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

kyoto_flat.usd

PLATEAU

与 kyoto.usd 相同,但不包含 DEM 文件。演示如果没有 DEM,将放置一个平面。

kyoto_small.usd

PLATEAU

京都的较小且较轻的地图,由图块定义
/src/aodt_gis/data/26100_kyoto-shi_2022_citygml_1_op/udx/bldg/52354610_bldg_6697_op.gml

kyoto_textured.usd

PLATEAU

与 ````kyoto.usd``` 覆盖相同区域的旧版京都地图。它不包含程序生成的室内空间,但包含纹理。

minato_lod4.usd

PLATEAU

东京一部分,具有 LOD4 特征,由图块定义
/src/aodt_gis/data/plateau-13103-minato-ku-2023/53393690_bldg_6697_op.gml.
源文件可以在此处找到。

tokyo.usd

PLATEAU

东京一部分,由以下图块定义。包括 DEM 和程序生成的室内空间。
/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

tokyo_flat.usd

PLATEAU

与 tokyo.usd 相同,但不包含 DEM 文件。演示如果没有 DEM,将放置一个平面。

tokyo_small.usd

PLATEAU

此参数以十进制度数指定感兴趣区域的边界框,顺序如下:<minLon> <minLat> <maxLon> <maxLat>。边界框最大可为 100 平方公里。

tokyo_textured.usd

PLATEAU

tokyo.usd 覆盖相同区域的旧版东京地图。它不包含程序生成的室内空间,但包含纹理。

zurich_flat.usd

Stadt-Zuerich.ch

苏黎世地图,由图块定义
/src/aodt_gis/data/zurich/Zurich_LoD2_CityGML/ganze_Stadt.gml

berlin.usd

柏林开放数据

此地图是从使用 Blender 和 Omniverse 的摄影测量模型导出的。它包含用于模拟的图层(在 /World 基元下是干净的),以及展示摄影测量的可视化图层。(这演示了如何在 AODT 管道之外准备地图。)