Python 如何从Latitude&;获取地址;Django GeoIP中的经度?

Python 如何从Latitude&;获取地址;Django GeoIP中的经度?,python,django,geolocation,Python,Django,Geolocation,在他们的API中,我看不到任何东西可以做到这一点: 或者我应该使用谷歌API进行反向地理编码吗?您可以使用地图API。我已经包含了一个片段,我用它来计算马拉松起点,并使用Postgis和Django将其转换为一个点域。这会让你上路的 import requests def geocode(data): url_list = [] for item in data: address = ('%s+%s' % (item.city, item.country)).

在他们的API中,我看不到任何东西可以做到这一点:


或者我应该使用谷歌API进行反向地理编码吗?

您可以使用地图API。我已经包含了一个片段,我用它来计算马拉松起点,并使用Postgis和Django将其转换为一个点域。这会让你上路的

import requests

def geocode(data):
    url_list = []
    for item in data:
        address = ('%s+%s' % (item.city, item.country)).replace(' ', '+')
        url = 'http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false' % address
        url_list.append([item.pk, url])

    json_results = []
    for url in url_list:
        r = requests.get(url[1])
        json_results.append([url[0], r.json])

    result_list = []
    for result in json_results:
        if result[1]['status'] == 'OK':
            lat = float(result[1]['results'][0]['geometry']['location']['lat'])
            lng = float(result[1]['results'][0]['geometry']['location']['lng'])
            marathon = Marathon.objects.get(pk=result[0])
            marathon.point = GEOSGeometry('POINT(%s %s)' % (lng, lat))
            marathon.save()

    return result_list

解决方案-调用此URL并解析其JSON

http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=false

使用geopy,它可以处理多个地理编码器,包括googlev3

from geopy.geocoders import GoogleV3
geolocator = GoogleV3()
location = geolocator.reverse("52.509669, 13.376294")
print(location.address)
>>> Potsdamer Platz, Mitte, Berlin, 10117, Deutschland, European Union
使用pip安装:

pip install geopy

可以在以下网站上找到信息:

@rawshix-answer对于django用户来说似乎很聪明。 但是请注意,
geologitor.reverse(query)
返回的位置是一个列表,而不是
location
对象;因此,试图从中检索属性
address
将导致错误

通常,该列表中的第一项具有最近的地址信息。所以你可以简单地做:

 location = location[0]
 address = location.address
此外,您可以使用元组,而不是将字符串纬度和经度传递给reverse方法,元组必须是
经度之前的
纬度
。你可以做:

 from geopy.geocoders import GoogleV3()
 geocoder = GoogleV3()
 location_list = geocoder.reverse((latitude, longitude))
 location = location_list[0]
 address = location.address

干杯,但我是在从Lat&Long(作为输入)获得“地址”(作为输出)之后。你的例子与我想要的正好相反。我使用了类似的方法,而不是地址,使用lat-long值并检查传入的json结果。您将在其中找到地址。我使用了相同的代码,但使用print(location.address)时得到了一个错误回溯(最近一次调用):文件“”,第1行,在AttributeError中:“list”对象没有属性“address”,我在调用reverse(坐标列表)时得到相同的结果