特定の都市の適切な境界ボックスを取得する必要があります。今のところ、それを行う方法はわかっていませんが、Google Maps APIgeocode
関数を使用しています。ただし、問題があります。
たとえば、アブダビを考えてみましょう。
コードは次のとおりです(python googlemapsパッケージを使用):
>>> d = gmaps.geocode('Abu Dhabi, AE')
>>> pp.pprint(d)
{ u'Placemark': [ { u'AddressDetails': { u'Accuracy': 4,
u'Country': { u'AdministrativeArea': { u'AdministrativeAreaName': u'Abu Dhabi',
u'Locality': { u'LocalityName': u'Abu Dhabi'}},
u'CountryName': u'United Arab Emirates',
u'CountryNameCode': u'AE'}},
u'ExtendedData': { u'LatLonBox': { u'east': 54.8789043,
u'north': 24.7912388,
u'south': 24.1412558,
u'west': 53.8544291}},
u'Point': { u'coordinates': [54.3666667, 24.4666667, 0]},
u'address': u'Abu Dhabi - United Arab Emirates',
u'id': u'p1'}],
u'Status': { u'code': 200, u'request': u'geocode'},
u'name': u'Abu Dhabi, AE'}
問題は、返されたLatLonBox
ものが大きすぎることです。その対角線の長さは 126 km を超えています。アブダビに敬意を表しますが、この都市はそれほど大きくないと思います。
興味深いことに、JavaScript API は 2 つのボックスを返します。 が「Abu Dhabi」results
で呼び出した結果であると仮定すると、次の 2 つのボックスがあります。google.maps.Geocoder.geocode
results[0].geometry.bounds = ((24.1776, 54.30012), (24.5413, 54.7751))
results[0].geometry.viewport = ((24.1413, 53.8544), (24.7912, 54.8789))
は、Web サービスAPIによってviewport
正確にLatLonBox
返されます。一方bounds
、 は、サイズと位置の両方の点ではるかに優れています。以下の画像は、両方のボックスを示しています。
最初は、python パッケージが最終結果から を省略しているのではないかと疑っていましたbounds
が、Google マップ Web サービスから返された json を調べると、Web サービスからbounds
ボックスが返されていないことがわかりました。結果を記述している Python 辞書は、返された json。
それで、私の質問は、Web サービス API を使用するときに適切な境界ボックスを取得するにはどうすればよいですか? または、まったく別の API がありますか? この種の情報を取得するために、Google以外のマップAPIを使用した経験のある人はいますか?
ありがとう。
編集
もう一つの興味深いひねり。巨大なバウンディング (またはビューポート) ボックスを持つ都市もあれば、小さなバウンディング ボックスを持つ都市もあります。たとえば、オーストラリアのアデレードの境界の直径はわずか 7 km で、もちろん小さすぎます。