RkBlog

Hardware, programming and astronomy tutorials and reviews.

Geokodowanie adresów za pomocą geopy

Poręczny moduł do zamiany adresów na współrzędne geograficzne

geopy to poręczny moduł do geokodowania adresów za pomocą różnych silników (np. Google Maps, Yahoo!, Windows Local Live i inne). Moduł ten może się przydać, gdy potrzebujemy zamienić podany adres na współrzędne geograficzne (geokodowanie) potrzebne dla map. Geokodowania można użyć też do uzyskania pełnej wersji podanego adresu. W przypadku aplikacji Django można użyć go w połączeniu z GeoDjango (np. wspomniane pozyskiwanie współrzędnych geograficznych).

Instalacja standardowa:
pip install geopy
I możemy zacząć używać geopy. Geokodowanie wygląda tak:
# -*- coding: utf-8 -*-
from geopy import geocoders
g = geocoders.Google(domain='maps.google.pl')

place, location = g.geocode(u"Warszawa, Marszałkowska 1".encode('utf-8'))

print place
print location
A wynik to:
Marszałkowska 1, 01-001 Warszawa, Polska
(52.2144351, 21.0208823)

Uzyskujemy pełen adres oraz szerokość (52) i długość (21) geograficzną. Współrzędne określa dobrze, natomiast kody pocztowe nie są dopasowywane. Współrzędne te można używać w np. mapach Google, czy zapisać w bazie danych. Jeżeli używamy Django to GeoDjango oferuje "PointField" do przechowywania i operowania na współrzędnych. Także do poprawnego obsługiwania unikodu należy adres kodować za pomocą encode('utf-8'). Można oczywiście użyć innych silników niż Google Maps.

Można także uzyskać przybliżoną odległość między dwiema lokacjami:

# -*- coding: utf-8 -*-
from geopy import distance
from geopy import geocoders
g = geocoders.Google(domain='maps.google.pl')

_, start = g.geocode(u"Warszawa, Marszałkowska 1".encode('utf-8'))
_, finish = g.geocode(u"Szczecin".encode('utf-8'))

print distance.distance(start, finish)
Wynik to 456.300972179 km. W przypadku aplikacji korzystających z GeoDjango i przechowujących współrzędne w bazie danych można operować na odległościach między punktami już na poziomie ORMa. W prostszych przypadkach można skorzystać z tej funkcjonalności geopy.

O GeoDjango i wykorzystaniu go w aplikacjach opartych o Mapy Google w następnym artykule.

RkBlog

30 July 2012;

Comment article