sábado, 1 de noviembre de 2014

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 google maps 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 te fijas en el último script hemos añadido una clave para aumentar el número de llamadas al API.

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



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

No hay comentarios:

Publicar un comentario