

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

# 解析 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 裝置位置功能嘗試解析位置時，內部伺服器發生異常狀況。若要嘗試修正此錯誤，請重新整理工作階段，然後重新嘗試傳送要解析的測量資料。