2012-04-24 16 views
0

考慮:如何使用某些Web服務檢查地理點是否屬於某個城市?

  • 一個城市
  • 一個GeoPoint

問題:確定給定的GeoPoint是否屬於這個城市。

我目前的解決方案很簡單:

  1. 做反向地理編碼(我使用Python googlemaps包)。這產生結果字典。
  2. 檢查結果[ '標'] [0] [ 'AddressDetails']尋找處所名稱關鍵字。
  3. 給定的GeoPoint被認爲是在城市裏面,如果發現處所名稱等於城市的名稱。

到目前爲止好。即使它不是最好的算法,它肯定是最簡單的。但是,有問題。舉例如下:

  • 英國阿伯丁。
  • LAT = 57.14369,LNG = -2.22314

GoogleMaps.reverse_geocode(57.14369, -2.22314)產生以下結果:

{ u'Placemark': [ { u'AddressDetails': { u'Accuracy': 6, 
             u'Country': { u'CountryName': u'UK', 
                 u'CountryNameCode': u'GB', 
                 u'Thoroughfare': { u'ThoroughfareName': u'A944'}}}, 
        u'ExtendedData': { u'LatLonBox': { u'east': -2.2200414, 
                 u'north': 57.1480762, 
                 u'south': 57.1453783, 
                 u'west': -2.2239393}}, 
        u'Point': { u'coordinates': [-2.221984, 57.1467683, 0]}, 
        u'address': u'A944, Aberdeen, Aberdeen City AB15, UK', 
        u'id': u'p1'}], 
    u'_id': 7635459717214061L, 
    u'loc': [-2.2231, 57.1437]} 

的問題是,該格式的地址(A944, Aberdeen, Aberdeen City AB15, UK)沒有破碎成細節 - 返回的AddressDetails本質上是無用的。

所以,它看起來像一個必須手動解析返回address,這似乎是在一般情況下,一個真正的PITA。

我想知道其他人是如何解決這個問題。使用谷歌地圖Web服務API不是必需的。

謝謝。

回答

1

的反向地理編碼Web服務http://maps.googleapis.com/maps/api/geocode/json?latlng=57.14369,-2.22314&sensor=false

產生更多的數據比你從Python包發佈,包括

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "A944", 
       "short_name" : "A944", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Aberdeen City", 
       "short_name" : "Aberdeen City", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
... 

這似乎符合這個要求。你會得到「阿伯丁市」。

+0

嗯,我還沒有發明出來。這是谷歌地圖Python包返回。它也沒有發明它。我可以附加相應的HTTP請求和響應。我會嘗試按照您的建議使用json端點。 – mark 2012-04-24 12:02:15

+0

@馬克:我並不是在暗示你只是簡單地發明了它,而該Python包沒有返回的一切,你可以得到使用WebService。對不起,我應該更清楚一點。 – 2012-04-24 12:09:12

+0

python包返回它在響應中獲得的所有內容 - 我已經檢查過它。沒有任何信息被隱瞞。我認爲這個服務有兩個端點,python googlemaps使用了舊的端點。 – mark 2012-04-24 12:22:23

相關問題