你当前正在访问 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 示例中,需要将 {Your-Azure-Maps-Subscription-key} 替换为你的 Azure Maps 订阅密钥。

使用 GeoJSON 包创建数据集

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

上传 GeoJSON 包

按照如何创建数据注册表一文中概述的步骤将 GeoJSON 包上传到 Azure 存储帐户,然后将其注册到 Azure Maps 帐户中。

重要

请务必记下唯一标识符 (udid) 值,你将需要它。 udid 是引用从源代码和 HTTP 请求上传到 Azure 存储帐户的 GeoJSON 包的方式。

创建数据集

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

重要

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

创建数据集:

  1. 输入数据集服务的以下 URL。 该请求应类似于以下 URL(请将 {udid} 替换为在上传 GeoJSON 包部分中获得的 udid):
https://us.atlas.microsoft.com/datasets?api-version=2023-03-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=2023-03-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=2023-03-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=2023-03-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 验证

Facility Ontology 2.0 定义了 Azure Maps Creator 如何在内部将设施数据(按特征类划分)存储到 Creator 数据集。 导入 GeoJSON 包时,每当添加或修改特征时都将运行一系列验证。 这包括引用完整性检查以及几何和属性验证。 这些验证将在以下列表中详述。

  • 一次可导入到一个数据集的特征的最大数目为 150000。
  • 设施面积可以在 4 到 4000 平方公里之间。
  • 顶级元素是 facility,它定义文件 facility.geojson 中的每个建筑物。
  • 每个 facility 都有一个或多个 level,这些 level 在文件 levels.goejson 中定义。
    • 每个 level 都必须在 facility 内。
  • 每个 level 都包含 unitstructureverticalPenetrationopening。 在该级别中定义的所有项必须完全包含在级别几何图形中。
    • 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 相关联。

后续步骤