1

特定の都市の適切な境界ボックスを取得する必要があります。今のところ、それを行う方法はわかっていませんが、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 で、もちろん小さすぎます。 ここに画像の説明を入力

4

1 に答える 1

0

MySQL をバックエンドで使用し、その空間データ用拡張機能を使用できます。

封筒(g)

ジオメトリ値 gの最小境界四角形(MBR) を返します。結果は Polygon 値として返されます。

地理検索プロジェクトで MySQL5.6 を使用しましたが、後戻りすることはありませんでした。Geo を完全にサポートするには、MySQL 5.6 以降を使用していることを確認してください。

于 2014-09-09T21:06:29.733 に答える