[Gvsig_usuarios] Libreria gvpy

Oscar Martinez omartinez en gvsig.com
Lun Mar 27 09:37:26 CEST 2017


Buenas!


Por partes..


Para eliminar una capa:


     # Eliminar layer de una Vista
     # 
http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/org/gvsig/fmap/mapcontext/layers/FLayers.html
     layers = currentView().getLayers()
     layers.removeLayer("nuevacapa") # se puede eliminar por nombre, por 
indice, etc..


Si lo que quieres hacer es cambiar el nombre del TOC se haría con:

(Añadiendo al final del código del otro día)


     shp2[0].setName("nueva0")
     shp2[1].setName("nueva1")
     shp2[2].setName("nueva2")


Si es otra cosa la que quieres cambiar comentamelo.

Para añadir una simbologia por intervalos por ejemplo está este script 
que es sencillo de entender me parece, es para crear una simbologia por 
intervalos a partir de un campo:


# encoding: utf-8

from gvsig import *
from gvsig import geom
from java.awt import Color
from org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl import 
VectorialIntervalLegend

def main(*args):
         """ Create interval legend """
         # 
http://downloads.gvsig.org/download/web/html/es/html/scripting_devel_guide/2.3/leyendas.html

         # Seleccionar el Tipo de geometria
         # 
http://downloads.gvsig.org/download/web/html/es/html/scripting_devel_guide/2.3/modulo_geom.html
         vil = VectorialIntervalLegend(geom.POLYGON)

         vil.setStartColor(Color.red) # color inicio
         vil.setEndColor(Color.blue) # color final
         vil.setIntervalType(1) # Rango
         store = currentLayer().getFeatureStore() # store de los datos 
a  aplicar la simbologia
         ii = vil.calculateIntervals(store, "ID", 5, geom.POLYGON) # 
Calculo de la simbologia para ese store e intervalos. (store, Campo, 
numero intervalos, tipo)

         vil.setIntervals(ii) # aplicamos los intervalos a la simbologia

         currentLayer().setLegend(vil) # aplicamos la simbologia a la capa

Puedes encontrar otro tipo de leyendas e ir probando: 
http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/org/gvsig/symbology/fmap/mapcontext/rendering/legend/impl/AbstractIntervalLegend.html

Nunca he etiquetado desde scripting.. Tendría que preguntar primero para 
echarte una mano.

Para saber si hay una capa activa hay varias formas, depende para lo que 
necesites, por lo general esta:

     layers = currentView().getLayers()
     print "numero capas activas", len(layers.getActives())
     print currentLayer()==None

     if currentLayer()==None:
         print "no hay capa activa"
         return

     currentLayer.setActive(False)

Respecto al geoproceso intersección, si cambia el nombre de los campos 
es porque necesita hacerlo. Si no me equivoco es cuando se duplican el 
mismo nombre de los campos en las capas entrantes. No hay forma de 
configurar esto desde fuera. Lo que si que puedes hacer es hacer un 
script que te extraiga lo que desees de esa capa o editarla.

Creo que no me dejo nada. Espero que te sea de ayuda.

Saludos,
Óscar

El 27/03/2017 a las 8:29, Ovidio Ribeira escribió:
>
> Buenos días Oscar, gracias por tu ayuda y tu tiempo, con tus 
> explicaciones conseguí lo que quería, pero para mejorar el script so 
> lo me faltaría,: poder eliminar de la TOC una capa que ya no me 
> interesa, lo que hice fue ponerla como no visible,. Tampoco consigo 
> renombrar la capa de salida del geoproceso reproyectar, aquí lo que 
> hago es no añadir ninguna con el geoproceso y despues anadir a la TOC 
> la n.º 0. Me seria bueno poder añadir una simbología y un etiquetado 
> por selección a la nueva capa desde el script. Para seleccionar una 
> capa uso: currentLayer().setActive(False)  y   s1.setActive(True) 
>  pero si al principio no hay ninguna capa activa me da un error, como 
> se puede saber si hay alguna capa activa. Y por último la capa de 
> salida en el geoproceso intersección cambia el nombre de los campos, 
> hay alguna manera de que no lo haga.
>
> Saludos y si puedes la ayudar será muy bien venida .
>
>
>
>
>
> ------------------------------------------------------------------------
> *De:* gvsig_usuarios-bounces en listserv.gva.es 
> <gvsig_usuarios-bounces en listserv.gva.es> en nombre de Oscar Martinez 
> <omartinez en gvsig.com>
> *Enviado:* viernes, 24 de marzo de 2017 14:30
> *Para:* gvsig_usuarios en listserv.gva.es
> *Asunto:* Re: [Gvsig_usuarios] Libreria gvpy
>
> Buenas,
>
>
> Los algortimos gvSIG-* funcionan de manera algo diferente. Por ahora, 
> siempre que ejecutes uno de estos algoritmos tienes que especificar el 
> path que quieres usar. En gvpy se especifica añadiendo un parámetro 
> PATH. Para esto ya teníamos una función preparada en gvSIG llamada 
> getTempFile("nombre", "extension", "carpeta destino"), siendo el 
> último parámetro opcional. Esto imita el funcionamiento que tienen el 
> resto de geoprocesos.
>
>
> También ten en cuenta que este geoproceso reproject especifica y crea 
> tres capas de salida, aunque luego solo vayas a usar una, hay que 
> indicar los paths.
>
>
> Te adjunto un ejemplo de todo esto.
>
>
> Espero te sirva de ayuda, cualquier cosa nos comentas.
>
>
> Saludos
>
>
> https://gist.github.com/oscar9/43523df6c76056cbde97f4a23f967ffe
>
>
> # encoding: utf-8
> import gvsig
> from gvsig import *
> from gvsig.libs import gvpy
> reload(gvpy)
> import os
> def main(*args):
>      
>      gvpy.algHelp("gvSIG-reproject")
>      """
>      * Algorithm help:  Reproyección
>      * Usage: runalg( "gvSIG-reproject",
>                                    LAYER[Vector Layer],
>                                    SELECTED_GEOM[Boolean],
>                                    DST_PROJECTION[String],
>                                    RESULT_POL[output vector layer],
>                                    RESULT_LINE[output vector layer],
>                                    RESULT_POINT[output vector layer],
>                                    );
>      """
>      #Funtion tempfile
>      n1 = getTempFile("new", ".shp")
>      print n1
>      #C:\Users\Versus\AppData\Local\Temp\/tmp-andami\new-58d51c6267b.shp
>      
>      n2 = getTempFile("new", ".shp", r"C:\resultados")
>      print n2
>      #C:\resultados\new-58d51c62686.shp
>      
>      # Ejemplo
>      shp1 = gvpy.runalg("randomvector",10,0)
>      shp2 = gvpy.runalg("gvSIG-reproject", shp1, "false", "EPSG:25829", PATH=[getTempFile("new1", ".shp"),getTempFile("new2", ".shp"),getTempFile("new3", ".shp")])
>      print shp2
>      
>      # Salida multiple en forma de lista: [new1-58d51c7f20ed, new2-58d51c7f20ed, new3-58d51c7f20ed]
>      print shp2[0].getGeometryType().getName()
>      print shp2[1].getGeometryType().getName()
>      print shp2[2].getGeometryType().getName()
>      pass
>
>
> El 24/03/2017 a las 13:00, Ovidio Ribeira escribió:
>>
>> Hola, usando la libreria gvpy en un script y al ejecutarlo la segunda 
>> vez me da el error de que el fichero de salida existe, utilizando el 
>> siguente comando:
>>
>> gvpy.runalg("gvSIG-reproject", "Area", "false", "EPSG:25829", "#", 
>> "#", "#",)
>>
>> Con esta outra linea funciona sin problemas creando varios ficheros 
>> temporales: gvpy.runalg("randomvector",10,0),
>>
>> Tambien necesito ayuda para capturar solo la capa de polígonos del 
>> geoproceso gvsig-reproject.
>>
>> Gracias y saludos.
>>
>>
>>
>>
>> _______________________________________________
>> gvSIG_usuarios mailing list
>> gvSIG_usuarios en listserv.gva.es
>>
>> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:
>>
>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios
>
>
>
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
>
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:
>
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_usuarios/attachments/20170327/f15d94fe/attachment.html>


Más información sobre la lista de distribución gvSIG_usuarios