开始跟踪 - Amazon Location Service

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

开始跟踪

本节将指导您构建捕获设备位置的跟踪应用程序。

创建跟踪器

创建跟踪器资源来存储和处理设备上的位置更新。您可以使用亚马逊Location Service 控制台AWS CLI、或亚马逊定位 API。

存储在跟踪器资源中的每个位置更新可以包括位置精度的测量值,以及与您要存储的位置或设备相关的多达三个元数据字段。元数据以键值对的形式存储,可以存储速度、方向、轮胎压力或发动机温度等信息。

跟踪器在收到位置更新时对其进行过滤。这可以减少设备路径中的视觉噪音(称为抖动),并减少错误的地理围栏进入和退出事件的数量。这还有助于通过减少存储的位置更新的数量和减少启动的地理围栏评估的数量来管理成本。

追踪器提供三种位置筛选选项,以帮助管理成本并减少位置更新中的抖动。

  • 基于精度-与任何提供精度测量的设备一起使用。大多数移动设备都提供此信息。每次位置测量的精度都受到许多环境因素的影响,包括 GPS 卫星接收、景观以及 Wi-Fi 和蓝牙设备的距离。大多数设备,包括大多数移动设备,都可以在测量的同时提供测量精度的估计值。通过AccuracyBased筛选时,如果一个设备的移动距离小于测量的精度则该设备的移动距离小于测量的精度时忽略位置更新。例如,如果一个设备两次连续更新的精度分别为 5 米和 10 米时忽略第二次更新。Amazon Location 既不会根据地理围栏评估被忽略的更新,也不会存储这些更新。

    如果未提供精度,则将其视为零,测量结果被视为完全准确。

    注意

    您也可以使用基于精度的筛选来删除所有筛选。如果您选择基于准确度的筛选,但将所有精度数据改写为零,或者完全省略精度,则 Amazon Location 不会过滤掉任何更新。

  • 基于距离在您的设备不提供精度测量,但您仍希望利用过滤来减少抖动和管理成本时使用。 DistanceBased筛选忽略位置更新,其中设备移动距离小于 30 米时忽略位置更新。当您使用DistanceBased位置筛选时,Amazon Location 既不会根据地理围栏评估这些被忽略的更新,也不会存储更新。

    大多数移动设备的精度,包括iOS 和Android设备的平均精度,都在15 m以内。在大多数应用程序中,DistanceBased过滤可以减少在地图上显示设备轨迹时位置不准确的影响,以及当设备靠近地理围栏边界时多个连续进入和退出事件的反弹效果。它还可以减少调用次数,根据关联的地理围栏进行评估或检索设备位置,从而帮助降低应用程序的成本。

  • 基于时间 —(默认)在您的设备非常频繁地发送位置更新(每 30 秒发送一次以上),并且您希望在不存储每次更新的情况下实现近乎实时的地理围栏评估时使用。TimeBased筛选中,每个位置更新都会根据链接的地理围栏集合进行评估,但并非每个位置更新都会存储。如果更新频率超过 30 秒,则每 30 秒仅为每个唯一的设备 ID 存储一次更新。

注意

在决定筛选方法和位置更新频率时,请注意跟踪应用程序的成本。每次更新位置都会向您收取一次费用,针对每个链接的 geofence 集合评估位置更新都需要一次付费。例如,在使用基于时间的筛选时,如果您的跟踪器链接到两个 geofence 集合,则每次位置更新都将计为一次位置更新请求和两次 geofence 集合评估。如果您每 5 秒报告一次设备的位置更新并使用基于时间的筛选,则每台设备每小时将收取 720 次位置更新和 1,440 次地理围栏评估的费用。

您的账单不受每个集合中地理围栏数量的影响。由于每个地理围栏集合可能包含多达 50,000 个 geofence,因此您可能需要尽可能将地理围栏合并为更少的集合,以降低地理围栏评估的成本。

Console

使用亚马逊定位控制台创建追踪器

  1. 打开亚马逊Location Service 控制台,网址为 https://console.aws.amazon.com/location/

  2. 在左侧导航窗格中,选择 Tracker (跟踪器)。

  3. 选择创建跟踪器

  4. 填写以下字段:

    • 名称-输入一个唯一的名称。例如,ExampleTracker。最多 100 个字符。有效条目包括字母数字字符、连字符、句点和下划线。

    • 描述-输入可选描述。

  5. 在 “位置筛选” 下,选择最适合您打算如何使用跟踪资源的选项。如果您未设置位置筛选,则默认设置为TimeBased。有关更多信息,请参阅追踪器本指南和PositionFiltering亚马逊Location Service 跟踪器 API 参考。

  6. (可选)在 Tags (标签) 下,输入标签 Key (键)Value (值)。这会为您的新 geofence 集合添加标签。有关更多信息,请参阅标记资源

  7. (可选)在客户管理密钥加密下,您可以选择添加客户管理的密钥。这会添加一个对称客户托管式密钥,您可以根据默认的加密方式创建、AWS拥有和管理该密钥。有关更多信息,请参阅加密静态数据

  8. 选择创建跟踪器

API

使用亚马逊位置 API 创建跟踪器

使用亚马逊位置追踪器 API 中的CreateTracker操作。

以下示例使用 API 请求创建名为的跟踪器ExampleTracker。跟踪器资源与客户管理的 KMS 密钥相关联,用于加密客户数据

POST /tracking/v0/trackers Content-type: application/json { "TrackerName": "ExampleTracker", "Description": "string", "KmsKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "PositionFiltering": "AccuracyBased", "Tags": { "string" : "string" } }
AWS CLI

使用AWS CLI命令创建跟踪器

使用 create-tracker 命令。

以下示例使用创建名AWS CLI为的跟踪器ExampleTracker。跟踪器资源与客户管理的 KMS 密钥相关联,用于加密客户数据

aws location \ create-tracker \ --tracker-name "ExampleTracker" \ --position-filtering "AccuracyBased" \ --kms-key-id "1234abcd-12ab-34cd-56ef-1234567890ab"
注意

计费取决于您的使用情况。您可能会因使用其他AWS服务而产生费用。有关更多信息,请参阅亚马逊Location Service 定价

对您的请求进行身份验证

创建跟踪器资源并准备好开始根据地理围栏评估设备位置后,请选择如何验证您的请求:

  • 要探索访问服务的方式,请参阅访问亚马逊Location Servic e。

  • 如果您的网站有匿名用户,或者您想使用自己的身份验证流程或组合多种身份验证方法,请参阅允许未经身份验证的访客使用 Amazon Cognito 访问您的应用程序

    示例

    以下示例显示了在使用 AWS JavaScript SDK 时将未经身份验证的身份池作为证书传递的情况

    const AWS = require("aws-sdk"); // Exchange the unauthenticated identity pool you created for credentials const credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "us-east-1:54f2ba88-9390-498d-aaa5-0d97fb7ca3bd" }); const client = new AWS.Location({ credentials, region: "us-east-1" // The region containing both the identity pool and tracker resource }); // Send device position updates const rsp = await location .batchUpdateDevicePosition({ TrackerName: "ExampleTracker", Updates: [ { DeviceId: "ExampleDevice-1", Position: [-123.4567, 45.6789], SampleTime: "2020-10-02T19:09:07.327Z" }, { DeviceId: "ExampleDevice-2", Position: [-123.123, 45.123], SampleTime: "2020-10-02T19:10:32Z" } ] }) .promise()

使用设备位置更新您的追踪器

要跟踪您的设备,您可以将设备位置更新发布到跟踪器。您稍后可以从跟踪器资源中检索这些设备位置或设备位置历史记录。

每次位置更新都必须包括设备 ID、时间戳和位置。您可以选择添加其他元数据,包括准确性和最多 3 个键值对供您自己使用。

如果您的跟踪链接到一个或多个 geofence 集合,则将根据这些地理围栏评估更新(遵循您为跟踪器指定的筛选规则)。如果设备突破了地理围栏区域(从区域内部移动到外部,反之亦然),您将在其中收到事件 EventBridge。这些ENTEREXIT事件包括位置更新详细信息,包括设备 ID、时间戳和任何相关的元数据。

注意

有关职位筛选的更多信息,请参阅创建跟踪器

有关地理围栏事件的更多信息,请参阅回应Amazon Location Service 事件 EventBridge

使用以下任一方法发送设备更新:

API

使用亚马逊位置 API 发送职位更新

使用亚马逊位置追踪器 API 中的BatchUpdateDevicePosition操作。

以下示例使用 API 请求向跟踪器发布设备位置更新ExampleTrackerExampleDevice

POST /tracking/v0/trackers/ExampleTracker/positions Content-type: application/json { "Updates": [ { "DeviceId": "ExampleDevice", "Position": [-123.17805, 49.19284], "SampleTime": "2020-10-02T19:09:07.327Z", "Accuracy": { "Horizontal": 3.14 }, "PositionProperties": { "field1": "value1", "field2": "value2" } } ] }
AWS CLI

使用AWS CLI命令发送位置更新

使用 batch-update-device-position 命令。

以下示例使用AWS CLI向跟踪器发布 ExampleDevice-1 和-ExampleDevice 2 的设备位置更新ExampleTracker

aws location batch-update-device-position \ --tracker-name ExampleTracker \ --updates '[{"DeviceId":"ExampleDevice-1","Position":[-123.123,47.123],"SampleTime":"2021-11-30T21:47:25.149Z"},{"DeviceId":"ExampleDevice-2","Position":[-123.123,47.123],"SampleTime":"2021-11-30T21:47:25.149Z","Accuracy":{"Horizontal":10.30},"PositionProperties":{"field1":"value1","field2":"value2"}}]'

从追踪器获取设备的位置记录

您的亚马逊位置追踪器资源会将所有被追踪设备的位置历史记录保留 30 天。您可以从跟踪器资源中检索设备位置历史记录,包括所有相关的元数据。以下示例使用或亚马逊定位 API。AWS CLI

API

使用亚马逊定位 API 从跟踪器获取设备位置历史记录

使用亚马逊位置追踪器 API 中的GetDevicePositionHistory操作。

以下示例使用 API URI 请求ExampleDevice从名为ExampleTracker开始19:05:07(包括)和结束于19:20:07(独占)的跟踪器获取的设备位置历史记录2020–10–02

POST /tracking/v0/trackers/ExampleTracker/devices/ExampleDevice/list-positions Content-type: application/json { "StartTimeInclusive": "2020-10-02T19:05:07.327Z", "EndTimeExclusive": "2020-10-02T19:20:07.327Z" }
AWS CLI

使用AWS CLI命令从跟踪器获取设备位置历史记录

使用 get-device-position-history 命令。

以下示例使用ExampleDevice从名为 “起始于19:05:07(包括),结束于19:20:07(独占)ExampleTracker开启” 的跟踪器获取的设备位置历史记录2020–10–02。AWS CLI

aws location \ get-device-position-history \ --device-id "ExampleDevice" \ --start-time-inclusive "2020-10-02T19:05:07.327Z" \ --end-time-exclusive "2020-10-02T19:20:07.327Z" \ --tracker-name "ExampleTracker"