この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
いわさです。
先月、Amazon Location Serviceのジオコーディング/逆ジオコーディングで優先言語をインプットパラメータとして指定出来るようになったことを紹介させて頂きました。
上記アップデートのタイミングで優先言語以外に、検索結果のパラメータが4つ追加されていますので紹介したいと思います。
これらのパラメータは、検索結果を取得後にアプリケーション側でフィルタリングを行うために利用することが可能です。
Distance
インプットで基準となる緯度経度を指定している場合に、その位置から検索結果の場所がどれだけ離れているかをメートルで取得することが出来ます。
ここでいう基準となる緯度経度はBiasPosition
などです。
[cloudshell-user@ip-10-0-12-155 ~]$ aws location search-place-index-for-text --index-name explore.place --text "札幌" --max-results 3 --bias-position [141.35665,43.06244]
{
"Results": [
{
"Distance": 1518.5839426972511,
"Place": {
...
},
"Relevance": 1
},
{
"Distance": 4028.915064697863,
"Place": {
...
},
"Relevance": 1
},
{
"Distance": 5991.967870887138,
"Place": {
...
},
"Relevance": 1
}
],
"Summary": {
"BiasPosition": [
141.35665,
43.06244
],
"DataSource": "Esri",
"MaxResults": 3,
"ResultBBox": [
141.36628249000012,
43.050754195000025,
141.42694082800006,
43.094976673000076
],
"Text": "札幌"
}
}
なお、基準となる情報(BiasPosition
)が無い場合は、距離(Distance
)は出力されません。
[cloudshell-user@ip-10-0-12-155 ~]$ aws location search-place-index-for-text --index-name explore.place --text "札幌" --max-results 3 --language en
{
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
141.37835122600006,
43.094976673000076
]
},
"Interpolated": false,
"Label": "Kindergarten, Higashi, Sapporo, Hokkaido, JPN",
"Municipality": "Higashi",
"Region": "Hokkaido"
},
"Relevance": 1
},
...
],
"Summary": {
"DataSource": "Esri",
"Language": "en",
"MaxResults": 3,
"ResultBBox": [
141.36628249000012,
43.050754195000025,
141.42694082800006,
43.094976673000076
],
"Text": "札幌"
}
}
Interpolated
Interpolatedは、結果が補間された情報かどうかを示す値です。
通常、データプロバイダーが場所を見つけた場合はFalse
になります。
ここでいうデータプロバイダーとはEsriやHEREなどのパートナーのことを指します。
私のほうで試した限りだと、全ての検索結果がFalseになり、曖昧な情報や存在しない情報量だった場合は逆に検索結果に出てきませんでした。
InterpolatedがTrue
になる条件は「各結果アドレスが既知の位置に基づいて推定されるか、または既知の位置自体に基づいて推定されるか」とされています。
Place - Amazon Location Service Places
Relevance
検索の入力情報に対する、結果の関連性スコアを示します。
現在、このパラメータはEsriでのみ出力されます。
関心のある場所またはポイントを検索している顧客に対して関連性スコアが返され、返された結果が元の検索テキストとどの程度一致しているかが示されます。
[cloudshell-user@ip-10-0-12-155 ~]$ aws location search-place-index-for-text --index-name explore.place --text "北海 中央"
{
"Results": [
{
"Place": {
"Country": "CHN",
"Geometry": {
"Point": [
109.33533,
21.673477
]
},
"Interpolated": false,
"Label": "广西壮族自治区北海市",
"Municipality": "北海市",
"Region": "广西壮族自治区"
},
"Relevance": 1
},
{
"Place": {
"Geometry": {
"Point": [
-1.0623349999999618,
57.029930543000035
]
},
"Interpolated": false,
"Label": "北海"
},
"Relevance": 0.7
},
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
144.2589581730001,
44.02122458500003
]
},
"Interpolated": false,
"Label": "北海道網走市北海",
"Region": "北海道"
},
"Relevance": 0.7
}
],
"Summary": {
"DataSource": "Esri",
"MaxResults": 50,
"ResultBBox": [
-1.0623349999999618,
21.673477,
144.2589581730001,
57.029930543000035
],
"Text": "北海 中央"
}
}
TimeZone
タイムゾーンはプレイスが配置されているタイムゾーンを示します。
現在、このパラメータはHEREを使用した場合にのみ出力されます。
タイムゾーン名とあわせてオフセットを取得することが可能です。
オフセットはUTCからの秒単位のオフセットとなります。
日本の地点であればタイムゾーンがAsia/Tokyoでオフセットは32400秒(+9時間)という結果となります。
[cloudshell-user@ip-10-0-12-155 ~]$ aws location search-place-index-for-text --index-name iwasa.here --max-result 3 --text "桑園"
{
"Results": [
{
"Place": {
"Country": "JPN",
"Geometry": {
"Point": [
137.16727,
34.95523
]
},
"Interpolated": false,
"Label": "〒444-0043 愛知県岡崎市唐沢町1丁目20桑園",
"Municipality": "岡崎市",
"PostalCode": "444-0043",
"Region": "愛知県",
"TimeZone": {
"Name": "Asia/Tokyo",
"Offset": 32400
}
}
},
...
[cloudshell-user@ip-10-0-12-155 ~]$ aws location search-place-index-for-text --index-name iwasa.here --max-result 3 --text "Los Angeles"
{
"Results": [
{
"Place": {
"Country": "USA",
"Geometry": {
"Point": [
-118.24545,
34.05357
]
},
"Interpolated": false,
"Label": "Los Angeles, CA, United States",
"Municipality": "Los Angeles",
"PostalCode": "90012",
"Region": "California",
"SubRegion": "Los Angeles",
"TimeZone": {
"Name": "America/Los_Angeles",
"Offset": -28800
}
}
},
まとめ
上記4つの追加パラメータを用いて、アプリケーション側では一定の閾値を用いて結果をフィルタリングしたり、得られたタイムゾーン情報を考慮した上での現地時間での情報表示を行うなど様々な使い方が想定されています。
こうしてみるとデータプロバイダーによってデータ構造も取得結果も大きく違うので、互換性を保ちながらどちらのプロバイダーも取り扱うようなアプリケーションの作り方は難しそうですね。
Interpolated
が今回動作検証で結果を得られなかったので、取得条件例をご存知の方いましたら是非教えてください。