Convierte una tabla con direcciones en una capa de puntos con gvSIG 2.x

En este post vamos a ver una nueva utilidad de utilizar de la librería geopy, donde veremos la forma de convertir una tabla con direcciones postales en una capa de puntos en gvSIG. Las direcciones se buscarán en Google Maps, por lo que también se pueden buscar lugares de interés (parques, museos…). Se generará dicha capa con los resultados encontrados.

Lo que va a realizar el siguiente script será leer todas las direcciones que tengamos en una tabla, convertirlas a coordenadas mediante la librería geopy (haciendo peticiones vía Internet usando el codificador de Google) y añadirlas a una capa nueva de puntos en gvSIG.

El script también guardará el resto de la estructura de la tabla si tenemos más datos en ella, perfecto para convertir tablas que tengáis en capas.

Lo primero que debemos hacer es instalar la librería GeoPy si no la teníamos instalada (ver los pasos a seguir para ello en el post anterior Busca tu dirección o población en gvSIG mediante Scripting, que incluye también un vídeo explicativo). Después arrancar gvSIG y crear el Script.

Una vez creado el nuevo script deberemos copiar el siguiente código en él:


from gvsig import *
from geom import *
from geopy.geocoders import get_geocoder_for_service
def getGeometryType(type, subtype):
 geometryManager = GeometryLocator.getGeometryManager()
 return geometryManager.getGeometryType(type,subtype)
def main(*args):
    """ Agregar a capa de puntos la direccion """
    ### Datos iniciales
    fieldAddress = "Direccion" #Campo de la capa tabla
    ruta = "/home/miusuario/gis/capa_puntos_de_puntos01.shp"
    ### Proceso
    #Copiamos el esquema de la tabla en la capa + geometria
    layer = currentTable()
    schema = layer.getSchema()
    newSchema = createSchema(schema)
    newSchema.append("GEOMETRY", "GEOMETRY")
    newSchema.get("GEOMETRY").setGeometryType(getGeometryType(POINT,D2))
    CRS = currentView().getProjection()
    output = createShape(newSchema, ruta, CRS=CRS, geometryType=POINT)

    # Locator usado: Google v3
    geolocator = get_geocoder_for_service("googlev3")

    #Recorremos la tabla
    for feature in layer.features():
        address = feature.get(fieldAddress)
        #..convertimos a location
        location = geolocator().geocode(address)
        values = feature.getValues()
        try:
            print location.longitude, location.latitude
            #..creamos punto con los valores devueltos por el geolocator
            punto = createPoint(location.longitude, location.latitude)
            values["GEOMETRY"]=punto
            #..creamos la geometria y agregamos a la nueva capa
            output.append(values)
        except:
            pass

#Agregamos la capa a la Vista y cerramos edicion.
    currentView().addLayer(output)
    output.commit()

Importante: Deberemos modificar lo siguiente en el script, donde pone “### Datos iniciales”:

  • Especificaremos el nombre del campo que contiene las direcciones o tipos de lugares. Se hará modificando la variable fieldAddress, cambiando “Direccion” por el nombre del campo que tengamos en la tabla.
  • Cambiaremos la ruta en la que se creará la nueva capa y su nombre, modificando para ello la variable ruta.

Una vez creado y guardado el Script, abriremos una tabla que contenga un campo con las direcciones o  tipos de lugares.

Ahora, antes de ejecutarlo, hay que tener en cuenta que hay que tener la tabla abierta en primer plano y una vista detrás, ya que en el script hacemos referencia a la Tabla activa.

El script, al depender del servicio online que ofrece Google  (también podemos usar otros codificadores como podemos ver en su web), cuenta con algunas limitaciones pero también con ventajas. Por ejemplo, podemos realizar búsquedas con campos que no sean totalmente direcciones postales, del estilo “Museo Guggenheim”, nombres de ciudades, países.

Podéis buscar este y más scripts en el Outreach de gvSIG.

Cualquier duda sobre su uso podéis comentarla aquí o por la Lista de Usuarios.

Y si estáis interesados en aprender a hacer vuestros propios scripts, recordad que tenéis el Mooc gratuito de Scripting en gvSIG.

¡Esperamos que os sea útil!

This entry was posted in gvSIG Desktop, scripting, spanish and tagged . Bookmark the permalink.

3 Responses to Convierte una tabla con direcciones en una capa de puntos con gvSIG 2.x

  1. Pingback: Geocodificación en GIS - MappingGIS

  2. Pingback: Convierte una tabla con direcciones en una capa de puntos con gvSIG 2.x | GeoNe.ws

Leave a comment