Este 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")
Este 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.
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")
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
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.
Hello mate ggreat blog post