Geolocalización con python y pygeocoder

pygeocoder es una biblioteca de Python bajo licencia BSD que facilita el uso de la funcionalidad de geolocalización de Google. Con este módulo, podrás encontrar fácilmente las direcciones correspondientes a las coordenadas y viceversa. También podemos utilizarlo para validar y formatear direcciones.

Se basa en googlemaps 1.0.2 pero recientemente se ha actualizado para hacer uso de la versión 3. Para instalarlo simplemente escribimos en el terminal:
$ pip install pygeocoder
Una vez instalado probaremos a obtener las coordenadas de una dirección de ejemplo:
# python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pygeocoder import Geocoder
>>> results = Geocoder.geocode("Avenida de la Albufera, 78 28038 Madrid")
>>> print(results[0].coordinates)
(40.3949876, -3.6629345)
>>> print(results[0])
Avenida de la Albufera, 78, 28038 Madrid, Madrid, Spain
A parte de las coordenadas, podemos decirle que nos diga sólo el tipo de componente que nos interese:
>>> print(results[0].country)
Spain
>>> print(results[0].postal_code)
28038
>>>
También podemos hacer la búsqueda a la inversa y obtener la dirección a partir de las coordenadas:
>>> results = Geocoder.reverse_geocode(40.3949876, -3.6629345)
>>> print(results[0])
Avenida de la Albufera, 78, 28038 Madrid, Madrid, Spain
>>>

Si lo que queremos es validar una dirección, simplemente escribimos:
>>> Geocoder.geocode("Avenida de la Albufera, 78 28038 Madrid").valid_address
True
>>> Geocoder.geocode("Avenida de la Albufera, 780000000000 28038 Madrid").valid_address
false
>>>
e incluso nos hace automáticamente pequeñas correcciones:
>>> result = Geocoder.geocode("Avenida de la Albufera, 78 28038 Madrid")
>>> result.valid_address
True
>>> print (result)
Avenida de la Albufera, 78, 28038 Madrid, Madrid, Spain

Ahora podemos prepararnos un pequeño script para tenerlo siempre a mano:
import sys
from pygeocoder import Geocoder
results = Geocoder.geocode(sys.argv[1:])
print(results[0].coordinates)
# python geolocate.sh "calle montera, 5 madrid"
(40.4173864, -3.703069499999999)
u otro que abra un fichero con varias direcciones y nos devuelva sus coordenadas correspondientes:
#!/usr/bin/python
import sys, re

fichero = open("/home/usuario/pruebas/localizaciones.txt", "r")

TEXTO = sys.argv[1]
for line in fichero:
        if re.match(TEXTO, line):
                from pygeocoder import Geocoder
                results = Geocoder('ZIzZay2GZazynB3NJ4nrUJk6ZaWJRZZkHcoLvn3').geocode(line.split(";")[1])
                print(results[0].latitude)

Si os fijáis en el último script hemos añadido una clave para aumentar el número de llamadas al API.

Por último, si estáis detrás de un proxy corporativo no olvidéis especificar set_proxy(proxy) (ej. '10.0.0.1:9999'.)

Fuente: http://code.xster.net/pygeocoder/wiki/Home

Comentarios

  1. Hola, quisiera saber si se puede hacer un map maker con python, otra cosa sabrias dividir en dos variables latitud y longitud

    ResponderEliminar

Publicar un comentario