Amazon Location を使用して追跡を開始する
このセクションでは、デバイスの位置をキャプチャする追跡アプリケーションを構築する手順を説明します。
トラッカーを作成する
トラッカーリソースを作成して、デバイスからの位置の更新を保存して処理します。Amazon Location Service コンソール、AWS CLI、または Amazon Location API を使用できます。
トラッカーリソースに保存される位置の更新はそれぞれ、位置精度の測定値と、位置またはデバイスに関するメタデータで保存したいものを最大 3 つ含めることができます。メタデータはキーと値がペアとして保存されており、速度、方向、タイヤ空気圧、エンジン温度などの情報を保存できます。
トラッカーは、位置の更新を受信するとフィルタリングします。これにより、ジッターと呼ばれるデバイス経路の視覚的なノイズが減り、誤ったジオフェンスへの出入りイベントの数が減ります。そして、ジオフェンス評価が開始される数も減り、コストを管理できます。
トラッカーには 3 つの位置フィルターオプションがあります。コスト管理と位置情報の更新におけるジッターの軽減に役立ちます。
-
精度ベース — 精度測定が可能なあらゆるデバイスで使用できます。精度測定は、ほとんどのモバイル機器で提供されます。各位置測定の精度は、GPS 衛星の受信状況、地形、Wi-Fi デバイスや Bluetooth デバイスまでの距離など、さまざまな環境要因の影響を受けます。モバイル機器を含むほとんどのデバイスでは、測定と同時にその精度も推定できます。AccuracyBased
フィルタリングでは、デバイスの移動距離が測定精度より少ない場合、Amazon Location は位置の更新を無視します。例えば、デバイスから 2 つの連続した更新を受信し、その精度が 5 m と 10 m だった場合、デバイスの移動距離が 15 m 未満であれば 2 回目の更新は無視されます。Amazon Location は、無視した更新をジオフェンスと比較して評価したり、保存したりしません。
精度が提供されない場合はゼロとして扱われ、測定値は完全に正確であると見なされます。
精度ベースのフィルタリングを使用してすべてのフィルタリングを削除することもできます。精度ベースのフィルタリングを選択したものの、すべての精度データをゼロに上書きしたり、精度を完全に無視した場合、Amazon Location は更新をフィルタリングしません。
-
距離ベース — 使用しているデバイスでは正確な測定値が得られないが、フィルタリングを活用してジッターを減らし、コストを管理したい場合に使用します。DistanceBased
フィルタリングでは、デバイスの移動が 30 m (98.4 フィート) 未満の場合、ロケーションの更新は無視されます。DistanceBased
位置フィルターを使用すると、Amazon Location は無視した更新をジオフェンスと比較して評価したり、保存したりしません。
iOS および Android デバイスの平均精度を含め、ほとんどのモバイル機器の精度は 15m 以内です。ほとんどのアプリケーションでは、DistanceBased
フィルタリングを使用することで、デバイスの軌跡を地図上に表示するときに位置が不正確になることによる影響や、デバイスがジオフェンスの境界近くにあるときに複数の連続した出入りイベントによるバウンス効果を減らすことができます。また、リンクされたジオフェンスと比較して評価するリクエストや、デバイスの位置を取得するリクエストが減るので、アプリケーションのコスト削減にも役立ちます。
-
時間ベース — (デフォルト) デバイスが位置の更新を非常に頻繁に (30 秒に 1 回以上) 送信し、すべての更新を保存せずにほぼリアルタイムでジオフェンスの評価を行いたい場合に使用します。TimeBased
フィルタリングでは、位置の更新ごとに、リンクされたジオフェンスコレクションと比較して評価しますが、すべてが保存されるわけではありません。更新頻度が 30 秒を超える場合、一意のデバイス ID ごとに 30 秒あたり 1 つの更新のみが保存されます。
フィルタリング方法や位置更新の頻度を決める際には、トラッキングアプリケーションのコストに留意してください。位置の更新ごとに請求され、リンクされた各ジオフェンスコレクションと比較して評価する際にも 1 回請求されます。例えば、時間ベースのフィルタリングを使用する場合で、トラッカーが 2 つのジオフェンスコレクションにリンクされている場合は、位置の更新ごとに 1 回の位置更新リクエストと 2 回のジオフェンスコレクション評価としてカウントされます。デバイスの位置更新を 5 秒ごとに報告し、時間ベースのフィルタリングを使用している場合は、デバイスごとに 1 時間あたり 720 回の位置更新リクエストと 1,440 回のジオフェンス評価について課金されます。
請求額は、各コレクション内のジオフェンスの数に影響されません。各ジオフェンスコレクションには最大 50,000 のジオフェンスを含めることができるため、ジオフェンスの評価コストを削減するために、ジオフェンスをできるだけ少ないコレクションにまとめることをお勧めします。
デフォルトでは、追跡対象デバイスがリンクされたジオフェンスに出入りするたびに、EventBridge イベントが発生します。詳細については、「チュートリアル: Amazon Location でトラッカーをジオフェンスコレクションにリンクする」を参照してください。
トラッカーリソースのすべてのフィルターされた位置更新のイベントを有効にできます。詳細については、「トラッカーの更新イベントを有効にする」を参照してください。
ユーザー自身が管理する AWS KMS 顧客管理キーを使用してデータを暗号化する場合、Bounding Polygon Queries 機能はデフォルトで無効になります。これは、Bounding Polygon Queries 機能を使用すると、デバイスの位置情報が AWS KMS 顧客管理キーを使用して暗号化されなくなるためです。ただし、デバイスの正確な位置は引き続き顧客管理キーを使用して暗号化されます。
Bounding Polygon Queries 機能を使用するには、トラッカーを作成または更新するときに KmsKeyEnableGeospatialQueries
パラメータを true に設定します。
- Console
-
Amazon Location コンソールを使用してトラッカーを作成するには
-
Amazon Location Service コンソール (https://console.aws.amazon.com/location/) を開きます。
-
左のナビゲーションペインから、[トラッカー] を選択します。
-
トラッカーを作成を選択します。
-
以下のフィールドに入力します。
-
[位置フィルター] で、トラッカーリソースの使用目的に最も適したオプションを選択します。[位置のフィルタリング] を設定しない場合、デフォルト設定は TimeBased
となります。詳細については、このガイドの「Amazon Location Service のトラッカーについて」と「Amazon Location Service トラッカー API リファレンス」の「PositionFiltering
」を参照してください。
-
(オプショナル) タグに、タグのキーと値を入力します。これにより、新しいジオフェンスコレクションにタグが追加されます。詳細については、リソースにタグを付けるを参照してください。
-
(オプション) [顧客管理キーの暗号化] で、[顧客管理キーの追加] を選択できます。これにより、AWS デフォルトの暗号化ではなく、ユーザーが作成、所有、管理する対照型の顧客管理キーが追加されます。詳細については、「保管中のデータの暗号化」を参照してください。
-
(オプション) [KmsKeyEnableGeospatialQueries] で、[地理空間クエリ] を有効化できます。これにより、Bounding Polygon Queries 機能を使用しながら、顧客の AWS KMS 管理キーを使用してデータを暗号化できます。
Bounding Polygon Queries 機能を使用する場合、デバイスの位置情報は AWS KMS 顧客管理キーでは暗号化されません。ただし、デバイスの正確な位置は引き続き顧客管理キーを使用して暗号化されます。
-
(オプション) [EventBridge の設定] で、フィルタリングされた位置更新の EventBridge イベントを有効化することができます。これにより、このトラッカー内のデバイスの位置更新が位置フィルターの評価を満たすたびにイベントが送信されます。
-
トラッカーを作成を選択します。
- API
-
Amazon Location API を使用してトラッカーを作成するには
Amazon Location Trackers API の CreateTracker
オペレーションを使用してください。
次の例では、API リクエストを使用して ExampleTracker
というトラッカーを作成します。トラッカーリソースは、顧客データを暗号化するための AWS KMS 顧客管理キーにリンクされており、EventBridge での位置更新は有効化されていません。
POST /tracking/v0/trackers
Content-type: application/json
{
"TrackerName": "ExampleTracker",
"Description": "string",
"KmsKeyEnableGeospatialQueries": false,
"EventBridgeEnabled": false,
"KmsKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
"PositionFiltering": "AccuracyBased",
"Tags": {
"string" : "string"
}
}
KmsKeyEnableGeospatialQueries
を有効にしたトラッカーを作成する
次の例では、KmsKeyEnableGeospatialQueries
パラメータが true に設定されています。これにより、Bounding Polygon Queries 機能を使用しながら、AWS KMS 顧客管理キーを使用してデータを暗号化できます。
Bounding Polygon Queries 機能の使用方法については、「デバイスの位置のリストを表示する」を参照してください
Bounding Polygon Queries 機能を使用する場合、デバイスの位置情報は AWS KMS 顧客管理キーでは暗号化されません。ただし、デバイスの正確な位置は引き続き顧客管理キーを使用して暗号化されます。
POST /tracking/v0/trackers
Content-type: application/json
{
"TrackerName": "ExampleTracker
",
"Description": "string",
"KmsKeyEnableGeospatialQueries": true,
"EventBridgeEnabled": false,
"KmsKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab
",
"PositionFiltering": "AccuracyBased
",
"Tags": {
"string" : "string"
}
}
- AWS CLI
-
AWS CLI コマンドを使用してトラッカーを作成するには
create-tracker
コマンドを実行します。
次の例では、AWS CLI を使用して ExampleTracker
というトラッカーを作成します。トラッカーリソースは、顧客データを暗号化するための AWS KMS 顧客管理キーにリンクされており、EventBridge での位置更新は有効化されていません。
aws location \
create-tracker \
--tracker-name "ExampleTracker
" \
--position-filtering "AccuracyBased
" \
--event-bridge-enabled false \
--kms-key-enable-geospatial-queries false \
--kms-key-id "1234abcd-12ab-34cd-56ef-1234567890ab
"
KmsKeyEnableGeospatialQueries
を有効にしたトラッカーを作成する
次の例では、KmsKeyEnableGeospatialQueries
パラメータが true に設定されています。これにより、Bounding Polygon Queries 機能を使用しながら、AWS KMS 顧客管理キーを使用してデータを暗号化できます。
Bounding Polygon Queries 機能の使用方法については、「デバイスの位置のリストを表示する」を参照してください
Bounding Polygon Queries 機能を使用する場合、デバイスの位置情報は AWS KMS 顧客管理キーでは暗号化されません。ただし、デバイスの正確な位置は引き続き顧客管理キーを使用して暗号化されます。
aws location \
create-tracker \
--tracker-name "ExampleTracker
" \
--position-filtering "AccuracyBased
" \
--event-bridge-enabled false \
--kms-key-enable-geospatial-queries true \
--kms-key-id "1234abcd-12ab-34cd-56ef-1234567890ab
"
トラッカーを作成した後 [トラッカーを編集] を選択すると、[説明]、[位置フィルター]、[EventBridge の設定] を編集できます。
リクエストを認証する
トラッカーリソースを作成し、ジオフェンスに対してデバイス位置の評価を始める準備ができたら、リクエストの認証方法を選択します。
-
サービスにアクセスする方法については、「Amazon Location Service へのアクセス」を参照してください。
-
認証されていないリクエストでデバイスの位置をパブリッシュしたい場合は、Amazon Cognito を使用するとよいでしょう。
例
以下の例では、AWS JavaScript SDK v3 と Amazon Location JavaScript 認証ヘルパー を利用して、認可に Amazon Cognito アイデンティティプールを使用する方法を示しています。
import { LocationClient, BatchUpdateDevicePositionCommand } from "@aws-sdk/client-location";
import { withIdentityPoolId } from "@aws/amazon-location-utilities-auth-helper";
// Unauthenticated identity pool you created
const identityPoolId = "us-east-1:1234abcd-5678-9012-abcd-sample-id
";
// Create an authentication helper instance using credentials from Cognito
const authHelper = await withIdentityPoolId(identityPoolId);
const client = new LocationClient({
region: "us-east-1
", // The region containing both the identity pool and tracker resource
...authHelper.getLocationClientConfig(), // Provides configuration required to make requests to Amazon Location
});
const input = {
TrackerName: "ExampleTracker
",
Updates: [
{
DeviceId: "ExampleDevice-1
",
Position: [-123.4567, 45.6789],
SampleTime: new Date("2020-10-02T19:09:07.327Z"),
},
{
DeviceId: "ExampleDevice-2
",
Position: [-123.123, 45.123],
SampleTime: new Date("2020-10-02T19:10:32Z"),
},
],
};
const command = new BatchUpdateDevicePositionCommand(input);
// Send device position updates
const response = await client.send(command);
トラッカーをデバイスの位置で更新する
デバイスを追跡するには、デバイスの位置の更新をトラッカーに送信します。これらのデバイス位置やデバイス位置履歴は、後でトラッカーリソースから取得できます。
位置の更新には、デバイス ID、タイムスタンプ、位置が含まれている必要があります。他にも、精度や、キーと値がペアとなったメタデータを最大 3 つまで含めることもできます。
トラッカーが 1 つ以上のジオフェンスコレクションにリンクされている場合、(トラッカーに指定したフィルタリングルールに従って) それらのジオフェンスに対して更新が評価されます。デバイスがジオフェンスエリアに出入りした際は、EventBridge でイベントを受信します。これらの ENTER
や EXIT
のイベントには、デバイス ID、タイムスタンプ、関連するメタデータなどの位置の更新詳細が含まれます。
デバイスの更新を送信するには、以下のいずれかの方法を使用してください。
- API
-
Amazon Location API を使用して位置更新を送信するには
Amazon Location Trackers API の BatchUpdateDevicePosition
オペレーションを使用してください。
次の例では、API リクエストを使用して ExampleDevice
のデバイス位置更新を、ExampleTracker
というトラッカーに送信します。
POST /tracking/v0/trackers/ExampleTracker
/positions
Content-type: application/json
{
"Updates": [
{
"DeviceId": "1",
"Position": [
-123.12245146162303, 49.27521118043802
],
"SampleTime": "2022-10-24T19:09:07.327Z",
"PositionProperties": {
"name" : "device1"
},
"Accuracy": {
"Horizontal": 10
}
},
{
"DeviceId": "2",
"Position": [
-123.1230104928471, 49.27752402723152
],
"SampleTime": "2022-10-02T19:09:07.327Z"
},
{
"DeviceId": "3",
"Position": [
-123.12325592118916, 49.27340530543111
],
"SampleTime": "2022-10-02T19:09:07.327Z"
},
{
"DeviceId": "4",
"Position": [
-123.11958813096311, 49.27774641063121
],
"SampleTime": "2022-10-02T19:09:07.327Z"
},
{
"DeviceId": "5",
"Position": [
-123.1277418058896, 49.2765989015285
],
"SampleTime": "2022-10-02T19:09:07.327Z"
},
{
"DeviceId": "6",
"Position": [
-123.11964267059481, 49.274188155916534
],
"SampleTime": "2022-10-02T19:09:07.327Z"
}
]
}
- 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"}}]'
トラッカーからデバイスの位置履歴を取得する
Amazon Location トラッカーリソースは、追跡対象のすべてのデバイスの位置履歴を 30 日間保持します。トラッカーリソースから、関連するすべてのメタデータを含むデバイスの位置履歴を取得できます。次の例では、AWS CLI、または Amazon Location API を使用しています。
- API
-
Amazon Location API を使用してトラッカーからデバイスの位置履歴を取得するには
Amazon Location Trackers API の GetDevicePositionHistory
オペレーションを使用してください。
次の例では、API URI リクエストを使用して、ExampleDevice
のデバイス位置履歴を ExampleTracker
というトラッカーから取得します。対象期間は、2020–10–02
の 19:05:07
(この時間を含む) から 19:20:07
(この時間を含まない) です。
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
コマンドを実行します。
次の例では、AWS CLI を使用して、ExampleDevice
のデバイス位置履歴を ExampleTracker
というトラッカーから取得します。対象期間は、2020–10–02
の 19:05:07
(この時間を含む) から 19:20:07
(この時間を含まない) です。
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
"
デバイスの位置のリストを表示する
AWS CLI または Amazon Location API から、ListDevicePositions API を使用して、トラッカーのデバイスの位置のリストを表示できます。ListDevicePositions API を呼び出すと、特定のトラッカーにリンクされているすべてのデバイスの最新の位置のリストが返されます。デフォルトでは、この API は特定のトラッカーの最新のデバイス位置を結果ページごとに 100 件返します。特定の地域内のデバイスのみを返したい場合は、FilterGeometry
パラメータを使用して Bounding Polygon Query を作成します。これで、ListDevicePositions を呼び出すと、ポリゴン内のデバイスのみが返されます。
ユーザー自身が管理する AWS KMS 顧客管理キーを使用してデータを暗号化する場合、Bounding Polygon Queries 機能はデフォルトで無効になります。この機能を使用すると、デバイスの位置情報は AWS KMS 顧客管理キーでは暗号化されないためです。ただし、デバイスの正確な位置は引き続き顧客管理キーを使用して暗号化されます。
Bounding Polygon Queries 機能の使用を選択することもできます。その場合は、トラッカーを作成または更新するときに KmsKeyEnableGeospatialQueries
パラメータを true に設定します。
- API
-
Amazon Location Trackers API の ListDevicePositions
オペレーションを使用してください。
以下の例は、オプションのパラメータ FilterGeometry
を使用して多角形エリア内のデバイス位置のリストを取得するための API リクエストです。この例では、Polygon
配列で定義されたエリア内に存在する 3 つのデバイス位置が返されます。
POST /tracking/v0/trackers/TrackerName
/list-positions HTTP/1.1
Content-type: application/json
{
"FilterGeometry": {
"Polygon": [
[
[
-123.12003339442259,
49.27425121147397
],
[
-123.1176984148229,
49.277063620879744
],
[
-123.12389509145294,
49.277954183760926
],
[
-123.12755921328647,
49.27554025235713
],
[
-123.12330236586217,
49.27211836076236
],
[
-123.12003339442259,
49.27425121147397
]
]
]
},
"MaxResults": 3,
"NextToken": "1234-5678-9012"
}
以下に、ListDevicePositions
のレスポンスの例を示します。
{
"Entries": [
{
"DeviceId": "1",
"SampleTime": "2022-10-24T19:09:07.327Z",
"Position": [
-123.12245146162303,
49.27521118043802
],
"Accuracy": {
"Horizontal": 10
},
"PositionProperties": {
"name": "device1"
}
},
{
"DeviceId": "3",
"SampleTime": "2022-10-02T19:09:07.327Z",
"Position": [
-123.12325592118916,
49.27340530543111
]
},
{
"DeviceId": "2",
"SampleTime": "2022-10-02T19:09:07.327Z",
"Position": [
-123.1230104928471,
49.27752402723152
]
}
],
"NextToken": "1234-5678-9012"
}
- CLI
-
list-trackers
コマンドを実行します。
以下は、多角形エリア内のデバイスのリストを取得するための AWS CLI の例です。
aws location list-device-positions TODO: add arguments add props for filter geo