【问题标题】:How to geocode addresses on the server如何在服务器上对地址进行地理编码
【发布时间】:2012-09-23 17:36:20
【问题描述】:

我正在使用 python 使用 Google App Engine 编写一个应用程序,我正在将一个大型维基百科列表转换为电子表格,然后将列表行输入到 Locations 中。例如: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]

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

【问题讨论】:

    标签: python geocoding google-geocoding-api


    【解决方案1】:

    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

    【讨论】:

    • 我最近使用geopyPlone 进行了地理编码集成。这是integration code,可以作为示例,用于错误处理和缓存策略。
    • 太棒了,这正是我所需要的。当多个条目弹出时,我只是添加了我所做的。你认为这是最好的处理方式吗?
    【解决方案2】:

    Google 地理编码不需要任何密钥即可使用。

    可以找到有关最新版本的所有信息:

    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 完成的。如果您只是对一个静态的 nc 公园列表进行地理编码,那么它为什么会受到速率限制?

    【讨论】:

    • 因为有一个像geopy 这样的库可以完成所有这些工作,所以您不应该直接使用 JSON API 并手动构建 URL。它很容易出现引用错误,并且有一些奇怪的怪癖也需要注意。例如non-english character handlingpercent encoding
    • 我同意@LukasGraf 所说的一切,但想说明的是,在服务器端进行地理编码请求是非常可能且非常容易的,仅此而已
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多