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

用于室内定位的 Creator

本文介绍适用于 Azure Maps Creator 的概念和工具。 建议你在开始使用 Azure Maps Creator API 和 SDK 之前阅读本文。

你可以使用 Creator 来开发应用程序并使其包含基于室内地图数据的地图功能。 本文介绍上传、转换、创建和使用定位数据的过程。 通常,该工作流由专业知识和职责范围均不同的两个不同角色来完成:

  • 地图制作者:负责策展和准备地图数据。
  • Creator 地图数据用户:在应用程序中使用客户地图数据。

下图展示了整个工作流。

Creator map data workflow

创建 Azure Maps Creator

若要使用 Creator 服务,必须使用 Gen 2 定价层创建 Azure Maps Creator 资源并关联到 Azure Maps 帐户。 有关如何在 Azure 中创建 Azure Maps Creator 资源的信息,请参阅管理 Azure Maps Creator

提示

有关定价信息,请参阅 Azure Maps 定价中的“Creator”部分。

Creator 身份验证

Creator 继承 Azure Maps 访问控制 (IAM) 设置。 必须使用身份验证和授权规则发送数据访问的所有 API 调用。

Creator 使用情况数据合并到 Azure Maps 使用情况图表和活动日志中。 有关详细信息,请参阅在 Azure Maps 中管理身份验证

重要

建议使用:

  • 使用 Creator 服务通过 Azure Maps 帐户生成的所有解决方案中的 Microsoft Entra ID。 有关 Microsoft Entra ID 的详细信息,请参阅 Microsoft Entra 身份验证

  • 基于角色的访问控制设置。 使用这些设置,地图创建者可以充当 Azure Maps 数据参与者角色,而 Creator 地图数据用户可以充当 Azure Maps 数据读取者角色。 有关详细信息,请参阅使用基于角色的访问控制进行身份验证

Creator 数据项类型

Creator 服务创建、存储并使用以下各部分定义和讨论的各种数据类型。 Creator 数据项可以属于以下类型:

  • 转换的数据
  • 数据集
  • 图块集
  • 样式
  • 地图配置
  • 功能状态集
  • 路线集

上传绘图包

Creator 通过转换上传的绘图包收集室内地图数据。 此绘图包表示构造或已重构的设施。 有关绘图包要求的信息,请参阅绘图包要求

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

重要

请务必记下唯一标识符 (udid) 值,你将需要它。 系统需要使用 udid 将上传的包转换为室内地图数据。

转换绘图包

转换服务可以将上传的绘图包转换为室内地图数据。 转换服务还将验证包。 验证问题分为两类:

  • 错误:如果检测到任何错误,则转换过程会失败。 当发生错误时,转换服务会提供指向 Azure Maps 绘图错误可视化工具独立 Web 应用程序的链接。 可以使用“绘图错误可视化工具”来检查在转换过程中出现的绘图包警告和错误。 修复错误后,你可以尝试上传和转换包。
  • 警告:如果检测到警告,转换仍会成功, 但我们建议你查看并解决所有警告。 警告表示转换的一部分被忽略或自动修复。 如果不解决警告,可能会导致后续进程出错。 有关详细信息,请参阅绘图包警告和错误

创建室内定位数据

Azure Maps Creator 提供支持地图创建操作的以下服务:

  • 数据集服务
  • 图块集服务。 使用图块集服务可以创建数据集的基于向量的表示形式。 应用程序可以使用图块集来呈现基于视觉对象图块的数据集视图。
  • 自定义样式服务。 使用样式服务或视觉样式编辑器来自定义室内地图的视觉元素。
  • 功能状态服务。 使用功能状态服务来支持动态地图样式。 应用程序可以使用动态地图样式来反映 IoT 系统提供的空间中的实时事件。
  • 寻路服务。 使用寻路 API 在场所内的两个点之间生成路径。 使用路线集 API 创建寻路服务生成路径所需的数据。

数据集

数据集是室内定位功能的集合。 室内地图功能表示在转换的绘图包中定义的设施。 使用数据集服务创建数据集后,可以创建任意数量的图块集功能状态集

开发人员随时可以使用数据集服务在现有数据集中添加或删除设施。 若要详细了解如何使用 API 更新现有数据集,请参阅数据集服务中的追加选项。 有关如何更新数据集的示例,请参阅数据维护

图块集

图块集是表示一组统一网格图块的矢量数据的集合。 开发人员可以使用图块集服务从数据集创建图块集。

若要反映不同的内容阶段,可以从同一数据集创建多个图块集。 例如,你可以创建一个带有家具和设备的图块集,再创建一个不带家具和设备的图块集。 可以选择生成一个包含最新数据更新的图块集,再生成一个不包含最新数据更新的图块集。

除了矢量数据以外,图块集还提供用于定位呈现优化的元数据。 例如,图块集元数据包含图块集的最小和最大缩放级别。 该元数据还提供了定义图块集地理范围的边界框。 使用边界框,应用程序可通过编程方式设置正确的中心点。 有关图块集元数据的详细信息,请参阅图块集列表

创建图块集后,可使用呈现服务进行检索。

如果图块集已过时且不再有用,可以删除图块集。 若要了解如何删除图块集,请参阅数据维护

注意

图块集独立于它从中创建的数据集。 如果从数据集创建图块集,然后更新该数据集,则图块集不会进行更新。

若要反映数据集中的更改,必须创建新的图块集。 同样,如果删除图块集,则数据集不受影响。

自定义样式(预览版)

样式定义地图的视觉外观。 它定义要绘制的数据、绘制的顺序以及绘制数据时如何设置数据样式。 Azure Maps Creator 样式支持样式层子画面的 MapLibre 标准。

将绘图包上传到 Azure Maps 帐户后,进行转换时,会将默认样式应用于地图的元素。 通过自定义样式服务,可以自定义地图的视觉外观。 可以通过手动编辑样式 JSON 并使用样式 - 创建 HTTP 请求将其导入 Azure Maps 帐户来执行此操作,但建议使用视觉样式编辑器。 有关详细信息,请参阅为室内地图创建自定义样式

Style.json 文件中的示例层:

{
	"id": "indoor_unit_gym_label",
	"type": "symbol",
	"filter": ["all", ["has","floor0"], ["any", ["==", "categoryName", "room.gym"]]],
	"layout": {
		"visibility": "none",
		"icon-image": "gym",
		"icon-size": {"stops": [[17.5, 0.7], [21, 1.1]]},
		"symbol-avoid-edges": true,
		"symbol-placement": "point",
		"text-anchor": "top",
		"text-field": "{name}",
		"text-font": ["SegoeFrutigerHelveticaMYingHei-Medium"],
		"text-keep-upright": true,
		"text-letter-spacing": 0.1,
		"text-offset": [0, 1.05],
		"text-size": {"stops": [[18, 5], [18.5, 6.5], [19, 8], [19.5, 9.5], [20, 11]]}
	},
	"metadata": {"microsoft.maps:layerGroup": "labels_indoor"},
	"minzoom": 17.5,
	"paint": {
		"text-color": "rgba(0, 0, 0, 1)",
		"text-halo-blur": 0.5,
		"text-halo-color": "rgba(255, 255, 255, 1)",
		"text-halo-width": 1,
		"text-opacity": ["step", ["zoom"], 0, 18, 1]
	},
	"source-layer": "Indoor unit"
},
层属性 说明
id 层的名称
type 该层的呈现类型。
一些更常见的类型包括:
填充:经过填充的多边形,具有描边的可选边框。
线条:经过描边的线条。
符号:图标或文本标签。
填充挤压:挤压过的 (3D) 多边形。
filter 仅显示符合筛选器条件的功能。
布局 层的布局属性。
minzoom 一个介于 0 到 24 之间的数字,表示层的最小缩放级别。 缩放级别小于 minzoom 时,层将被隐藏。
画图 此层的默认绘制属性。
source-layer 源通过矢量图块源提供显示在地图上的数据。 对于矢量图块源是必需的;禁止用于所有其他源类型,包括 GeoJSON 源。

地图配置

地图配置是一组配置。 每个配置由一个基图和一个或多个层组成,每个层由一个样式 + 图块集元组组成。

在 Azure Maps 中开发应用程序时,在实例化地图对象的室内管理器时会用到地图配置。 通过使用 mapConfigurationIdalias 来引用该配置。 地图配置是不可变的。 对现有地图配置进行更改时,将创建新的地图配置,从而产生不同的 mapConfingurationId。 每当使用现有地图配置已使用的别名创建地图配置时,它都会指向新的地图配置。

以下 JSON 是默认映射配置的示例。 有关文件中每个元素的描述,请参阅下表:

{
    "version": 1.0,
    "description": "This is the default Azure Maps map configuration for facility ontology tilesets.",
    "defaultConfiguration": "indoor_light",
    "configurations": [
        {
            "name": "indoor_light",
            "displayName": "Indoor light",
            "description": "A base style for Azure Maps.",
            "thumbnail": "indoor_2022-01-01.png",
            "baseMap": "microsoft_light",
            "layers": [
                {
                    "tilesetId": "fa37d225-924e-3f32-8441-6128d9e5519a",
                    "styleId": "microsoft-maps:indoor_2022-01-01"
                }
            ]
        },
        {
            "name": "indoor_dark",
            "displayName": "Indoor dark",
            "description": "A base style for Azure Maps.",
            "thumbnail": "indoor_dark_2022-01-01.png",
            "baseMap": "microsoft_dark",
            "layers": [
                {
                    "tilesetId": "fa37d225-924e-3f32-8441-6128d9e5519a",
                    "styleId": "microsoft-maps:indoor_dark_2022-01-01"
                }
            ]
        }
    ]
}
样式对象属性 说明
名称 样式的名称。
displayName 样式的显示名称。
description 用户定义的样式描述。
thumbnail 用于指定样式选取器中使用的用于此样式的缩略图。 有关详细信息,请参阅样式选取器控件
baseMap 用于设置基本地图样式。
层数组由一个或多个“图块集 + 样式”元组组成,每个元组都是地图的一个层。 这支持在地图上显示多个建筑,每个建筑都以自己的图块集表示。

其他信息

功能状态集

功能状态集是分配给数据集功能(例如房间或设备)的动态属性(状态)的集合。 例如,状态可以是温度,也可以是占用情况。 每个状态均为一个键/值对,其中包含属性名称、值和上次更新的时间戳。

可以使用功能状态服务创建和管理数据集的功能状态集。 状态集是由一个或多个状态定义的。 每个功能(如房间)都可以附加一个状态。

状态集中每个状态的值都可以由 IoT 设备或其他应用程序更新或检索。 例如,使用功能状态更新 API,测量空间占用量的设备可以系统地发布房间状态的变化。

应用程序可以使用功能状态集,根据其当前状态和相应的定位样式,在设施中动态呈现功能。 若要详细了解如何使用功能状态集为渲染图中的功能设置样式,请参阅 Indoor Maps 模块

注意

与图块集一样,更改数据集不会影响现有功能状态集,删除功能状态集也不会影响它附加到的数据集。

寻路(预览版)

通过寻路服务,你可以为客户提供场所内两个点之间的最短路径。 导入室内地图数据并创建数据集后,即可使用它来创建路线集。 路线集提供在两个点之间生成路径所需的数据。 寻路服务考虑了开口最小宽度之类的因素,因此,在两层之间导航时,可以选择排除电梯或楼梯。

Creator 寻路由 Havok 提供支持。

寻路路径

成功生成寻路路径时,它会查找指定场所中两个点之间的最短路径。 行程中的每个楼层都表示为单独的段,用于在楼层之间移动的任何楼梯或电梯也是如此。

例如,路径的第一段可能是从起点到该楼层的电梯。 下一段将是电梯,最后一段将是从电梯到目的地的路径。 估计的行程时间也会在 HTTP 响应 JSON 中计算和返回。

结构

若要正常使用寻路,场所数据必须包含结构。 寻路服务计算场所中两个选定点之间的最短路径。 该服务通过围绕结构(如墙壁和任何其他不透水结构)导航来创建路径。

垂直穿透

如果所选出发地和目的地位于不同的楼层,则寻路服务确定哪些垂直穿透对象(如楼梯或电梯)可用作在各楼层之间垂直导航的可能路径。 默认情况下,将使用生成最短路径的选项。

寻路服务基于垂直穿透的 direction 属性的值来包括路径中的楼梯或电梯。 有关 direction 属性的详细信息,请参阅《场所本体》一文中的 verticalPenetration。 请参阅寻路 API 文档中的 avoidFeaturesminWidth 属性,了解可能影响楼层之间的路径选择的其他因素。

有关详细信息,请参阅室内地图寻路服务操作指南文章。

使用室内定位

Render - 获取地图图块 API

Azure 地图 [Render - Get Map Tile] API 已扩展为支持 Creator 图块集。

应用程序可以使用“Render - 获取地图图块 API”来请求图块集。 然后,可以将图块集集成到定位控件或 SDK。 有关使用 Render 服务的定位控件的示例,请参阅室内定位模块

Web 要素服务 API

可以使用 Web 要素服务 (WFS) 来查询数据集。 WFS 遵循开放地理空间信息联盟 API 功能。 使用 WFS API,你可以查询数据集自带的功能。 例如,可以使用 WFS 查找特定设施和楼层的所有中型会议室。

别名 API

Creator 服务,例如转换、数据集、图块集和功能状态,返回从 API 创建的每个资源的标识符。 别名 API 允许分配别名来引用资源标识符。

室内定位模块

Azure Maps Web SDK 包括室内定位模块。 此模块为 Azure Maps 定位控件库提供扩展功能。 室内定位模块呈现在 Creator 中创建的室内定位。 它集成了可以帮助用户可视化不同楼层的小组件(例如楼层选取器)。

可以使用 Indoor Maps 模块创建将室内地图数据与其他 Azure Maps 服务集成的 Web 应用程序。 最常见的应用程序设置包括将知识从其他地图(例如道路、图像、天气和运输)添加到室内地图。

室内定位模块还支持动态定位样式。 有关在应用程序中实现功能状态集动态样式的分步演练,请参阅使用室内地图模块

Azure Maps 集成

开始开发面向室内定位的解决方案时,可以找到集成现有 Azure Maps 功能的方法。 例如,可以通过 Creator 室内地图使用地理围栏服务来实现资产跟踪或安全方案。 例如,可以使用地理围栏 API 来确定工作人员是进入了还是离开了特定的室内区域。 若要详细了解如何将 Azure Maps 连接到 IoT 遥测,请参阅教程:使用 Azure Maps 实现 IoT 空间分析

数据维护

可以使用 Azure Maps Creator 的列出、更新和删除 API 来列出、更新和删除数据集、图块集和功能状态集。

注意

每次查看项列表以确定是否删除它们时,必须考虑该删除对所有从属 API 或应用程序的影响。 例如,如果通过 [呈现 - 获取地图磁贴] API 删除应用程序正在使用的图块集,应用程序将无法呈现该图块集。

示例:更新数据集

下面的示例演示了如何更新数据集、创建新的图块集以及删除旧的图块集:

  1. 按照上传绘图包转换绘图包部分中的步骤,上传并转换新的绘图包。
  2. 使用数据集创建将转换后的数据追加到现有数据集。
  3. 使用图块集创建从更新的数据集生成新的图块集。
  4. 保存新的 tilesetId 供下一步使用。
  5. 若要启用更新的校园数据集的可视化效果,请更新应用程序中的图块集标识符。 如果不再使用旧的图块集,可将其删除。

后续步骤