Voy 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
Para 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 enlace. Una 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.

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.
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)):»


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