你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 GeoJson 包创建数据集(预览版)

借助 Azure Maps Creator,用户可以使用设施本体 2.0 以 GeoJSON 格式导入其室内地图数据,然后该数据便可用于创建数据集

注意

本文介绍如何从 GeoJSON 包创建数据集。 若要了解完成室内地图所需的其他步骤,请参阅后续步骤

先决条件

重要

  • 本文使用 us.atlas.microsoft.com 地理 URL。 如果 Creator 服务不是在美国创建的,则必须使用不同的地理 URL。 有关详细信息,请参阅访问 Creator 服务
  • 在本文的 URL 示例中,需要将 {Azure-Maps-Primary-Subscription-key} 替换为你的主订阅密钥。

使用 GeoJSON 包创建数据集

有关 GeoJSON 包的详细信息,请参阅 Geojson zip 包要求部分。

上传 GeoJSON 包

使用数据上传 API 将绘图包上传到 Azure Maps Creator 帐户。

数据上传 API 是一项长期事务,用于实现 Creator 长时间运行的操作 API V2 中定义的模式。

若要上传 GeoJSON 包,请执行以下操作:

  1. 执行以下使用数据上传 API 的 HTTP POST 请求:

    https://us.atlas.microsoft.com/mapData?api-version=2.0&dataFormat=zip&subscription-key={Your-Azure-Maps-Subscription-key}
    
    1. 将标头中的 Content-Type 设置为 application/zip
  2. 复制响应标头中 Operation-Location 键的值。 Operation-Location 键也称为 status URL,是检查上传状态所必需的,将在下一部分中进行介绍。

检查 GeoJSON 包上传状态

若要检查 GeoJSON 包的状态并检索其唯一标识符 (udid),请执行以下操作:

  1. 执行以下 HTTP GET 请求,该请求使用你在本文上一部分的最后一步中复制的状态 URL。 请求应如下面的 URL 所示:
https://us.atlas.microsoft.com/mapData/operations/{operationId}?api-version=2.0&subscription-key={Your-Azure-Maps-Subscription-key}
  1. 复制响应标头中 Resource-Location 键的值,即 resource location URLresource location URL 包含 GeoJSON 包资源的唯一标识符 (udid)。

创建数据集

数据集是地图特征(如建筑物、楼层和房间等)的集合。 若要基于你的 GeoJSON 创建数据集,请使用新的“数据集创建”API。 “数据集创建”API 获取你在上一部分获得的 udid 并返回新数据集的 datasetId

重要

这与先前版本的不同之处在于它不需要转换后的绘图包的 conversionId

创建数据集:

  1. 输入数据集服务的以下 URL。 该请求应类似于以下 URL(请将 {udid} 替换为在检查 GeoJSON 包上传状态部分中获得的 udid):
https://us.atlas.microsoft.com/datasets?api-version=2022-09-01-preview&udid={udid}&subscription-key={Your-Azure-Maps-Subscription-key}
  1. 复制响应标头中 Operation-Location 键的值。 Operation-Location 键也称为 status URL,是检查数据集创建过程的状态和获取 datasetId 所必需的,而 datasetId 是创建图块集所必需的。

检查数据集创建状态

检查数据集创建过程的状态并检索 datasetId

  1. 输入在创建数据集中复制的状态 URL。 请求应如下面的 URL 所示:

    https://us.atlas.microsoft.com/datasets/operations/{operationId}?api-version=2022-09-01-preview&subscription-key={Your-Azure-Maps-Subscription-key}
    
  2. 在 HTTP 响应的标头中,复制 Resource-Location 键中包含的唯一标识符的值。

    https://us.atlas.microsoft.com/datasets/**c9c15957-646c-13f2-611a-1ea7adc75174**?api-version=2022-09-01-preview

请参阅后续步骤以获取可帮助你完成室内地图的文章链接。

将数据添加到现有数据集

可以通过向数据集创建 API 提供 datasetId 参数以及要添加的数据的唯一标识符,将数据添加到现有数据集。 唯一标识符可以是 udidconversionId。 这将创建一个新数据集,其中包含来自现有数据集和要导入的新数据的数据(设施)。 成功创建新数据集后,可以删除旧数据集。

添加到现有数据集时要考虑的一件事是特征 ID 是如何创建的。 如果数据集是从转换后的绘图包创建的,则特征 ID 是自动生成的。 从 GeoJSON 包创建数据集时,必须在 GeoJSON 文件中提供特征 ID。 追加到现有数据集时,原始数据集会采用特征 ID 的创建方式。 如果原始数据集是使用 udid 创建的,它将使用 GeoJSON 中的 ID,并且会继续对将来追加到该数据集的所有 GeoJSON 包都这样做。 如果数据集是使用 conversionId 创建的,则 ID 将在内部生成,并且对于将来追加到该数据集所有 GeoJSON 包,ID 都将继续在内部生成。

添加到从 GeoJSON 源创建的数据集

如果原始数据集是从 GoeJSON 源创建的,并且你想要添加从绘图包创建的另一个设施,可以通过引用其 conversionId 将它追加到现有数据集,如以下 HTTP POST 请求所示:

https://us.atlas.microsoft.com/datasets?api-version=2022-09-01-preview&conversionId={conversionId}&outputOntology=facility-2.0&datasetId={datasetId}
标识符 说明
conversionId 转换绘图包时返回的 ID。 有关详细信息,请参阅转换绘图包
datasetId 从 GeoJSON 包创建原始数据集时返回的数据集 ID。

Geojson zip 包要求

GeoJSON zip 包包含一个或多个符合 RFC 7946 的 GeoJSON 文件,每个特征类一个文件,全部位于根目录(不支持子目录),使用标准 Zip 压缩并使用 .ZIP 扩展名命名。

每个特征类文件都必须与其在设施本体 2.0 中的定义相匹配,并且每个特征都必须具有全局唯一标识符。

特征 ID 只能包含字母数字(a-z、A-Z、0-9)、连字符 (-)、点 (.) 和下划线 (_) 字符。

提示

如果希望肯定自己拥有全局唯一标识符 (GUID),请考虑通过运行 GUID 生成工具来创建它,例如 Guidgen.exe 命令行程序(已随 Visual Studio 提供)。 Guidgen.exe 永远不会生成相同的数字两次,无论它运行了多少次或在多少台不同的机器上运行。

数据集内的设施本体 2.0 验证

设施本体定义了 Azure Maps Creator 如何在内部将设施数据(按特征类划分)存储到 Creator 数据集。 导入 GeoJSON 包时,每当添加或修改特征时都将运行一系列验证。 这包括引用完整性检查以及几何图形和属性验证。 这些验证在下面进行了更详细的介绍。

  • 一次可导入到一个数据集的特征的最大数目为 150000。
  • 设施面积可以在 4 到 4000 平方公里之间。
  • 顶级元素是 facility,它定义文件 facility.geojson 中的每个建筑物。
  • 每个 facility 都有一个或多个 level,这些 level 在文件 levels.goejson 中定义。
    • 每个 level 都必须在 facility 内。
  • 每个 level 都包含 unitstructureverticalPenetrationopening。 level 中定义的所有项都必须完全包含在 Level 几何图形中。
    • unit 可以包含一系列的项(例如走廊、办公室和庭院),这些项由 arealinepoint 元素定义。 unit 在文件 unit.goejson 中定义。
      • 所有 unit 元素都必须完全包含在其 level 内,并与其子元素相交。
    • structure 定义无法穿越的物理非重叠区域,例如墙。 structure 在文件 structure.goejson 中定义。
    • verticalPenetration 表示在楼梯和电梯等 level 之间垂直行进的方法,在文件 verticalPenetration.geojson 中定义。
      • verticalPenetration 不能与同一 level 上的其他 verticalPenetration 相交。
    • openings 定义两个 unit 之间或 unitverticalPenetration 之间可越过的边界,在文件 opening.geojson 中定义。
      • opening 不能与同一 level 上的其他 opening 相交。
      • 每个 opening 都必须至少与一个 verticalPenetrationunit 相关联。

后续步骤