Amazon Web Services ブログ

Amazon Location — マップと位置の認識をアプリケーションに追加

私たちは、マップ、位置認識、その他の位置ベースの機能をウェブやモバイルのアプリケーションに簡単かつ費用効果の高い方法で追加できるようにしたいと考えています。これまでこうした機能の追加は複雑で高くつくだけでなく、単一のプロバイダーのビジネスモデルやプログラミングモデルに縛られていました。

Amazon Location Service のご紹介
本日より、Amazon Location がプレビュー形式で利用可能になり、すぐに使用を開始できます。一般的な選択肢より安価な料金である、Amazon Location Service を使用すると、複数のプロバイダーが提供するマップやロケーションベースのサービスに、経済的かつ従量制でアクセスできます。

Amazon Location Service を使用すると、どこにいるかを認識し、それに応じて応答するアプリケーションを構築できます。マップの表示、住所の検証、ジオコーディングの実行 (住所の場所への変換)、パッケージやデバイスの移動の追跡などを行うことができます。ジオフェンスを簡単に設定し、追跡対象アイテムがジオフェンスエリアに出入りしたときに通知を受け取ることができます 。フルコントロールを維持しながら、マップ上に独自のデータをオーバーレイすることもできます。

Amazon Location Service には、 AWS マネジメントコンソールAWS コマンドラインインターフェイス (CLI) から、または一連の API 経由でアクセスできます。また、Mapbox GL Tangram などの既存のマップライブラリを使用することもできます。

Amazon Location に関するすべて
それでは、Amazon Location Service がお客様に提供するリソースの種類を見てみましょう。次に、アプリケーションでそれらを使用する方法について説明いたします。

マップAmazon Location Service では、パートナーからのデータを活用してマップを作成できます。EsriHERE Technologies が提供するマップとマップスタイルを選択できます。将来的には、これらのパートナーや他のパートナーからさらに多くのマップやスタイルが提供される可能性があります。マップを作成した後、GetMapTile 関数を使用して、タイル (最大 16 のズームレベルの 1 つ) を取得できます。これは直接行うのではなく、Mapbox GL、Tangram、または別のライブラリを使用します。

インデックスを配置 — Esri や Here が提供するインデックスから選択できます。インデックスは SearchPlaceIndexForPosition関数をサポートしています。この関数は、指定した位置に最も近い居住地や対象ポイント (POI とも呼ばれます) などの場所を返しますが、リバースジオコーディングを実行して位置 (座標) を読みやすい住所に変換することも行います。インデックスは SearchPlaceIndexForText 関数もサポートしています。この関数は、住所、名前、都市、地域などの自由形式のテキストを使用して、住所、企業、対象ポイントを検索します。

トラッカー –トラッカーは BatchUpdateDevicePosition 関数を介して 1 つまたは複数のデバイスから位置情報の更新を受信し、デバイスの現在の位置 (GetDevicePosition) や位置履歴 (GetDevicePositionHistory) を照会することができます。また、トラッカーをジオフェンスコレクションにリンクして、ジオフェンスに出入りする際のデバイスの監視を実装することもできます。

ジオフェンスコレクション — 各コレクションには、地理的境界を定義するジオフェンスのリストが含まれます。これは、私の近くにある公園を概説するジオフェンス (geojson.io で作成) です。

Amazon Location の動作
AWS マネジメントコンソールを使用して、Amazon Location を開始し、必要に応じて AWS コマンドラインインターフェイス (CLI) または API へ移動します。Amazon Location Service コンソールを開き、[Try it!] をクリックします。スターターリソースのセットを作成するか、左側のナビゲーションを開いて 1 つずつ作成することができます。1 つずつ移動し、[Maps] をクリックします。

次に、[Create map] をクリックして先へ進みます。

名前と説明を入力します。

次に、目的のマップを選択し、[Create map] をクリックします。

マップが作成され、すぐにアプリケーションに追加できるようになります。

これで、アプリケーションにマップを埋め込む準備が完了です。Amplify JavaScript SDK、Amplify Android SDK、Amplify iOS SDK、Tangram、Mapbox GL などのオプションがいくつかあります (各オプションの詳細については、デベロッパーガイドをお読みください) 。

次に、デバイスの位置を追跡して、指定された領域に出入りしたときに通知を受けられるようにします。geojson.io などの GeoJSON 編集ツールを使用して、ポリゴンで構築されるジオフェンスを作成し、結果のファイルを保存 (ダウンロード) します。

左側のナビゲーションで [Create geofence collection] をクリックし、ステップ 1 で GeoJSON ファイルを追加し、名前と説明を入力して [Next] をクリックします。

次に、トラッカーの名前と説明を入力し、[Next] をクリックします。今作成したジオフェンスのコレクションにリンクされます。

次のステップでは、トラッカーが Amazon EventBridge にイベントを送信し、CloudWatch Logs でモニタリングできるように調整します。設定をそのままにし、[Next] をクリックして続行します。

選択した内容をすべて確認し、[Finalize] をクリックして先に進みます。

これでリソースが作成、セットアップされ、準備が整いました。

これで、コードを書くか、CLI を使用してデバイスの位置を更新することができます。

$ aws location batch-update-device-position \
   --tracker-name MyTracker1 \
   --updates "DeviceId=Jeff1,Position=-122.33805,47.62748,SampleTime=2020-11-05T02:59:07+0000"

これを 1 回か 2 回行うと、デバイスの位置履歴を取得できます。

$ aws location get-device-position-history \
  -tracker-name MyTracker1 --device-id Jeff1
------------------------------------------------
|           GetDevicePositionHistory           |
+----------------------------------------------+
||               デバイスの位置              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T02:59:17.246Z  ||
||  SampleTime   |  2020-11-05T02:59:07Z      ||
|+---------------+----------------------------+|
|||                 位置                 |||
||+------------------------------------------+||
|||  -122.33805                              |||
|||  47.62748                                |||
||+------------------------------------------+||
||               デバイスの位置              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T03:02:08.002Z  ||
||  SampleTime   |  2020-11-05T03:01:29Z      ||
|+---------------+----------------------------+|
|||                 位置                 |||
||+------------------------------------------+||
|||  -122.43805                              |||
|||  47.52748                                |||
||+------------------------------------------+||

イベントを監視する Amazon EventBridge ルールを作成し、それを使用して必要な処理を実行できます。イベントは、デバイスがジオフェンスされた領域に出入りしたときに発行され、次のようになります。

{
  "version": "0",
  "id": "7cb6afa8-cbf0-e1d9-e585-fd5169025ee0",
  "detail-type": "Location Geofence Event",
  "source": "aws.geo",
  "account": "123456789012",
  "time": "2020-11-05T02:59:17.246Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:geo:us-east-1:123456789012:geofence-collection/MyGeoFences1",
    "arn:aws:geo:us-east-1:123456789012:tracker/MyTracker1"
  ],
  "detail": {
        "EventType": "ENTER",
        "GeofenceId": "LakeUnionPark",
        "DeviceId": "Jeff1",
        "SampleTime": "2020-11-05T02:59:07Z",
        "Position": [-122.33805, 47.52748]
  }
}

最後に、場所インデックスを作成して使用し、地理的オブジェクトを操作することができます。ここでは、ペースを変えるために CLI を使用します。インデックスを作成します。

$ aws location create-place-index \
  --index-name MyIndex1 --data-source Here

次に、それを照会して、その場所の近くにある住所と関心のあるポイントを見つけます。

$ aws location search-place-index-for-position --index-name MyIndex1 \
  --position "[-122.33805,47.62748]" --output json \
  |  jq .Results[].Place.Label
"Terry Ave N, Seattle, WA 98109, United States"
"900 Westlake Ave N, Seattle, WA 98109-3523, United States"
"851 Terry Ave N, Seattle, WA 98109-4348, United States"
"860 Terry Ave N, Seattle, WA 98109-4330, United States"
"Seattle Fireboat Duwamish, 860 Terry Ave N, Seattle, WA 98109-4330, United States"
"824 Terry Ave N, Seattle, WA 98109-4330, United States"
"9th Ave N, Seattle, WA 98109, United States"
...

また、テキストベースの検索を行うこともできます。

$ aws location search-place-index-for-text --index-name MyIndex1 \
  --text Coffee --bias-position "[-122.33805,47.62748]" \
  --output json | jq .Results[].Place.Label
"Mohai Cafe, 860 Terry Ave N, Seattle, WA 98109, United States"
"Starbucks, 1200 Westlake Ave N, Seattle, WA 98109, United States"
"Metropolitan Deli and Cafe, 903 Dexter Ave N, Seattle, WA 98109, United States"
"Top Pot Doughnuts, 590 Terry Ave N, Seattle, WA 98109, United States"
"Caffe Umbria, 1201 Westlake Ave N, Seattle, WA 98109, United States"
"Starbucks, 515 Westlake Ave N, Seattle, WA 98109, United States"
"Cafe 815 Mercer, 815 9th Ave N, Seattle, WA 98109, United States"
"Victrola Coffee Roasters, 500 Boren Ave N, Seattle, WA 98109, United States"
"Specialty's, 520 Terry Ave N, Seattle, WA 98109, United States"
...

どちらの検索にも他のオプションがあります。詳細については、「Geocoding, Reverse Geocoding, and Search」を参照してください。

知っておくべきこと
Amazon Location はプレビューとして本日開始され、すぐに使用できます。プレビュー中に、ルーティング用の API を追加する予定です。また、お客様からのフィードバックや機能に関するリクエストが到着した時点で対応できるよう最善を尽くします。

料金は使用量に基づいており、最初の評価期間が 3 か月間あるため、Amazon Location API を無料で何度も呼び出すことができます。評価期間後は、Amazon Location 料金ページに記載されている金額をお支払いいただきます。

Amazon Location は、米国東部 (バージニア北部)米国東部 (オハイオ)米国西部 (オレゴン)欧州 (アイルランド)、およびアジアパシフィック (東京) の各リージョンでご利用いただけます。

Jeff