Scripting en gvSIG: getGraphicsLayer

graphic1Este era un comando que no acababa de hacer funcionar, pero gracias a la nueva guía de referencia para desarrolladores que han sacado desde gvSIG he podido comprenderlo, aún así no ponen un ejemplo muy claro así que decidí hacer uno. Su uso es sencillo, siempre aplicado sobre una Vista.

currentView().getGraphicsLayer()

#Ejemplo de la guía
def insertSymbol(geometry, symbol):
  graphicsLayer = currentView().getGraphicsLayer()
  graphicsLayer.removeGraphics("ejemplo")
  idSimbolo = graphicsLayer.addSymbol(symbol)
  graphicsLayer.addGraphic("ejemplo", geometry, idSimbolo, "Etiqueta")

graphic2Este comando se utiliza para crear una especie de capa de acetato, una capa temporal y que es puramente gráfica que aparecerá en nuestra vista. Serán un grupo de gráficos que se pueden agrupar por diferentes nombres, se pueden tratar como pegatinas con una única misión de ser visibles y están agrupadas por un ID que elegiremos a la hora de crearlas (en nuestro ej el ID utilizado es «ejemplo).

También podremos introducir el ID de las pegatinas que queremos eliminar. Estas pegatinas se crean seleccionando las geometrías que queramos, corriendo el script, y después de eso, aunque desactivemos la capa, seguirán apareciendo en nuestra Vista.graphic3

Nota: Hay un pequeño error en la guía de referencia – geometrías – símbolos. El comando correcto para el símbolo de polígonos es: simplePolygonSymbol(color)

En el ejemplo veremos como vamos comprobando de que tipo es cada geometría para aplicarle el símbolo correcto. Si al ejecutar el script presionamos NO para realizar un borrado, deberemos de hacer un click sobre la vista para que esta se actualice y se borren las pegatinas que queramos.

Ejemplo: graphicsLayer


from gvsig import *
from geom import *
from commonsdialog import *

def main():
 """Deja un acetato con los puntos seleccionados"""
 #Seleccion de la capa activa
 #Preguntamos que queremos hacer
 confirm = confirmDialog("SI=Crear, NO=Borrar, CANCEL=Cerrar",
 "Opciones", YES_NO_CANCEL)
 #Datos
 grap = currentView().getGraphicsLayer()
 features = currentLayer().getSelection()
 #Opciones
 #YES: añadiremos a la capa acetato
 if confirm == 0:
   print "Creando graficos!"
   if not features.getCount():
     print "Tienes que hacer una seleccion"
     return
   #Segun del tipo de geometria se añadira un tipo de symbol
   for feature in features:
     geom = feature.geometry()
     if geom.getGeometryType().name == "Point2D":
       point = simplePointSymbol('red')
       crearSimbolo(point,grap,geom)
       continue
     if geom.getGeometryType().name == "Curve2D":
       point = simpleLineSymbol('green')
       crearSimbolo(point,grap,geom)
       continue
     if geom.getGeometryType().name == "Surface2D":
       point = simplePolygonSymbol('blue')
       crearSimbolo(point,grap,geom)
       continue

 #NO: Borramos todos los graphicos etiquetados como "ejemplo"
 elif confirm == 1:
   print "Borrar"
   grap.removeGraphics("ejemplo")
 #CANCEL:
 else: return

def crearSimbolo(point,grap,geom):
 #idSimbolo para el addGraphic
 idSimbolo = grap.addSymbol(point)
 #Añadimos el grafico
 grap.addGraphic("ejemplo", geom, idSimbolo, "Etiqueta")

3 respuestas a “Scripting en gvSIG: getGraphicsLayer

Add yours

  1. Gracias por el post, funciona muy bien el script. La línea 44 puede ubicarse en la función main, con ello se evita un error al usar la variable grap sin inicializarla.

    Por otro lado, ¿conoces si es posible agregar una etiqueta al mapa usando la extensión scripting?

    Saludos

    1. Gracias a ti por comentar el fallo, ya está corregido, me alegra saber que le encontréis utilidad.

      Pues yo ahora mismo no sabría hacerlo, pero eso no significa que no sea posible, si te urge mucho puedes preguntar en la lista de email de gvSIG y ahí te podrá leer algún desarrollador del programa que te pueda ayudar mejor que yo, aún hay muchas cosas que se me escapan.

      Gracias por pasarte y cualquier cosa me puedes seguir preguntando por aquí o por email.

Deja un comentario

Blog de WordPress.com.

Subir ↑