2012-10-02 101 views
2

我正在使用python編寫帶有Google App Engine的應用程序,並將大型維基百科列表轉換爲電子表格,然後將列表行輸入到位置。例如:http://en.wikipedia.org/wiki/List_of_North_Carolina_state_parks我需要將每個公園的名字變成一個地址,我想他們不會是確切的,但只要他們幾乎是正確的,我就可以。如何在服務器上對地址進行地址解析

有什麼辦法可以做到這一點在服務器端使用python?我知道谷歌的地理編碼服務,但它都是用JavaScript完成的,並且速度有限。

有沒有什麼服務可以做到這一點?

更新: geopy正是我一直在尋找的。我想知道處理多個結果的最佳方法是什麼。這是我的嘗試:

 try: 
      place, (lat, lng) = g.geocode(title+", North Carolina") 
     except ValueError: 
      geocodespot = g.geocode(title+", North Carolina", exactly_one=False) 
      place, (lat, lng) = geocodespot[0] 

它工作得很好,但我想知道是否有更好的想法。

回答

4

還有geopy library

示例(從getting started page):

from geopy import geocoders 

g = geocoders.Google() 
place, (lat, lng) = g.geocode("10900 Euclid Ave in Cleveland") 
print "%s: %.5f, %.5f" % (place, lat, lng) 
 
    10900 Euclid Ave, Cleveland, OH 44106, USA: 41.50489, -81.61027 
+0

我最近使用'geopy'對[Plone](http://plone.org/)進行了地理編碼整合。下面是[集成代碼](https://github.com/4teamwork/ftw.geo/blob/master/ftw/geo/handlers.py),可以作爲一個例子,以及錯誤處理和緩存策略。 –

+0

很棒,這正是我所需要的。當我彈出多個條目時,我只是添加了我所做的。你認爲這是處理它的最好方法嗎? – clifgray

1

谷歌的地理編碼不需要任何鍵使用。

有關最新版本的所有信息,可以發現:

https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding

所有你需要做的就是讓一個請求:

(例如) http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

然後使用urllib

import urllib 
// pull lat and lng from your parks database and construct a url like: 
url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false' 

resp = urllib.urlopen(url) 
resp.read() // json string convert to python dict 

它是速率有限,但它是一項免費服務。這當然不是全部用javascript完成的。如果您只是對靜態公園的靜態列表進行地理編碼,它爲什麼會受到限制?

+1

因爲像'geopy'這樣的庫可以完成所有這些工作,所以您不應該直接使用JSON API並手動構建URL。這是引用錯誤容易發生,並有一些奇怪的怪癖太尋找。例如[非英文字符處理](http://stackoverflow.com/questions/12625745/)和[百分號編碼](http://stackoverflow.com/questions/12114853/) –

+0

我同意你說的一切@ LukasGraf但想要說明,製作地理編碼請求服務器端是非常可能且非常容易的, – dm03514