2012-04-20 13 views
1

任意の都市に対してまともなバウンディングボックスを取得する必要があります。今のところ、私はそれを行う方法は知っているが、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は、他の一方で、両方のサイズと位置の面で非常に良く見える - 下の画像は、両方のボックスを描いている:まず enter image description here

、私は最終的にboundsを省略するためのpythonパッケージを疑われています結果は、GoogleマップのWebサービスから返されたjsonを調べると、boundsというボックスはWebサービスから返されないことがわかります。結果を記述するPython辞書は、返されたjsonの正確なミラーです。

私の質問は、WebサービスAPIを使用する際に、どうやってまともなバウンディングボックスを得ることができるのですか?あるいは、代替のAPIがすべて存在するのでしょうか?誰もこの種の情報を得るために、非GoogleマップAPIを使った経験がありますか?

ありがとうございました。

EDIT

もう一つの興味深いねじれ。一部の都市では、巨大な境界(またはビューポート)ボックスがありますが、一部の都市では小さなものがあります。たとえば、アデレード境界の直径AUはわずか7kmですが、それは小さすぎます。 enter image description here

+0

解決方法を見つけましたか? – Dieter

+0

いいえ、私はサーバーがデータを計算する方法を変更したので、ジオ・サービスに依存しないようにしました。 – mark

+0

私は同じ問題を抱えています。ユーザーが生成しない限り、問題をどのように解決するかについて詳しく解説できます:) – Birla

答えて

0

バックエンドとその拡張機能の拡張機能でMySQLを使用できます。

Envelope(g)

ジオメトリ値gため最小外接矩形(MBR)を返します。 結果はポリゴン値として返されます。

私たちはジオ検索プロジェクトでMySQL5.6を使用しました。完全なGeoサポートのためにMySQL 5.6以降を使用していることを確認してください。

関連する問題