Nie widzę nic w ich API to zrobić: https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoip/#geoip-apiJak uzyskać adres z szerokości i długości geograficznej w Django GeoIP?
czy mam po prostu korzystać z Google API do odwrotnej Geokodowanie?
Nie widzę nic w ich API to zrobić: https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoip/#geoip-apiJak uzyskać adres z szerokości i długości geograficznej w Django GeoIP?
czy mam po prostu korzystać z Google API do odwrotnej Geokodowanie?
Możesz użyć API map. Dołączyłem fragment, którego używam do obliczania punktów startowych maratonu przekształconych w PointField za pomocą Postgis z Django. To powinno cię ustawić na swojej drodze.
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
Rozwiązanie - wywołanie tego adresu URL i przeanalizowanie go jako JSON.
http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=false
Użyj geopy, może obsługiwać wielu geocoderów, w tym 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
zainstalować z pip:
pip install geopy
informacje znajdują się na: https://github.com/geopy/geopy
użyłem tego samego kodu, ale kiedy jest stosowany print (location.address) masz błąd Traceback (najnowsza rozmowę ostatnia): Plik „
Otrzymuję to samo podczas wywoływania wstecz, lista współrzędnych –
@rawsix Odpowiedź wydaje się mądry dla użytkownika Django. Należy jednak pamiętać, że lokalizacja zwrócona przez geolocator.reverse(query)
jest listą, a nie obiektem Location
; więc próba pobrania atrybutu address
z tego spowoduje błąd.
Zazwyczaj pierwsza pozycja na tej liście zawiera najbliższe informacje adresowe. tak u można po prostu zrobić:
location = location[0]
address = location.address
Dodatkowo, zamiast przechodzącą ciąg szerokości geograficznej i długości metodą odwrotnej, można użyć krotki i musi być latitude
przed longitude
. Możesz zrobić:
from geopy.geocoders import GoogleV3()
geocoder = GoogleV3()
location_list = geocoder.reverse((latitude, longitude))
location = location_list[0]
address = location.address
Pozdrawiam, ale byłem po uzyskaniu "Adres" (jako wynik) z Lat & Long (jako wejście). Twój przykład jest odwrotnością tego, co chcę. Mam to działa przy użyciu podobnego podejścia https://maps.googleapis.com/maps/api/geocode/json?latlng= – Ernest
zamiast adresu, użyj swoich długich wartości i sprawdź nadchodzące wyniki json. znajdziesz tam adres. – super9