この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
先日、Amazon Location Service がGAとなりました!
すでにいくつかDevelopersIO内にもエントリは上がっていますが、個人的に非常に興味のある分野のサービスですので色々試してみたいと思っています。
そこで今回は、boto3を利用してジオコーディング(Geocoding)を試してみたいと思います!
前提
試した環境は、以下のような環境となります。
- Python 3.7
boto3
の1.17.86
がインストール済みboto3
でアクセスできるように、~/.aws/config
および~/.aws/credentials
は設定済み
また、前提条件として下記のドキュメントに記載のとおり「place index」が作成されている必要があります。今回は検証環境に既にexplore.place
という名前の「place index」存在していたので、これを利用しています。
認証に関しては、boto3を利用するので特に準備はしていません。
boto3のAPIについては、こちらのドキュメントを参照しつつ実装してみます。
Geocodingを試してみる
では、早速ためしてみましょう。簡単に以下のようなコードで試してみます。
検索文字列のText
にクラスメソッドの本社である神田佐久間町1-11
を指定して、座標が取得できるか試してみます。
search_place_sample.py
import boto3
import json
location = boto3.client('location')
res = location.search_place_index_for_text(
IndexName='explore.place',
MaxResults=5,
Text='神田佐久間町1-11'
)
print(json.dumps(res, ensure_ascii=False, indent=2))
$ python search_place_sample.py
{
"ResponseMetadata": {
"RequestId": "6552e6b5-7d98-4f78-b658-d47f444acd92",
"HTTPStatusCode": 200,
"HTTPHeaders": {
(snip...)
},
"RetryAttempts": 0
},
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
139.77474374686125,
35.69723703232465
]
},
"Label": "東京都千代田区神田佐久間町1-11",
"Neighborhood": "1",
"PostalCode": "1010025",
"Region": "東京都"
}
}
],
"Summary": {
"DataSource": "Esri",
"MaxResults": 5,
"ResultBBox": [
139.77474374686125,
35.69723703232465,
139.77474374686125,
35.69723703232465
],
"Text": "神田佐久間町1-11"
}
}
ばっちり取得できましたね!
Label
には東京都千代田区神田佐久間町1-11
、PostalCode
には1010025
が返ってきています。
座標もみてみましょう。以下のようなURLでOpenStreetMapにアクセスするとマーカーを表示しつつ該当の地図が表示されます。
- https://www.openstreetmap.org/?mlat=[緯度]&mlon=[経度]#map=18/[緯度]/[経度]
今回はPoint
として139.77474374686125,35.69723703232465
が取得できたので、以下のとおりとなります。
アクセスすると、以下のように想定どおりクラスメソッド本社の場所になっています!
色々なテキストで試してみる
せっかくなので、Text
に色々指定して試してみました。
「クラスメソッド」を指定
以下のような結果となっており、うまく検索できていないようです。
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
137.28185095000003,
34.90212791000005
]
},
"Label": "愛知県岡崎市鶇巣町クラ",
"Neighborhood": "クラ",
"Region": "愛知県"
}
}
],
「都庁」を指定
Label
はやや想定外ですが、座標は都庁を示した座標が返ってきていますね。
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
139.69286633600007,
35.690039874000036
]
},
"Label": "東京都新宿区都庁",
"Region": "東京都"
}
},
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
139.6917758840001,
35.68953794000004
]
},
"Label": "東京都新宿区都庁",
"Region": "東京都"
}
}
],
「皇居」を指定
こちらもLabel
がやや想定外ですが、座標はちゃんと皇居の座標です。
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
139.75286293500005,
35.684945549000076
]
},
"Label": "東京都千代田区皇居",
"Region": "東京都"
}
},
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
139.75044184500007,
35.68358604800005
]
},
"Label": "東京都千代田区皇居",
"Region": "東京都"
}
}
],
まとめ
以上、Amazon Location Service の Geocoding を試してみました!
boto3経由で簡単にGeocodingができるのはとても素敵ですね。「Place index」によってGeocodingの精度も変わってきそうなので今後更に豊富な情報(建物名など)による検索もカバーされていくと、より使いやすくなりそうです。
どなたかのお役に立てば幸いです。それでは!