Amazon Location Service のジオコーダを試してみた

はじめに

Amazon Location Service が6月に一般公開されました。
主な機能として以下の5つがあります。

  • 地図
  • ジオコーディング(住所や場所の名前を緯度経度に変換する)やリバースジオコーディング(緯度経度を住所に変換する)
  • 出発地から目的地までのルート計算
  • 位置情報デバイスのトラッキング
  • ジオフェンシング(設定した領域への出入りを検出する)

このうちのジオコーディングを試してみました。

ジオコーディングを AWS CLI から利用する

今回は AWS CLI からジオコーダを呼び出します。Location Service は新しいサービスなので、aws コマンドがインストール済みの場合は aws help で Location がサポートされているバージョンかどうかを確認し、サポートされていない場合は最新版にアップデートしておきます。

Place Index 作成

Place Index はジオコーダやリバースジオコーダを利用する際に必要となるリソースです。いくつかの設定項目を指定して Place Index を作成しておき、その Place Index を起点にジオコーダを呼び出す仕組みになっています。

以下のコマンドで、データソースとして Esri、料金プランとしてリクエスト数ベースを利用する Place Index を ExamplePlaceIndex という名前で呼び出せるようになります。

$ aws location \
>   create-place-index \
>   --data-source "Esri" \
>   --description "for investigation Esri" \
>   --index-name "ExamplePlaceIndex" \
>   --pricing-plan "RequestBasedUsage"

{
    "CreateTime": "2021-06-12T13:46:09.170000+00:00",
    "IndexArn": "arn:aws:geo:us-west-2:495463288701:place-index/ExamplePlaceIndex",
    "IndexName": "ExamplePlaceIndex"
}

Place Index 確認

以下のコマンドで、作成した Place Index の内容を確認できます。

$ aws location list-place-indexes
{
    "Entries": [
        {
            "CreateTime": "2021-06-12T13:46:09.170000+00:00",
            "DataSource": "Esri",
            "Description": "for investigation Esri",
            "IndexName": "ExamplePlaceIndex",
            "PricingPlan": "RequestBasedUsage",
            "UpdateTime": "2021-06-12T13:46:09.170000+00:00"
        }
    ]
}

ジオコーディング

ジオコーダを利用するときは search-place-index-for-text というサブコマンドを使います。

$ aws location search-place-index-for-text \
--index-name ExamplePlaceIndex \
--text "大阪市中央区" \
--max-results 5
{
    "Results": [
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.50988413000005,
                        34.681143990000066
                    ]
                },
                "Label": "大阪府大阪市中央区",
                "Municipality": "中央区",
                "Region": "大阪府"
            }
        }
    ],
    "Summary": {
        "DataSource": "Esri",
        "MaxResults": 10,
        "ResultBBox": [
            135.50988413000005,
            34.681143990000066,
            135.50988413000005,
            34.681143990000066
        ],
        "Text": "大阪市中央区"
    }
}

「大阪市中央区」の緯度経度が(34.681143990000066,135.50988413000005)であるという応答です。この座標を OpenStreetMap で表示すると、確かに大阪市中央区役所であることが確認できます。
https://www.openstreetmap.org/#map=19/34.681143990000066/135.50988413000005/

データソースとして HERE を使う Place Index 作成

Amazon Location Service ではデータソースとして EsriHERE が利用できます。ここではデータソースとして HERE を指定して、Esri のときとどのような違いがあるかを調べてみます。

$ aws location \
  create-place-index \
  --data-source "Here" \
  --description "for investigation HERE" \
  --index-name "ExamplePlaceIndexHERE" \
  --pricing-plan "RequestBasedUsage"
$ aws location list-place-indexes
{
    "Entries": [
        {
            "CreateTime": "2021-06-12T13:46:09.170000+00:00",
            "DataSource": "Esri",
            "Description": "for investigation Esri",
            "IndexName": "ExamplePlaceIndex",
            "PricingPlan": "RequestBasedUsage",
            "UpdateTime": "2021-06-12T13:46:09.170000+00:00"
        },
        {
            "CreateTime": "2021-06-12T14:12:51.610000+00:00",
            "DataSource": "Here",
            "Description": "for investigation HERE",
            "IndexName": "ExamplePlaceIndexHERE",
            "PricingPlan": "RequestBasedUsage",
            "UpdateTime": "2021-06-12T14:12:51.610000+00:00"
        }
    ]
}

HERE でジオコーディング

Esri のときと同じく「大阪市中央区」でジオコーディングします。

$ aws location search-place-index-for-text \
--index-name ExamplePlaceIndexHERE \
--text "大阪市中央区" \
--max-results 5 
{
    "Results": [
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.50988,
                        34.68114
                    ]
                },
                "Label": "大阪府大阪市中央区",
                "Municipality": "大阪市",
                "Neighborhood": "中央区",
                "Region": "大阪府"
            }
        },
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.5014,
                        34.66891
                    ]
                },
                "Label": "大阪府大阪市中央区道頓堀1丁目6ミナミ (難波)",
                "Municipality": "大阪市",
                "Neighborhood": "中央区",
                "Region": "大阪府"
            }
        },
        {
            "Place": {
                "AddressNumber": "27",
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.50398,
                        34.69353
                    ]
                },
                "Label": "大阪府大阪市北区中之島1丁目1-27大阪市中央公会堂",
                "Municipality": "大阪市",
                "Neighborhood": "北区",
                "Region": "大阪府"
            }
        },
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.48485,
                        34.69745
                    ]
                },
                "Label": "大阪府大阪市福島区福島7丁目4ジェイホッパーズ大阪ゲストハウス",
                "Municipality": "大阪市",
                "Neighborhood": "福島区",
                "Region": "大阪府"
            }
        },
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        135.50791,
                        34.68903
                    ]
                },
                "Label": "大阪府大阪市中央区伏見町1丁目1ホテルブライトンシティ大阪北浜",
                "Municipality": "大阪市",
                "Neighborhood": "中央区",
                "Region": "大阪府"
            }
        }
    ],
    "Summary": {
        "DataSource": "Here",
        "MaxResults": 5,
        "ResultBBox": [
            135.48485,
            34.66891,
            135.50988,
            34.69745
        ],
        "Text": "大阪市中央区"
    }
}

sri の場合は max-results を 5 で指定していても応答は1件だけでしたが、HERE の場合は 住所が大阪市中央区でないPOIでもアグレッシブに応答しており、ジオコーダとしての性格がかなり異なることが分かります。

Related Post