

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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


|  | 
| --- |
| 使用 AWS IoT Core 裝置位置功能之前，請檢閱此功能的條款與條件。請注意， AWS 可能會傳輸您的地理位置搜尋請求參數，例如用於執行搜尋的位置資料，以及其他資訊給您選擇的第三方資料提供者，這些資訊可能位於 AWS 區域 您目前使用的 之外。根據收到的輸入承載，選擇要使用的第三方供應商和求解器。如需詳細資訊，請參閱 [AWS 服務條款](https://aws.amazon.com/service-terms)。 | 

使用 AWS IoT Core 裝置位置，透過第三方求解器測試 IoT 裝置的位置。*求解器*是由第三方提供的演算法，可解析測量資料並估算裝置的位置。藉由識別裝置的位置，您就可以在現場對其進行追蹤和偵錯，進而排解任何疑難問題。

針對收集自各種來源的測量資料進行解析，並將地理位置資訊報告為 [GeoJSON](https://geojson.org/) 承載。GeoJSON 格式可用於對地理資料結構進行編碼。承載含有裝置位置的緯度和經度坐標 (以[世界大地坐標系統 (WGS84)](https://gisgeography.com/wgs84-world-geodetic-system/) 為準)。

**Topics**
+ [測量類型和求解器](#location-measurement-types)
+ [AWS IoT Core 裝置位置的運作方式](#location-how-works)
+ [如何使用 AWS IoT Core 裝置位置](#location-how-use)
+ [解析 IoT 裝置的位置](device-location-resolve-solvers.md)
+ [使用裝置位置 MQTT 主題解決 AWS IoT Core 裝置位置](device-location-reserved-topics.md)
+ [位置求解器和裝置承載](device-location-solvers-payload.md)

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

AWS IoT Core Device Location 會與第三方廠商合作，以解析測量資料並提供預估的裝置位置。下表顯示測量類型和第三方位置求解器，以及支援裝置的相關資訊。如需有關 LoRaWAN 裝置和為其設定裝置位置的資訊，請參閱[設定 LoRaWAN 資源的位置](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-configure-location.html)。

**注意**  
一般 IoT 裝置和 Sidewalk 裝置可以使用裝置位置 MQTT 主題來取得位置資訊。對於 Wi-Fi、行動和 IP 地址測量類型，如果裝置以定義的 GeoJSON 格式將測量資料發佈至[預留主題](device-location-reserved-topics.md)， AWS IoT Core 則裝置位置可以解析裝置的位置。對於 GNSS 測量類型，裝置必須具有 LR11xx 晶片來掃描測量資料，以使用 GNSS 求解器取得解析的位置資訊。如需取得 LoRaWAN 裝置位置資訊的資訊，請參閱 *AWS IoT Wireless 文件*中的[設定 LoRaWAN 資源的位置](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-configure-location.html)。


**測量類型和求解器**  

| 測量類型 | 第三方求解器 | 支援的裝置 | 
| --- | --- | --- | 
| Wi-Fi 存取點 | Wi-Fi 型的求解器  | 一般 IoT 裝置、LoRaWAN 和 Amazon Sidewalk 裝置 | 
| 行動網路無線電塔：GSM、LTE、CDMA、SCDMA、WCMDA 和 TD-SCDMA 資料 | 行動網路型求解器  | 一般 IoT 裝置、LoRaWAN 和 Amazon Sidewalk 裝置 | 
| IP 位址 | IP 反向查詢求解器 | 透過 TCP/IP 連線的任何 IoT 裝置 | 
| GNSS 掃描資料 (NAV 訊息) | GNSS 求解器 | 一般 IoT 裝置、LoRaWAN 和 Amazon Sidewalk 裝置 | 
| 低功耗藍牙 (BLE) | 以 BLE 為基礎的求解器 | Amazon Sidewalk 裝置 | 

如需有關位置求解器的詳細資訊及顯示各種測量類型的裝置承載範例，請參閱 [位置求解器和裝置承載](device-location-solvers-payload.md)。

## AWS IoT Core 裝置位置的運作方式
<a name="location-how-works"></a>

下圖顯示 AWS IoT Core Device Location 如何收集測量資料並解析裝置的位置資訊。

![\[顯示 AWS IoT Core Device Location 如何使用原始測量資料並解析裝置位置的影像。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/iot-device-location.png)


下列步驟顯示 AWS IoT Core 裝置位置的運作方式。

1. 

**接收測量資料**

   先從裝置傳送與裝置位置相關的原始測量資料。將測量資料指定為 JSON 承載。

1. 

**處理測量資料**

   系統會處理測量資料，而 AWS IoT Core Device Location 會選擇要使用的測量資料，可以是 Wi-Fi、行動網路、GNSS 掃描或 IP 地址資訊。

1. 

**選擇求解器**

   根據測量資料選擇第三方求解器。例如，如果測量資料包含 Wi-Fi 和 IP 地址資訊，則會選擇 Wi-Fi 求解器和 IP 反向查詢求解器。

1. 

**取得解析的位置**

   API 請求會傳送至請求解析位置的求解器提供者。接著 AWS IoT Core ，Device Location 會從求解器取得預估的地理位置資訊。

1. 

**選擇解析的位置**

   已解析的位置資訊及其準確性會進行比較，而 AWS IoT Core Device Location 會選擇準確度最高的地理位置結果。

1. 

**輸出位置資訊**

   地理位置資訊會以 GeoJSON 承載的形式傳送給您。承載包含 WGS84 地理座標、準確度資訊、可信度，以及取得解析位置的時間戳記。

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

下列步驟說明如何使用 AWS IoT Core 裝置位置。

1. 

**提供測量資料**

   將與裝置位置相關的原始測量資料指定為 JSON 承載。若要擷取承載測量資料，請前往裝置日誌，或使用 CloudWatch Logs，然後複製承載資料資訊。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 接著會選擇準確度最高的求解器，並報告裝置位置。如需詳細資訊，請參閱[解析 IoT 裝置的位置](device-location-resolve-solvers.md)。

1. 

**複製位置資訊**

   驗證 AWS IoT Core 裝置位置解析並回報為 GeoJSON 承載的地理位置資訊。您可以複製承載，以搭配您的應用程式和其他 AWS 服務使用。例如，您可以使用 [Location](location-rule-action.md) AWS IoT 規則動作將地理位置資料傳送至 Amazon Location Service。

下列主題說明如何使用 AWS IoT Core 裝置位置和裝置位置承載的範例。
+ [解析 IoT 裝置的位置](device-location-resolve-solvers.md)
+ [位置求解器和裝置承載](device-location-solvers-payload.md)

# 解析 IoT 裝置的位置
<a name="device-location-resolve-solvers"></a>

使用 AWS IoT Core 裝置位置從您的裝置解碼測量資料，並使用第三方求解器解析裝置位置。系統會產生解析後的位置作為 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 Logs 日誌取得承載測量資料，然後在**透過承載解析位置**區段輸入這些資料。

   以下程式碼顯示 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 Device Location 在嘗試解析位置時回報錯誤，您可以疑難排解錯誤並解析位置。如需詳細資訊，請參閱[對解析位置時發生的錯誤進行疑難排解](#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](location-rule-action.md) 將地理位置資料傳送至 Amazon Location Service。

## 解析裝置位置 (API)
<a name="location-resolve-api"></a>

若要使用 AWS IoT Wireless 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>

當您嘗試解析位置時，您可能會看到以下任何錯誤代碼。使用 `GetPositionEstimate` API 操作時， AWS IoT Core 裝置位置可能會產生錯誤，或者參考與 AWS IoT 主控台中錯誤對應的行號。
+ 

**400 - 錯誤**  
此錯誤表示裝置承載 JSON 的格式無法由 AWS IoT Core 裝置位置驗證。發生錯誤的原因可能是：
  + JSON 測量資料的格式不正確。
  + 裝載只包含時間戳記資訊。
  + 測量資料參數 (例如 IP 地址) 無效。

  若要解決此錯誤，請檢查您的 JSON 格式是否正確，並包含來自一或多種測量類型的資料作為輸入項。如果 IP 地址無效，請參閱 [IP 反向查詢求解器](device-location-solvers-payload.md#location-solvers-ip) 以深入了解如何提供有效 IP 地址以解決錯誤。
+ 

**403 - 錯誤**  
此錯誤表示您沒有執行 API 操作或使用 AWS IoT 主控台擷取裝置位置的許可。若要解決此錯誤，請確認您具有執行此動作所需的許可。如果您的 AWS 管理主控台 工作階段或 AWS CLI 工作階段字符已過期，可能會發生此錯誤。若要解決此錯誤，請重新整理工作階段字符以使用 AWS CLI，或登出 AWS 管理主控台 ，然後使用您的登入資料登入。
+ 

**404 - 錯誤**  
此錯誤表示 AWS IoT Core 裝置位置找不到或解決位置資訊。由於輸入的測量資料中可能有資料不足等情況，因此可能會發生錯誤。例如：
  + MAC 地址或行動網路基地台的資訊不夠充分。
  + 無法使用 IP 地址查詢和擷取位置。
  + GNSS 承載不足。

  若要解決這種情況下的錯誤，請檢查您的測量資料是否包含解析裝置位置所需的足夠資訊。
+ 

**500 - 錯誤**  
此錯誤表示 AWS IoT Core 裝置位置功能嘗試解析位置時，內部伺服器發生異常狀況。若要嘗試修正此錯誤，請重新整理工作階段，然後重新嘗試傳送要解析的測量資料。

# 使用裝置位置 MQTT 主題解決 AWS IoT Core 裝置位置
<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。如果您的裝置已註冊為 AWS IoT 物件`WirelessDeviceId`，建議您指定 `thingName`，例如 for LoRaWAN 和 Sidewalk 裝置，以及 。然後，您可以將主題附加到主題 Stub，例如 `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 主題**  

| 主題 | 允許操作 | Description | 
| --- | --- | --- | 
|  \$1aws/device\$1location/*customer\$1device\$1id*/get\$1position\$1estimate  | 發布 |  裝置會發佈至此主題，以取得要由 AWS IoT Core 裝置位置解析的掃描原始測量資料。  | 
|  \$1aws/device\$1location/*customer\$1device\$1id*/get\$1position\$1estimate/accepted  | 訂閱 |  AWS IoT Core 裝置位置成功解析裝置位置時，會將位置資訊發佈至此主題。  | 
|  \$1aws/device\$1location/*customer\$1device\$1id*/get\$1position\$1estimate/rejected  | 訂閱 |  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 Device Location 成功解析了位置資訊，則訊息承載會傳回相同的`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>

位置求解器是可用於解析 IoT 裝置位置的演算法。 AWS IoT Core Device Location 支援下列位置求解器。您會看到這些測量類型的 JSON 承載資料格式範例、求解器支援的裝置，以及解析位置的方式。

若要解析裝置位置，請指定一或多個測量資料類型。系統會綜合所有測量資料傳回單一的解析位置。

**Topics**
+ [基於 Wi-Fi 的求解器](#location-solvers-wifi)
+ [行動網路求解器](#location-solvers-cellular)
+ [IP 反向查詢求解器](#location-solvers-ip)
+ [求解器](#location-solvers-gnss)
+ [Amazon Sidewalk 啟用裝置的 BLE 求解器](#location-solvers-ble)

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

使用 Wi-Fi 解析器依據來自 Wi-Fi 存取點的掃描資訊來解析位置。求解器支援 WLAN 技術，可用於計算透過 TCP/IP、LoRaWAN 無線裝置和啟用 Amazon Sidewalk 的裝置連線之一般 IoT 裝置的裝置位置。

LoRaWAN 裝置必須具有可對傳入 Wi-Fi 掃描資訊進行解碼的 LoRaWAN 晶片組。LoRa Edge 是一個超低功耗地理位置平台，以地理位置應用為目標，整合了長距離 LoRa 收發器、多星系 GNSS 掃描器和被動式 Wi-Fi MAC 掃描器。從裝置收到上行訊息時，Wi-Fi 掃描資料會傳送至 AWS IoT Core 裝置位置，並根據 Wi-Fi 掃描結果估計位置。解碼後的資訊會傳遞到 Wi-Fi 求解器以擷取位置資訊。

若要進一步了解如何解析已啟用 Amazon Sidewalk 裝置的位置資料，請造訪[AWS IoT Core for Amazon Sidewalk 開發人員指南](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 object](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 操作的 [Ip](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"
      }
}
```

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

使用 GNSS (全球導航衛星系統) 求解器，依據 GNSS 掃描結果訊息或 NAV 訊息包含的資訊來擷取裝置位置。您可以選擇性地提供額外的 GNSS 輔助資訊，以減少求解器搜尋訊號時必須使用的變數數目。藉由提供此輔助資訊 (包括位置、高度以及擷取時間和準確度資訊)，求解器可以輕鬆識別視圖中的衛星並計算裝置位置。

此求解器可與 LoRaWAN 裝置和啟用 Amazon Sidewalk 的裝置，以及使用已佈建的 AWS IoT 裝置佈建的其他裝置搭配使用 AWS IoT。對於一般 IoT 裝置，如果裝置支援使用 GNSS 進行位置估算，則收發器會在從裝置接收到 GNSS 掃描資訊後解析位置資訊。對於 LoRaWAN 裝置，這類裝置必須具備 LoRa 邊緣晶片組。從裝置接收上行訊息時，GNSS 掃描資料會傳送至 AWS IoT for LoRaWAN 或 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>

**注意**  
對於以低功耗藍牙為基礎的位置， 會根據連線至 Amazon Sidewalk 且啟用社群調查結果功能的附近 Sidewalk 閘道的大致位置 AWS IoT 傳回位置座標。閘道位置資料是 AWS 內容，僅用於協助您定位連線至 Amazon Sidewalk 的裝置，而且您只能將資料用於該用途。您只能透過我們一般提供給您的界面和功能來使用和存取位置資料，而且您不得嘗試重新識別、反向工程或重新映射我們提供給您的任何閘道位置資料。

透過 連線的 Amazon Sidewalk 終端裝置 AWS IoT Core for Amazon Sidewalk 可以使用 Amazon Sidewalk 終端裝置發佈的 BLE、Wi-Fi 或 GNSS 上行訊息來解析其位置資料。如需詳細資訊，請參閱 [AWS IoT Core for Amazon Sidewalk 開發人員指南](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/sidewalk-getting-started.html)。