2012-10-02 81 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