任意の都市に対してまともなバウンディングボックスを取得する必要があります。今のところ、私はそれを行う方法は知っているが、GoogleマップAPI geocode
機能を介して。しかし、問題があります。GoogleマップWebサービス/ JavaScript API - バウンディングボックスの問題
例えば、アブダビを考えてみましょう。ここで
は(の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キロです。アブダビを尊重して、私は都市がそれほど大きいとは思わない。
興味深いことに、JavaScript APIは2つのボックスを返します。 viewport
は、WebサービスAPIによって返された正確LatLonBox
ある
results[0].geometry.bounds = ((24.1776, 54.30012), (24.5413, 54.7751))
results[0].geometry.viewport = ((24.1413, 53.8544), (24.7912, 54.8789))
:results
は「アブダビにgoogle.maps.Geocoder.geocode
を呼び出した結果であると仮定すると、我々は2つのボックスを持っています。 bounds
は、他の一方で、両方のサイズと位置の面で非常に良く見える - 下の画像は、両方のボックスを描いている:まず
、私は最終的にbounds
を省略するためのpythonパッケージを疑われています結果は、GoogleマップのWebサービスから返されたjsonを調べると、bounds
というボックスはWebサービスから返されないことがわかります。結果を記述するPython辞書は、返されたjsonの正確なミラーです。
私の質問は、WebサービスAPIを使用する際に、どうやってまともなバウンディングボックスを得ることができるのですか?あるいは、代替のAPIがすべて存在するのでしょうか?誰もこの種の情報を得るために、非GoogleマップAPIを使った経験がありますか?
ありがとうございました。
EDIT
もう一つの興味深いねじれ。一部の都市では、巨大な境界(またはビューポート)ボックスがありますが、一部の都市では小さなものがあります。たとえば、アデレード境界の直径AUはわずか7kmですが、それは小さすぎます。
解決方法を見つけましたか? – Dieter
いいえ、私はサーバーがデータを計算する方法を変更したので、ジオ・サービスに依存しないようにしました。 – mark
私は同じ問題を抱えています。ユーザーが生成しない限り、問題をどのように解決するかについて詳しく解説できます:) – Birla