Scripting en gvSIG 2: Ejemplos del webinar

webinar-scriptingVoy a explicar dos de los ejemplos que puse ayer durante el webinar y animaros a probar el módulo de Scripting.

Si os perdisteis el webinar de ayer puedes ver aquí las diapositivas que use y podéis preguntarme cualquier duda por email, sobre el webinar y sobre el «Curso de Scripting en gvSIG 2» que anunciamos durante el mismo. Gracias a todos los que asististeis y a la plataforma de MundoGEO, pronto estará subido el vídeo del webinar.

Podéis ver ya el vídeo en Youtube.

 

Instalación

Sin títuloPara hacer el ejemplo y empezar con esto, debéis tener instalado gvSIG 2, os recomiendo que cojáis la última versión posible, justo ayer salio la primera realease candidate, gvSIG 2.1 RC1, que te puedes descargar en el siguiente enlaceUna vez instalada o durante la instalación, deberéis  acceder al Administrador de complementos desde el menú de Herramientas e instalar el «Scripting Framework», ahora cuando abráis gvSIG  os saldrá dentro de Herramientas el menú de Scripting.

Si andas aún un poco perdido, en estos dos post lo explico mejor: Guía de Instalación y Tu primer script

Ejemplos

Ahora podréis usar el módulo de scripting y os voy a explicar como realizar un pequeño ejemplo. Vamos a crear una Vista nueva en nuestro proyecto, y vamos a agregar dos capas (he preparado un pack con los datos que utilice y os los podéis descargar aquí), una capa de puntos y otra de municipios.

A continuación accedemos a Herramientas – Scripting – Scripting composer. Creamos un nuevo script dándole a la hoja en blanco de arriba a la izquierda, le ponemos un nombre al script y OK. En este script en blanco deberemos pegar el siguiente código desde el Repositorio de Scripts. Os recuerdo que cualquiera estáis invitados a participar en este repositorio introduciendo los scripts que creéis para compartirlos con el resto de usuarios. Este código lo que va a hacer es coger una capa de puntos y unirlos todos en el orden que aparezcan en una línea y crear una capa nueva con esta línea.

webinar-scripting2
Líneas que modificar

Copiamos y pegamos este código en nuestro script nuevo, tan solo deberéis de cambiar dos lineas, una que empieza por nameLayer,que dará el nombre a la capa, y otra path que indicará donde grabar la capa nueva.

TIP: Para que el script funcione, la capa no debe de existir en el directorio, así que si lanzáis varias veces el script y os da un fallo del tipo «Can’t finish layer edition«, suele ser porque la ruta no existe o la capa ya existe.

Antes de ejecutarlo, tendréis que tener seleccionada la capa de puntos en vuestra Vista, tiene que aparecer en negrita tan solo haciéndole click. Esto es porque el script cuenta con la función currentLayer(), que cogerá los datos de la capa activa. Si le damos a Guardar y luego al botón de la rueda Ejecutar, lanzaremos nuestro script y veremos como nos aparece una capa nueva en nuestra Vista con el nombre que le habéis dicho anteriormente.

webinar-scripting3

Una vez tengamos esta capa, lo que vamos a hacer con el siguiente script será hacer una selección de todos los municipios por los que pasa la ruta de puntos. Tan solo deberemos de cambiar el nombre de las dos primeras líneas y escribir el nombre de las capas que hemos añadido. Estos scripts no sirven solo para estas dos capas, puedes reutilizarlo en tus proyectos.


from gvsig import *
from geom import *

def main(*args):
    """Selección de capas que intersectan"""

    #Capa con una linea
    lyrTrack = currentView().getLayer("line_10.shp")
    #Capa de poligonos
    lyrMunicipio = currentView().getLayer("MUNICIPIO.SHP")

    #Acceso a las entidades
    featuresTrack = lyrTrack.features()
    featuresMunicipio = lyrMunicipio.features()

    #Accede a la primera entidad (linea) de la capa line
    track1 = iter(featuresTrack).next()

    #Iteramos para ver por cuales municipios intersecta la linea
    for municipio in featuresMunicipio:
        if municipio.geometry().intersects(track1.geometry()):
            #Hace la seleccion si las geometrias interseccionan
            #municipio con el track
            lyrMunicipio.select(municipio)

    #Muestra todos los municipios seleccionados
    #si utilizas otra capa tuya, estos nombres corresponden
    #a los atributos que quieras mostrar
    for select in lyrMunicipio.getSelection():
        print select.MUNI_, select.NOMBRE

Y con esto, nos generaría una selección de los municipios por donde pasa el track. Por ejemplo, una pequeña variante es hacer una selección del área de influencia del track. Para ello la única diferencia que deberíamos aplicar es hacer el calculo en vez de sobre la geometría de la línea «track1.geometry()», sobre el de su área de influencia de esa geometría «track1.geometry().buffer(10000)» con la distancia que deseemos.

Este cambio habría que aplicarlo a la línea: «if municipio.geometry().intersects(track1.geometry().buffer(10000)):»

webinar-scripting4
buffer = 0
webinar-scripting5
buffer = 10000

Ya está, con esta selección podríamos ejecutar otros scripts o trabajar con ella. Cualquier duda me la podéis comentar en el post o por email, espero que os sirva para animaros a probar este módulo de programación y si queréis aprender más os podéis apuntar al curso que damos sobre esto «Scripting en gvSIG2» en la plataforma de gvsig-training.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Blog de WordPress.com.

Subir ↑

A %d blogueros les gusta esto: