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