【问题标题】:How to get coordinates of address from Python如何从 Python 获取地址坐标
【发布时间】:2019-08-29 21:03:09
【问题描述】:

我需要将地址地理编码为纬度、经度对以显示在 Google 地图上,但我需要在 Django 中执行此服务器端。我只能找到对 Javascript V3 API 的引用。我如何从 Python 中做到这一点?

【问题讨论】:

    标签: python django google-maps


    【解决方案1】:

    我强烈建议使用geopy。会返回经纬度,之后可以在Google JS客户端中使用。

    >>> from geopy.geocoders import Nominatim
    >>> geolocator = Nominatim()
    >>> location = geolocator.geocode("175 5th Avenue NYC")
    >>> print(location.address)
    Flatiron Building, 175, 5th Avenue, Flatiron, New York, NYC, New York, ...
    >>> print((location.latitude, location.longitude))
    (40.7410861, -73.9896297241625)
    

    此外,您可以通过将GoogleV3 类用作地理定位器来明确定义您想要使用 Google 服务

    >>> from geopy.geocoders import GoogleV3
    >>> geolocator = GoogleV3()
    

    【讨论】:

      【解决方案2】:

      我建议使用Py-Googlemaps。使用很简单:

      from googlemaps import GoogleMaps
      gmaps = GoogleMaps(API_KEY)
      lat, lng = gmaps.address_to_latlng(address)
      

      编辑:如有必要,通过sudo easy_install googlemaps 安装Py-Googlemaps

      【讨论】:

      • 是否有可能获得与此库一起使用的 API 密钥?我生成了一个 Javascript v3 API 密钥,但它似乎不起作用。
      • @powerj1984 我在尝试访问您的链接时收到恶意软件警告,这是正常现象还是我应该担心?
      • 当我发布链接时,没有任何恶意软件警告。不知道现在发生了什么。
      【解决方案3】:

      Google 数据有一个 API for Maps 有一个 REST-ful API - 他们也已经围绕它构建了一个 Python library

      【讨论】:

        【解决方案4】:

        这是适用于 Google Maps API v3 的代码(基于 this answer):

        import urllib
        import simplejson
        
        googleGeocodeUrl = 'http://maps.googleapis.com/maps/api/geocode/json?'
        
        def get_coordinates(query, from_sensor=False):
            query = query.encode('utf-8')
            params = {
                'address': query,
                'sensor': "true" if from_sensor else "false"
            }
            url = googleGeocodeUrl + urllib.urlencode(params)
            json_response = urllib.urlopen(url)
            response = simplejson.loads(json_response.read())
            if response['results']:
                location = response['results'][0]['geometry']['location']
                latitude, longitude = location['lat'], location['lng']
                print query, latitude, longitude
            else:
                latitude, longitude = None, None
                print query, "<no results>"
            return latitude, longitude
        

        请参阅official documentation 了解完整的参数列表和其他信息。

        【讨论】:

        • 这不再起作用了,因为 google 需要一个个人 API 密钥才能工作:g.co/dev/maps-no-account
        • @skjerns 感谢您的更新!如果它很容易修复,请随时更新答案
        【解决方案5】:

        Python 包googlemaps 似乎非常能够进行地理编码和反向地理编码。

        最新版本的 googlemaps 包在:https://pypi.python.org/pypi/googlemaps

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-26
          • 1970-01-01
          • 1970-01-01
          • 2020-10-05
          • 2012-12-05
          • 2020-01-16
          相关资源
          最近更新 更多