Geokodowanie adresów za pomocą geopy

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

Programowanie Sieciowe, 30 July 2012

Comment article
Comment article RkBlog main page Search RSS Contact