

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS IoT Core 设备位置
<a name="device-location"></a>


|  | 
| --- |
| 在使用 AWS IoT Core 设备定位功能之前，请查看此功能的条款和条件。请注意， AWS 可能会将您的地理位置搜索请求参数（例如用于进行搜索的位置数据和其他信息）传输给您选择的第三方数据提供商，而第三方数据提供商可能不在 AWS 区域 您当前使用的数据提供商范围内。根据收到的输入有效载荷来选择要使用的第三方提供者和求解器。有关更多信息，请参阅 [AWS 服务条款](https://aws.amazon.com/service-terms)。 | 

使用 AWS IoT Core 设备位置使用第三方求解器测试物联网设备的位置。*求解器*是第三方供应商提供的算法，用于解析测量数据并估计设备的位置。通过确定设备的位置，您可以在现场跟踪和调试设备以解决任何问题。

将解析从各种来源收集的测量数据，并将地理位置信息报告为 [GeoJSON](https://geojson.org/) 有效载荷。GeoJSON 格式是一种用于对地理数据结构进行编码的格式。有效载荷包含您的设备位置的纬度和经度坐标，这些坐标基于[世界大地测量系统坐标系](https://gisgeography.com/wgs84-world-geodetic-system/) ()。WGS84

**Topics**
+ [测量类型和求解器](#location-measurement-types)
+ [AWS IoT Core 设备定位的工作原理](#location-how-works)
+ [如何使用 AWS IoT Core 设备定位](#location-how-use)
+ [解析物联网设备的位置](device-location-resolve-solvers.md)
+ [使用设备位置解析 AWS IoT Core 设备位置 MQTT 主题](device-location-reserved-topics.md)
+ [位置求解器和设备有效载荷](device-location-solvers-payload.md)

## 测量类型和求解器
<a name="location-measurement-types"></a>

AWS IoT Core 设备定位与第三方供应商合作，解析测量数据并提供估计的设备位置。下表显示了测量类型和第三方位置求解器，以及有关支持设备的信息。有关 LoRa WAN 设备以及为其配置设备位置的信息，请参阅[配置 LoRa WAN 资源的位置](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-configure-location.html)。

**注意**  
一般物联网设备和 Sidewalk 设备可以使用设备位置 MQTT 主题来获取位置信息。对于 Wi-Fi、蜂窝网络和 IP 地址测量类型，如果设备以定义的 GeoJSON 格式将测量数据发布到[保留的主题](device-location-reserved-topics.md)，则 AWS IoT Core 设备位置可以解析设备的位置。对于 GNSS 测量类型，设备必须具有用于扫描测量数据的 LR11xx 芯片，以便使用 GNSS 求解器获得已解析的位置信息。有关获取 LoRa WAN 设备位置信息的信息，请参阅*AWS IoT 无线文档*中的[配置 LoRa WAN 资源的位置](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-configure-location.html)。


**测量类型和求解器**  

| 测量类型 | 第三方求解器 | 支持的设备 | 
| --- | --- | --- | 
| Wi-Fi 接入点 | 基于 Wi-Fi 的求解器  | 通用物联网设备、 LoRa广域网和 Amazon Sidewalk 设备 | 
| 蜂窝无线电发射塔：GSM、LTE、CDMA、SCDMA、WCMDA 和 TD-SCDMA 数据 | 基于蜂窝的求解器  | 通用物联网设备、 LoRa广域网和 Amazon Sidewalk 设备 | 
| IP 地址 | IP 反向查找求解器 | 任何通过 TCP/IP 连接的物联网设备 | 
| GNSS 扫描数据（导航消息） | GNSS 求解器 | 通用物联网设备、 LoRa广域网和 Amazon Sidewalk 设备 | 
| 低功耗蓝牙 (BLE) | 基于 BLE 的求解器 | Amazon Sidewalk 设备 | 

有关位置求解器的更多信息，以及显示各种测量类型的设备有效载荷的示例，请参阅 [位置求解器和设备有效载荷](device-location-solvers-payload.md)。

## AWS IoT Core 设备定位的工作原理
<a name="location-how-works"></a>

下图显示了 AWS IoT Core 设备定位如何收集测量数据并解析设备的位置信息。

![\[该图显示了 AWS IoT Core 设备定位如何使用您的原始测量数据并解析设备位置。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/iot-device-location.png)


以下步骤显示了 AWS IoT Core 设备定位的工作原理。

1. 

**接收测量数据**

   首先从您的设备发送与设备位置相关的原始测量数据。测量数据被指定为 JSON 有效载荷。

1. 

**处理测量数据**

   对测量数据进行处理， AWS IoT Core 设备定位选择要使用的测量数据，这些数据可以是 Wi-Fi、蜂窝网络、GNSS 扫描或 IP 地址信息。

1. 

**选择求解器**

   根据测量数据选择第三方求解器。例如，如果测量数据中包含 Wi-Fi 和 IP 地址信息，则会选择 Wi-Fi 求解器和 IP 反向查找求解器。

1. 

**获取已解析的位置**

   API 请求会发送给求解器提供商，请求解析位置。 AWS IoT Core 然后，设备位置会从求解器那里获取估计的地理位置信息。

1. 

**选择已解析的位置**

   将对解析的位置信息及其准确性进行比较， AWS IoT Core 设备位置选择精度最高的地理定位结果。

1. 

**输出位置信息**

   将地理位置信息作为 GeoJSON 有效载荷发送给您。有效载荷包含 WGS84 地理坐标、精度信息、置信度以及获得解析位置的时间戳。

## 如何使用 AWS IoT Core 设备定位
<a name="location-how-use"></a>

以下步骤说明如何使用 AWS IoT Core 设备定位。

1. 

**提供测量数据**

   将与设备位置相关的原始测量数据指定为 JSON 有效载荷。要检索有效载荷测量数据，请转到您的设备日志，或者使用 CloudWatch 日志，然后复制有效载荷数据信息。JSON 有效载荷中必须包含一种或多种类型的数据测量。有关显示各种求解器有效载荷格式的示例，请参阅 [位置求解器和设备有效载荷](device-location-solvers-payload.md)。

1. 

**解析位置信息**

   使用 AWS IoT 控制台中的[设备位置](https://console.aws.amazon.com/iot/home#/device-location-test)页面或 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作，传递有效载荷测量数据并解析设备位置。 AWS IoT Core 然后，设备位置选择精度最高的求解器并报告设备位置。有关更多信息，请参阅 [解析物联网设备的位置](device-location-resolve-solvers.md)。

1. 

**复制位置信息**

   验证由 AWS IoT Core 设备位置解析并报告为 GeoJSON 有效负载的地理位置信息。您可以复制有效负载以用于您的应用程序和其他 AWS 服务应用程序。例如，您可以使用[位置](location-rule-action.md) AWS IoT 规则操作将您的地理位置数据发送到 Amazon Location Service。

以下主题介绍如何使用 AWS IoT Core 设备定位和设备位置负载示例。
+ [解析物联网设备的位置](device-location-resolve-solvers.md)
+ [位置求解器和设备有效载荷](device-location-solvers-payload.md)

# 解析物联网设备的位置
<a name="device-location-resolve-solvers"></a>

使用 AWS IoT Core Device Location 对来自设备的测量数据进行解码，并使用第三方求解器解析设备位置。解析后的位置以 GeoJSON 有效载荷的形式生成，其中包含地理坐标和准确性信息。您可以通过 AWS IoT 控制台、 AWS IoT 无线 API 或解析设备的位置 AWS CLI。

**Topics**
+ [解析设备位置（控制台）](#location-resolve-console)
+ [解析设备位置（API）](#location-resolve-api)
+ [对解析位置时出现的错误进行故障排除](#location-resolve-troubleshoot)

## 解析设备位置（控制台）
<a name="location-resolve-console"></a>

解析设备位置（控制台）

1. 转到 AWS IoT 控制台中的[设备位置](https://console.aws.amazon.com/iot/home#/device-location-test)页面。

1. 从设备日志或日志中获取有效载荷测量数据，并将其输入**通过有效载荷解析位置**部分。 CloudWatch 

   以下代码显示了 JSON 有效载荷示例。有效载荷包含蜂窝和 Wi-Fi 测量数据。如果您的有效载荷包含其他类型的测量数据，将使用准确性最高的求解器。有关更多信息以及有效载荷示例，请参阅 [位置求解器和设备有效载荷](device-location-solvers-payload.md)。
**注意**  
JSON 有效载荷中必须包含一种类型的数据测量。

   ```
   {
       "Timestamp": 1664313161,
       "Ip":{
           "IpAddress": "54.240.198.35"        
       },
       "WiFiAccessPoints": [{
           "MacAddress": "A0:EC:F9:1E:32:C1",
           "Rss": -77
       }],
       "CellTowers": {
           "Gsm": [{
               "Mcc": 262,
               "Mnc": 1,
               "Lac": 5126,
               "GeranCid": 16504,
               "GsmLocalId": {
                   "Bsic": 6,
                   "Bcch": 82
               },
               "GsmTimingAdvance": 1,
               "RxLevel": -110,
               "GsmNmr": [{
                   "Bsic": 7,
                   "Bcch": 85,
                   "RxLevel": -100,
                   "GlobalIdentity": {
                       "Lac": 1,
                       "GeranCid": 1
                   }
               }]
           }],
           "Wcdma": [{
               "Mcc": 262,
               "Mnc": 7,
               "Lac": 65535,
               "UtranCid": 14674663,
               "WcdmaNmr": [{
                       "Uarfcndl": 10786,
                       "UtranCid": 14674663,
                       "Psc": 149
                   },
                   {
                       "Uarfcndl": 10762,
                       "UtranCid": 14674663,
                       "Psc": 211
                   }
               ]
           }],
           "Lte": [{
               "Mcc": 262,
               "Mnc": 2,
               "EutranCid": 2898945,
               "Rsrp": -50,
               "Rsrq": -5,
               "LteNmr": [{
                       "Earfcn": 6300,
                       "Pci": 237,
                       "Rsrp": -60,
                       "Rsrq": -6,
                       "EutranCid": 2898945
                   },
                   {
                       "Earfcn": 6300,
                       "Pci": 442,
                       "Rsrp": -70,
                       "Rsrq": -7,
                       "EutranCid": 2898945
                   }
               ]
           }]
       }
   }
   ```

1. 要解析位置信息，请选择 **Resolve**（解析）。

   位置信息属于类型 blob 并作为使用 GeoJSON 格式的有效载荷返回，此格式用于对地理数据结构进行编码。有效载荷中包含：
   +  WGS84 地理坐标，包括纬度和经度信息。还可能包含海拔信息。
   + 报告的位置信息类型，例如 **Point**（点）。[点位置类型将位置表示为 WGS84 纬度和经度，编码为 GeoJSON 点。](https://geojson.org/geojson-spec.html#point)
   + 水平和垂直准确性信息，表示解析器估计的位置信息与实际设备位置之间的差异（单位为米）。
   + 置信水平，表示位置估计响应中的不确定性。默认值为 0.68，表示实际设备位置在估计位置的不确定性半径内的概率为 68%。
   + 设备所在的城市、省/直辖市/自治区、国家/地区和邮政编码。只有在使用 IP 反向查找解析器时，才会报告此信息。
   + 时间戳信息与解析该位置的日期和时间相对应。它使用 Unix 时间戳格式。

   以下代码显示了解析位置后返回的 GeoJSON 有效载荷示例。
**注意**  
如果 “ AWS IoT Core 设备位置” 在尝试解析位置时报告错误，则可以对错误进行故障排除并解决位置问题。有关更多信息，请参阅 [对解析位置时出现的错误进行故障排除](#location-resolve-troubleshoot)。

   ```
   {
       "coordinates": [
           13.376076698303223,
           52.51823043823242
       ],
       "type": "Point",
       "properties": {
           "verticalAccuracy": 45,
           "verticalConfidenceLevel": 0.68,
           "horizontalAccuracy": 303,
           "horizontalConfidenceLevel": 0.68,
           "country": "USA",
           "state": "CA",
           "city": "Sunnyvalue",
           "postalCode": "91234",
           "timestamp": "2022-11-18T12:23:58.189Z"
       }
   }
   ```

1. 前往**资源位置**部分并验证 AWS IoT Core 设备位置报告的地理位置信息。您可以复制有效负载以用于其他应用程序 AWS 服务和。例如，您可以使用 [位置](location-rule-action.md) 将地理位置数据发送到 Amazon Location Service。

## 解析设备位置（API）
<a name="location-resolve-api"></a>

要使用 AWS IoT 无线 API 解析设备位置，请使用 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作或 [get-position-estimate](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-position-estimate.html)CLI 命令。将有效载荷测量数据指定为输入，然后运行 API 操作以解析设备位置。

**注意**  
`GetPositionEstimate` API 操作不存储任何设备或状态信息，也不能用于检索历史位置数据。它执行一次性操作，解析测量数据并生成估计位置。要检索位置信息，每次执行此 API 操作时都必须指定有效载荷信息。

以下命令显示了如何使用此 API 操作解析位置的示例。

**注意**  
运行 `get-position-estimate` CLI 命令时，必须将输出 JSON 文件指定为第一个输入。此 JSON 文件将以 GeoJSON 格式存储作为响应从 CLI 获得的估计位置信息。例如，以下命令将位置信息存储在*locationout.json*文件中。

```
aws iotwireless get-position-estimate locationout.json \
    --ip IpAddress=""54.240.198.35"" \ 
    --wi-fi-access-points \ 
        MacAddress="A0:EC:F9:1E:32:C1",Rss=-75 \
        MacAddress="A0:EC:F9:15:72:5E",Rss=-67
```

此示例包括 Wi-Fi 接入点和 IP 地址作为测量类型。 AWS IoT Core 设备位置在 Wi-Fi 求解器和 IP 反向查找求解器之间进行选择，然后选择精度更高的求解器。

解析的位置作为使用 GeoJSON 格式的有效载荷返回，此格式用于对地理数据结构进行编码。然后将其存储在*locationout.json*文件中。有效载荷包含 WGS84纬度和经度坐标、精度和置信度信息、位置数据类型以及解析位置的时间戳。

```
{
    "coordinates": [
        13.37704086303711,
        52.51865005493164
    ],
    "type": "Point",
    "properties": {
        "verticalAccuracy": 707,
        "verticalConfidenceLevel": 0.68,
        "horizontalAccuracy": 389,
        "horizontalConfidenceLevel": 0.68,
        "country": "USA",
        "state": "CA",
        "city": "Sunnyvalue",
        "postalCode": "91234",
        "timestamp": "2022-11-18T14:03:57.391Z"
    }
}
```

## 对解析位置时出现的错误进行故障排除
<a name="location-resolve-troubleshoot"></a>

尝试解析位置时，可能会看到以下任何错误代码。 AWS IoT Core 使用 `GetPositionEstimate` API 操作时，设备位置可能会生成错误，或者引用 AWS IoT 控制台中与错误对应的行号。
+ 

**400 错误**  
此错误表示设备有效负载 JSON 的格式无法通过 AWS IoT Core 设备位置进行验证。出现此错误可能是因为：
  + JSON 测量数据的格式不正确。
  + 有效载荷中仅包含时间戳信息。
  + 诸如 IP 地址之类的测量数据参数无效。

  要解决此错误，请检查您的 JSON 格式是否正确，是否包含来自一种或多种测量类型的数据作为输入。如果 IP 地址无效，有关如何提供有效 IP 地址来解决此错误的信息，请参阅 [IP 反向查找求解器](device-location-solvers-payload.md#location-solvers-ip)。
+ 

**403 错误**  
此错误表示您无权执行 API 操作或使用 AWS IoT 控制台检索设备位置。要解决此错误，请验证您是否拥有执行此操作所需的权限。如果您的 AWS 管理控制台 会话或会 AWS CLI 话令牌已过期，则可能会出现此错误。要解决此错误，请刷新会话令牌以使用 AWS CLI，或者注销， AWS 管理控制台 然后使用您的凭据登录。
+ 

**404 错误**  
此错误表明 “ AWS IoT Core 设备位置” 未找到或解决任何位置信息。此错误可能是由于测量数据输入中数据不足等原因造成的。例如：
  + MAC 地址或蜂窝发射塔信息不足。
  + IP 地址不可用于查找和检索位置。
  + GNSS 有效载荷不足。

  要解决此类情况下出现的错误，请检查您的测量数据是否包含解析设备位置所需的足够信息。
+ 

**404 错误**  
此错误表明，当 AWS IoT Core 设备位置功能尝试解析位置时，出现了内部服务器异常。要尝试修复此错误，请刷新会话，并重试发送需要解析的测量数据。

# 使用设备位置解析 AWS IoT Core 设备位置 MQTT 主题
<a name="device-location-reserved-topics"></a>

您可以使用保留的 MQTT 主题通过设备定位功能获取设备的最新位置信息。 AWS IoT Core 

## 设备位置 MQTT 主题的格式
<a name="device-location-topics-format"></a>

 AWS IoT Core 设备定位的保留主题使用以下前缀：

`$aws/device_location/{customer_device_id}/`

要创建完整的主题，请先将 `customer_device_id` 替换为用于识别设备的唯一 ID。我们建议您指定`WirelessDeviceId`，例如为 LoRa WAN 和 Sidewalk 设备指定`thingName`，以及您的设备是否已注册为 AWS IoT 事物。然后在主题后面附加主题存根，如下一节所示的 `get_position_estimate` 或 `get_position_estimate/accepted`。

**注意**  
`{customer_device_id}` 仅可包含字母、数字和短划线。订阅设备位置主题时，只能使用加号（\$1）作为通配符。例如，您可以将 `+` 通配符用于 `{customer_device_id}` 来获取设备的位置信息。当您订阅主题 `$aws/device_location/+/get_position_estimate/accepted` 时，系统将发布一条消息，其中包含与任何设备 ID 匹配的设备的位置信息（如果成功解析）。

以下是用于与 AWS IoT Core 设备位置进行交互的保留主题。


**设备位置 MQTT 主题**  

| Topic | 允许的操作 | 说明 | 
| --- | --- | --- | 
|  \$1aw *customer\$1device\$1id* s/device\$1location/ /get\$1position\$1  | 发布 |  设备向本主题发布信息，以获取扫描的原始测量数据，以便通过 “ AWS IoT Core 设备位置” 进行解析。  | 
|  \$1aw *customer\$1device\$1id* s/device\$1location/ /get\$1position\$1estimat  | Subscribe |  AWS IoT Core 设备定位成功解析设备位置后，会向该主题发布位置信息。  | 
|  \$1aw *customer\$1device\$1id* s/device\$1location/ /get\$1position\$1estimat  | Subscribe |  AWS IoT Core 当设备位置无法解析设备位置时，它会将错误信息发布到此主题。  | 

## 设备位置 MQTT 主题的策略
<a name="device-location-topics-policy"></a>

要接收来自设备位置主题的消息，您的设备必须使用允许其连接到 AWS IoT 设备网关并订阅 MQTT 主题的策略。

以下是接收各种主题的消息时需要的策略示例。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate/accepted",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate/rejected"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/device_location/device-123/get_position_estimate/accepted",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/device_location/device-123/get_position_estimate/rejected"
            ]
        }
    ]
}
```

## 设备位置主题和有效载荷
<a name="device-location-topics-payload"></a>

下面显示了 “ AWS IoT Core 设备位置” 主题、其消息负载的格式以及每个主题的示例策略。

**Topics**
+ [/get\$1position\$1estimate](#get-position-estimate)
+ [/get\$1position\$1estimate/accepted](#get-position-estimate-accepted)
+ [/get\$1position\$1estimate/rejected](#get-position-estimate-rejected)

### /get\$1position\$1estimate
<a name="get-position-estimate"></a>

向此主题发布一条消息，以获取设备上的原始测量数据，以供 AWS IoT Core 设备位置解析。

```
$aws/device_location/customer_device_id/get_position_estimate
```

AWS IoT Core 设备位置通过发布到[/get\$1position\$1estimate/accepted](#get-position-estimate-accepted)或来响应[/get\$1position\$1estimate/rejected](#get-position-estimate-rejected)。

**注意**  
发布到该主题的消息必须是有效的 JSON 有效载荷。如果输入消息不是有效的 JSON 格式，则不会得到任何响应。有关更多信息，请参阅[消息有效载荷](#get-position-estimate-payload)。

#### 消息负载
<a name="get-position-estimate-payload"></a>

消息负载格式遵循与 AWS IoT Wireless API 操作请求正文类似的结构[https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)。其中包含：
+ 一个可选 `Timestamp` 字符串，对应于解析该位置的日期和时间。`Timestamp` 字符串的最小长度可以为 1，最大长度可以为 10。
+ 一个可选 `MessageId` 字符串，可用于将请求映射到响应。如果您指定此字符串，则发布到 `get_position_estimate/accepted` 或 `get_position_estimate/rejected` 主题的消息将包含此 `MessageId`。`MessageID` 字符串的最小长度可以为 1，最大长度可以为 256。
+ 来自包含以下一种或多种测量类型的设备的测量数据：
  + [https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_WiFiAccessPoint.html](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_WiFiAccessPoint.html)
  + [https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_CellTowers.html](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_CellTowers.html)
  + [https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_Ip.html](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_Ip.html)
  + [https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_Gnss.html](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_Gnss.html)

以下内容显示了示例消息有效载荷示例。

```
{
    "Timestamp": "1664313161",               
    "MessageId": "ABCD1",                
    "WiFiAccessPoints":  [                           
        {
            "MacAddress": "A0:EC:F9:1E:32:C1",                   
            "Rss": -66 
        }
    ],    
    "Ip":{
        "IpAddress": "54.192.168.0"                         
    },
    "Gnss":{
      "Payload":"8295A614A2029517F4F77C0A7823B161A6FC57E25183D96535E3689783F6CA48",
      "CaptureTime":1354393948
    }
}
```

#### 策略示例
<a name="get-position-estimate-policy"></a>

以下是所需策略的示例：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate"
            ]
        }
    ]
}
```

### /get\$1position\$1estimate/accepted
<a name="get-position-estimate-accepted"></a>

AWS IoT Core 设备定位在返回设备已解析的位置信息时，会发布对此主题的回复。位置信息以 [GeoJSON 格式](https://geojson.org/)返回。

```
$aws/device_location/customer_device_id/get_position_estimate/accepted
```

下面显示了消息有效载荷和示例策略。

#### 消息负载
<a name="get-position-estimate-accepted-payload"></a>

以下是 GeoJSON 格式的消息有效载荷示例。如果您在原始测量数据`MessageId`中指定了，并且 AWS IoT Core 设备位置成功解析了位置信息，则消息负载将返回相同`MessageId`的信息。

```
{
    "coordinates": [
        13.37704086303711,
        52.51865005493164
    ],
    "type": "Point",
    "properties": {
        "verticalAccuracy": 707,
        "verticalConfidenceLevel": 0.68,
        "horizontalAccuracy": 389,
        "horizontalConfidenceLevel": 0.68,
        "country": "USA",
        "state": "CA",
        "city": "Sunnyvalue",
        "postalCode": "91234",        
        "timestamp": "2022-11-18T14:03:57.391Z",
        "messageId": "ABCD1"
    }
}
```

#### 策略示例
<a name="get-position-estimate-accepted-policy"></a>

以下是所需策略的示例：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/device_location/device-123/get_position_estimate/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate/accepted"
            ]
        }
    ]
}
```

### /get\$1position\$1estimate/rejected
<a name="get-position-estimate-rejected"></a>

AWS IoT Core 当设备位置无法解析设备位置时，它会发布针对此主题的错误响应。

```
$aws/device_location/customer_device_id/get_position_estimate/rejected
```

下面显示了消息有效载荷和示例策略。有关这些错误的信息，请参阅 [对解析位置时出现的错误进行故障排除](device-location-resolve-solvers.md#location-resolve-troubleshoot)。

#### 消息负载
<a name="get-position-estimate-rejected-payload"></a>

以下是提供错误代码和消息的消息负载示例，这表明了 AWS IoT Core 设备定位未能解析位置信息的原因。如果您`MessageId`在提供原始测量数据时指定了，而 AWS IoT Core 设备位置未能解析位置信息，则消息负载中将返回相同`MessageId`的信息。

```
{
    "errorCode": 500,
    "errorMessage":"Internal server error",
    "messageId": "ABCD1"
}
```

#### 策略示例
<a name="get-position-estimate-rejected-policy"></a>

以下是所需策略的示例：

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/device_location/device-123/get_position_estimate/rejected"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Receive"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/device_location/device-123/get_position_estimate/rejected"
      ]
    }
  ]
}
```

# 位置求解器和设备有效载荷
<a name="device-location-solvers-payload"></a>

位置求解器是可用于解析物联网设备位置的算法。 AWS IoT Core 设备定位支持以下位置求解器。您将看到这些测量类型的 JSON 有效载荷格式的示例，求解器支持的设备，以及如何解析位置。

要解析设备位置，请指定一种或多种这些测量数据类型。将为所有测量数据组合返回单个解析位置。

**Topics**
+ [基于 Wi-Fi 的求解器](#location-solvers-wifi)
+ [基于蜂窝的求解器](#location-solvers-cellular)
+ [IP 反向查找求解器](#location-solvers-ip)
+ [GNSS 求解器](#location-solvers-gnss)
+ [适用于支持 Amazon Sidewalk 的设备的 BLE 求解器](#location-solvers-ble)

## 基于 Wi-Fi 的求解器
<a name="location-solvers-wifi"></a>

使用基于 Wi-Fi 的求解器和来自 Wi-Fi 接入点的扫描信息来解析位置。求解器支持 WLAN 技术，可用于计算通过 TCP/IP 连接的普通物联网设备、广域网无线设备和支持 Amazon Side LoRa walk 的设备的设备位置。

 LoRa广域网设备必须配备 LoRa Edge 芯片组，该芯片组可以解码传入的 Wi-Fi 扫描信息。 LoRa Edge 是一个超低功耗平台，它集成了远程 LoRa 收发器、多星座 GNSS 扫描器和针对地理定位应用的被动 Wi-Fi MAC 扫描器。收到来自设备的上行链路消息时，Wi-Fi 扫描数据将发送到 AWS IoT Core 设备位置，并根据 Wi-Fi 扫描结果估算位置。然后将解码后的信息传递给基于 Wi-Fi 的求解器，以检索位置信息。

要详细了解如何解析支持 Amazon Sidewalk 的设备的位置数据，请访问[适用于 Amazon Sidewalk 的 AWS IoT Core 开发者指南](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-sidewalk.html)。

### 基于 Wi-Fi 的求解器有效载荷示例
<a name="location-solvers-wifi-payload"></a>

以下代码显示了来自包含测量数据的设备的 JSON 有效负载示例。当 AWS IoT Core Device Location 收到这些数据作为输入时，它会向求解器提供者发送 HTTP 请求以解析位置信息。要检索此信息，请指定 MAC 地址和 RSS（接收的信号强度）的值。为此，要么使用此格式提供 JSON 负载，要么使用 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作的[WiFiAccessPoints对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_WiFiAccessPoint.html)参数。

```
{
    "Timestamp": 1664313161,    // optional
    "WiFiAccessPoints": [ 
        {
            "MacAddress": "A0:EC:F9:1E:32:C1",  // required
            "Rss": -75                          // required
        }
    ]
}
```

## 基于蜂窝的求解器
<a name="location-solvers-cellular"></a>

 您可以使用基于蜂窝的求解器和从蜂窝无线发射塔获得的测量数据来解析位置。此求解器支持以下技术。即使包含来自任何或所有这些技术的测量数据，也只能获得单个已解析的位置信息。
+ GSM
+ CDMA
+ WCDMA
+ TD-SCDMA
+ LTE

### 基于蜂窝的求解器有效载荷示例
<a name="location-solvers-cellular-payload"></a>

以下代码显示了来自包含蜂窝测量数据的设备的 JSON 有效载荷示例。当 AWS IoT Core Device Location 收到这些数据作为输入时，它会向求解器提供者发送 HTTP 请求以解析位置信息。要检索信息，您可以在控制台中使用此格式提供 JSON 负载，或者为 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作的[CellTowers](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html#iotwireless-GetPositionEstimate-request-CellTowers)参数指定值。您可以通过使用任何或所有这些蜂窝技术指定参数值来提供测量数据。

#### LTE（长期演变）
<a name="location-solvers-cellular-lte"></a>

使用此测量数据时，必须指定诸如移动网络的网络和国家/地区代码之类的信息，以及包括有关本地 ID 的信息在内的其他可选参数。以下代码显示了有效负载格式的示例。有关这些参数的更多信息，请参阅 [LTE 对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_LteObj.html)。

```
{
    "Timestamp": 1664313161,           // optional 
    "CellTowers": {
        "Lte": [
        {
          "Mcc": int,                   // required
          "Mnc": int,                   // required
          "EutranCid": int,             // required. Make sure that you use int for EutranCid.
          "Tac": int,                   // optional
          "LteLocalId": {               // optional
              "Pci": int,               // required 
              "Earfcn": int,            // required 
          },
          "LteTimingAdvance": int,      // optional 
          "Rsrp": int,                  // optional 
          "Rsrq": float,                // optional 
          "NrCapable": boolean,         // optional 
          "LteNmr": [                   // optional
                {
                    "Pci": int,         // required 
                    "Earfcn": int,      // required 
                    "EutranCid": int,   // required
                    "Rsrp": int,        // optional 
                    "Rsrq": float       // optional 
                }
            ]
         }
      ] 
   }
}
```

#### GSM（全球移动通信系统）
<a name="location-solvers-cellular-gsm"></a>

使用此测量数据时，必须指定诸如移动网络的网络和国家/地区代码之类的信息、基站信息，以及其他可选参数等信息。以下代码显示了有效负载格式的示例。有关这些参数的更多信息，请参阅 [GSM 对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GsmObj.html)。

```
{   
    "Timestamp": 1664313161,           // optional
    "CellTowers": {
        "Gsm": [ 
        {
          "Mcc": int,                   // required
          "Mnc": int,                   // required
          "Lac": int,                   // required
          "GeranCid": int,              // required
          "GsmLocalId": {               // optional
              "Bsic": int,              // required 
              "Bcch": int,              // required 
          },
          "GsmTimingAdvance": int,      // optional
          "RxLevel": int,               // optional
          "GsmNmr": [                   // optional
            {
                "Bsic": int,            // required
                "Bcch": int,            // required
                "RxLevel": int,         // optional
                "GlobalIdentity": {
                    "Lac": int,         // required
                    "GeranCid": int     // required
                }
             }
          ]
       }
    ]  
}
```

#### CDMA（码分多址）
<a name="location-solvers-cellular-cdma"></a>

使用此测量数据时，必须指定诸如信号功率和标识信息、基站信息，以及其他可选参数等信息。以下代码显示了有效负载格式的示例。有关这些参数的更多信息，请参阅 [CDMA 对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_CdmaObj.html)。

```
{
    "Timestamp": 1664313161,               // optional
    "CellTowers": {
        "Cdma": [ 
        {
            "SystemId": int,                // required 
            "NetworkId": int,               // required 
            "BaseStationId": int,           // required 
            "RegistrationZone": int,        // optional 
            "CdmaLocalId": {                // optional
              "PnOffset": int,              // required 
              "CdmaChannel": int,           // required 
            },
            "PilotPower": int,              // optional 
            "BaseLat": float,               // optional 
            "BaseLng": float,               // optional 
            "CdmaNmr": [                    // optional 
                {
                    "PnOffset": int,        // required 
                    "CdmaChannel": int,     // required 
                    "PilotPower": int,      // optional 
                    "BaseStationId": int    // optional 
                }
             ]
          }
       ]
    }
}
```

#### WCDMA（宽带码分多址）
<a name="location-solvers-cellular-wcdma"></a>

使用此测量数据时，必须指定诸如网络和国家/地区代码、信号功率和标识信息、基站信息，以及其他可选参数等信息。以下代码显示了有效负载格式的示例。有关这些参数的更多信息，请参阅 [CDMA 对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_CdmaObj.html)。

```
{
    "Timestamp": 1664313161,           // optional
    "CellTowers": {
        "Wcdma": [ 
        {
          "Mcc": int,                   // required
          "Mnc": int,                   // required 
          "UtranCid": int,              // required 
          "Lac": int,                   // optional 
          "WcdmaLocalId": {             // optional
              "Uarfcndl": int,          // required
              "Psc": int,               // required 
          },
          "Rscp": int,                  // optional
          "Pathloss": int,              // optional 
          "WcdmaNmr": [                 // optional 
                {
                  "Uarfcndl": int,      // required 
                  "Psc": int,           // required 
                  "UtranCid": int,      // required
                  "Rscp": int,          // optional 
                  "Pathloss": int,      // optional 
                }
             ]
          }
       ]
    }
}
```

#### TD-SCDMA（时分同步码分多址）
<a name="location-solvers-cellular-tdscdma"></a>

使用此测量数据时，必须指定诸如网络和国家/地区代码、信号功率和标识信息、基站信息，以及其他可选参数等信息。以下代码显示了有效负载格式的示例。有关这些参数的更多信息，请参阅 [CDMA 对象](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_CdmaObj.html)。

```
{
    "Timestamp": 1664313161,           // optional
    "CellTowers": {
        "Tdscdma": [ 
        {
          "Mcc": int,                   // required
          "Mnc": int,                   // required
          "UtranCid": int,              // required
          "Lac": int,                   // optional
          "TdscdmaLocalId": {           // optional
              "Uarfcn": int,            // required 
              "CellParams": int,        // required 
          },
          "TdscdmaTimingAdvance": int,  // optional
          "Rscp": int,                  // optional
          "Pathloss": int,              // optional
          "TdscdmaNmr": [               // optional 
                {
                  "Uarfcn": int,        // required 
                  "CellParams": int,    // required 
                  "UtranCid": int,      // optional
                  "Rscp": int,          // optional
                  "Pathloss": int,      // optional 
                }
             ]
         }
      ]
   }
}
```

## IP 反向查找求解器
<a name="location-solvers-ip"></a>

您可以使用 IP 反向查找求解器，将 IP 地址作为输入来解析位置。求解器可以从已配置的设备中获取位置信息。 AWS IoT使用 IPv4 或 IPv6 标准模式或 IPv6 十六进制压缩模式的格式指定 IP 地址信息。然后，将获得已解析的估计位置，包括设备所在的城市和国家/地区等其他信息。

**注意**  
使用 IP 反向查找，即表示您同意不将其用于识别或定位特定的家庭或街道地址。

### IP 反向查找求解器有效载荷示例
<a name="location-solvers-ip-payload"></a>

以下代码显示了来自包含测量数据的设备的 JSON 有效负载示例。当 AWS IoT Core Device Location 收到测量数据中的 IP 地址信息时，它会在求解器提供者的数据库中查找这些信息，然后使用该数据库来解析位置信息。要检索信息，请使用此格式提供 JSON 负载，或者为 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作的 I [p](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html#iotwireless-GetPositionEstimate-request-Ip) 参数指定值。

**注意**  
使用此解析器时，除了坐标外，还会报告设备所在的城市、省/直辖市/自治区、国家/地区和邮政编码。有关示例，请参阅[解析设备位置（控制台）](device-location-resolve-solvers.md#location-resolve-console)。

```
{
    "Timestamp": 1664313161,
    "Ip":{
        "IpAddress":"54.240.198.35"
      }
}
```

## GNSS 求解器
<a name="location-solvers-gnss"></a>

使用 GNSS（全球导航卫星系统）求解器和 GNSS 扫描结果消息或 NAV 消息中包含的信息检索设备位置。可以选择提供额外的 GNSS 辅助信息，从而减少求解器搜索信号时必须使用的变量数量。通过提供这种辅助信息（包括位置、高度，以及捕获时间和准确度信息），求解器可以轻松识别视野中的卫星并计算设备位置。

此求解器可用于 LoRa广域网设备和支持 Amazon Sidewalk 的设备，以及已配置物 AWS 联网设备的其他设备。 AWS IoT对于一般物联网设备，如果设备支持使用 GNSS 进行位置估计，当从设备接收 GNSS 扫描信息时，收发器会解析位置信息。对于 LoRa WAN 设备，这些设备必须配备 LoRa Edge 芯片组。当收到来自设备的上行链路消息时，GNSS 扫描数据将发送到 AWS IoT LoRa WAN 或 AWS IoT Amazon Sidewalk，并根据收发器的扫描结果估算位置。

### GNSS 求解器有效载荷示例
<a name="location-solvers-gnss-payload"></a>

以下代码显示了来自包含测量数据的设备的 JSON 有效负载示例。当 AWS IoT Core Device Location 收到包含测量数据中有效载荷的 GNSS 扫描信息时，它会使用收发器和随附的任何其他辅助信息来搜索信号并解析位置信息。要检索信息，请使用此格式提供 JSON 有效负载，或者为 [GetPositionEstimate](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html)API 操作的 [Gnss](https://docs.aws.amazon.com/iot-wireless/latest/apireference/API_GetPositionEstimate.html#iotwireless-GetPositionEstimate-request-Gnss) 参数指定值。

**注意**  
在 AWS IoT Core 设备定位可以解析设备位置之前，必须从有效负载中移除目标字节。

```
{   
    "Timestamp": 1664313161,                  // optional
    "Gnss": { 
        "AssistAltitude": number,             // optional
        "AssistPosition": [ number ],         // optional
        "CaptureTime": number,                // optional
        "CaptureTimeAccuracy": number,        // optional
        "Payload": "string",                  // required
        "Use2DSolver": boolean                // optional
   }
}
```

## 适用于支持 Amazon Sidewalk 的设备的 BLE 求解器
<a name="location-solvers-ble"></a>

**注意**  
对于基于低功耗蓝牙的位置，会根据附近人行道网关的大致位置 AWS IoT 返回位置坐标，这些网关已连接到 Amazon Sidewalk 并启用了社区查找功能。Gateway 位置数据是 AWS 内容，提供给您的唯一目的是帮助您定位连接到 Amazon Sidewalk 的设备，您只能将这些数据用于此目的。您只能通过我们通常向您提供的界面和功能使用和访问位置数据，并且不得尝试重新识别、逆向工程或重新映射我们提供给您的任何 Gateway 位置数据。

通过连接的 Amazon Sidewalk 终端设备 适用于 Amazon Sidewalk 的 AWS IoT Core 可以使用 Amazon Sidewalk 终端设备发布的 BLE、Wi-Fi 或 GNSS 上行链路消息来解析其位置数据。有关更多信息，请参阅[适用于 Amazon Sidewalk 的 AWS IoT Core 开发者指南](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/sidewalk-getting-started.html)。