[Gvsig_desarrolladores] Establecer propiedades de capas

Óscar Martínez omartinez en gvsig.com
Mie Oct 30 12:50:42 CET 2019


Buenas,

Creo que ya teníamos localizada esa limitación del ángulo según el 
etiquetado que eligieras, me la apunto para echarle un vistazo.

Respecto a los del grupo de capas he preparado el siguiente script, creo 
que hace lo que deseas hacer.

https://gist.github.com/oscar9/293550287ff9e933d1d2d6e9719c758f

He insertado un pequeño comentario de un método nuevo que vamos a crear 
para la 2.5 final que facilite esa creación del flayers y que no se le 
tengan que asignar esos parámetros.

Creo que con esto resolvíamos todas las dudas, ya nos dices si algo no 
funciona o falta algo.

Saludos!

El 29/10/19 a las 13:59, Montes Cámara, Victor escribió:
> Hola Óscar,
>
> Funciona bien. He añadido las llamadas a los métodos correspondientes 
> para cambiar los parámetros de fuente:
>
> textSymbol.setFont(Font("Arial", Font.BOLD, 10))
> textSymbol.setFontSize(10)
> textSymbol.setTextColor(Color(r,g,b)) # RGB
>
>
> Lo que he visto es que la clase ITextSymbol 
> (http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/javadocs/html/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.html) 
> no tiene ningún método para establecer el ángulo del texto.
>
> No es muy grave porque lo uso para los números de policía y no me 
> importa que no estén girados, lo importante es ponerle el origen en el 
> centro.
>
> Para el texto del nombre de calles pasa lo contrario, tengo que usar 
> el ángulo, pero no me preocupa el origen. Por lo que al final tengo 
> que hacer lo siguiente:
>
>
> layer.setIsLabeled(True)
> symbologyManager = SymbologyLocator.getSymbologyManager()
> if nombre_capa == "CALLES":
>      labeling = symbologyManager.createDefaultLabelingStrategy()
>      labeling.setTextField("TEXTO")
>      labeling.setUsesFixedColor(True)
>      labeling.setUsesFixedSize(True)
>      labeling.setHeightField(None)
>      labeling.setRotationField("ANGULO")
>      labeling.setFixedColor(Color(r,g,b)) # RGB
>      labeling.setFont(Font("Arial", Font.BOLD, 15))
>      labeling.setReferenceSystem(0) # WORLD=0, PAPER=1
>      labeling.setFixedSize(15)
>      labeling.setUnit(-1) # PIXELS
>      labeling.setReferenceSystem(1)
>      layer.setLabelingStrategy(labeling)
> elif nombre_capa == "NUMEROS":
>      glf = GeneralLabelingFactory()
>      gls = glf.createStrategy(layer, None, None, None)
>      placementc = gls.getPlacementConstraints()
>      placementc.setPlacementMode(IPlacementConstraints.ON_TOP_OF_THE_POINT)
>      defaultLabel = symbologyManager.createDefaultLabel()
>      defaultLabel.setLabelExpressions(["TEXTO"])
>      textSymbol = symbologyManager.createSimpleTextSymbol()
>      textSymbol.setFont(Font("Arial", Font.BOLD, 10))
>      textSymbol.setFontSize(10)
>      textSymbol.setTextColor(Color(r,g,b)) # RGB
>      textSymbol.setDrawWithHalo(True)
>      textSymbol.setHaloColor(Color.WHITE)
>      textSymbol.setHaloWidth(2)
>      defaultLabel.setTextSymbol(textSymbol)
>      resp = gls.getLabelingMethod() #ILabelingMethod
>      resp.addLabelClass(defaultLabel)
>      gls.setLabelingMethod(resp)
>      layer.setLabelingStrategy(gls)
>
> Pasa como al hacerlo en modo diseño, si el ángulo es obligatorio tengo 
> que utilizar el modo "Atributos de la etiqueta definidos en tabla", 
> aunque no pueda cambiar el origen, y si es necesario cambiar el origen 
> hay que usar el modo "Etiquetas definidas por el usuario", aunque no 
> puede establecer un ángulo.
>
> Lo que me falta ahora es agrupar capas. ¿Alguna idea?
>
> Muchas gracias.
>
> Un saludo,
>
> Víctor Montes.
>
> ------------------------------------------------------------------------
> *De: *"Óscar Martínez" <omartinez en gvsig.com>
> *Para: *"Montes Cámara, Victor" <victor.montes en alicante-ayto.es>
> *CC: *"Lista de Desarrolladores de gvSIG" 
> <gvsig_desarrolladores en listserv.gva.es>
> *Enviados: *Lunes, 28 de Octubre 2019 15:58:08
> *Asunto: *Re: [Gvsig_desarrolladores] Establecer propiedades de capas
>
> Buenas,
> Aquí te he puesto un ejemplo de lo que sería establecer un etiquetado 
> avanzado, con la colocación sobre el punto, con una expresión de 
> etiquetado,si solo quieres por un campo sería algo como (["CAMPO1"]) y 
> lo del halo con un color y tamaño.
> https://gist.github.com/oscar9/5393823cb2d49ef9467b932fbf50ee29
> Ya me comentas si te funciona bien.
> Saludos,
> Óscar
> PD: Lo envío también a las listas
>
> El mié., 23 oct. 2019 a las 13:49, Montes Cámara, Victor 
> (<victor.montes en alicante-ayto.es 
> <mailto:victor.montes en alicante-ayto.es>>) escribió:
>
>     De la segunda parte, realmente lo que más te interesa es situar la
>     etiqueta sobre el punto, es decir la opción siguiente de las
>     propiedades de colocación:
>
>
>     ------------------------------------------------------------------------
>     *De: *"Montes Cámara, Victor" <victor.montes en alicante-ayto.es
>     <mailto:victor.montes en alicante-ayto.es>>
>     *Para: *"Lista de Desarrolladores de gvSIG"
>     <gvsig_desarrolladores en listserv.gva.es
>     <mailto:gvsig_desarrolladores en listserv.gva.es>>
>     *CC: *omartinez en gvsig.com <mailto:omartinez en gvsig.com>
>     *Enviados: *Miércoles, 23 de Octubre 2019 11:01:27
>     *Asunto: *Re: [Gvsig_desarrolladores] Establecer propiedades de capas
>
>
>     Me contesto yo mismo,
>
>     Para la primera parte, siguiendo el ejemplo en
>     http://osgeo-org.1560.x6.nabble.com/Re-Etiquetas-desde-scripting-td5400766.html sería
>
>     symbologyManager = SymbologyLocator.getSymbologyManager()
>     labeling = symbologyManager.createDefaultLabelingStrategy()
>
>
>     labeling.setTextField("TEXTO")
>     labeling.setUsesFixedColor(True)
>     labeling.setUsesFixedSize(True)
>     labeling.setHeightField(None)
>     labeling.setRotationField("ANGULO")
>     labeling.setFixedColor(Color(255,255,255)) # RGB
>     labeling.setFont(Font("Arial", Font.PLAIN, 12))
>     labeling.setReferenceSystem(0) # WORLD=0, PAPER=1
>     labeling.setFixedSize(15)
>     labeling.setUnit(-1) # PIXELS
>
>     layer.setLabelingStrategy(labeling)
>
>     layer.setIsLabeled(True)
>
>     Voy con la segunda parte.
>     ------------------------------------------------------------------------
>     *De: *"Montes Cámara, Victor" <victor.montes en alicante-ayto.es
>     <mailto:victor.montes en alicante-ayto.es>>
>     *Para: *"Lista de Desarrolladores de gvSIG"
>     <gvsig_desarrolladores en listserv.gva.es
>     <mailto:gvsig_desarrolladores en listserv.gva.es>>
>     *CC: *omartinez en gvsig.com <mailto:omartinez en gvsig.com>
>     *Enviados: *Miércoles, 23 de Octubre 2019 10:13:20
>     *Asunto: *Re: [Gvsig_desarrolladores] Establecer propiedades de capas
>
>
>     Gracias Óscar,
>
>     Sí, eso es sencillo, ya lo había descubierto.
>     Ahora estoy con el tema del etiquetado.
>
>     Tengo una capa de calles donde quiero poner como etiqueta un campo
>     definido en tabla, el ángulo otro campo, tamaño y negrita.
>     Equivalente a lo siguiente en modo diseño:
>
>
>     También tengo una capa de números de policía donde quiero
>     establecer unas propiedades concretas, que en modo diseño
>     establecería de la siguiente manera:
>     "Etiquetas definidas por el usuario", "Etiquetar todas las
>     entidades de la misma manera" y las siguientes propiedades:
>
>
>     Y eligiendo un campo de tabla para visualizar.
>
>     Por ahora he conseguido activar el etiquetado con la instrucción:
>
>     layer.setIsLabeled(1)
>
>     Para lo demás supongo que habrá que utilizar los
>     métodos setLabelingStrategy o drawLabels, pero no tengo claro como.
>
>     Un saludo,
>
>     Víctor Montes.
>     ------------------------------------------------------------------------
>     *De: *"Óscar Martínez" <omartinez en gvsig.com
>     <mailto:omartinez en gvsig.com>>
>     *Para: *"gvsig desarrolladores"
>     <gvsig_desarrolladores en listserv.gva.es
>     <mailto:gvsig_desarrolladores en listserv.gva.es>>
>     *Enviados: *Lunes, 21 de Octubre 2019 17:54:47
>     *Asunto: *Re: [Gvsig_desarrolladores] Establecer propiedades de capas
>
>     Buenas,
>
>     Para establecer los límites del zoom se hace directamente sobre la
>     capa. Solo son necesarias dos líneas.
>
>       layer.setMinScale(integer)
>       layer.setMaxScale(integer)
>
>     Por ejemplo en el siguiente script se crea una capa de puntos y se
>     establece que solo sea visible por debajo de 1:5.000 y por encima
>     de 1:1.000
>
>     # encoding: utf-8
>
>     import gvsig
>     from gvsig import geom
>
>     def main(*args):
>
>        # Creating new layer
>        ft = gvsig.createSchema()
>        ft.append("ID", "INTEGER")
>        ft.append("GEOMETRY", "GEOMETRY")
>        ft.get('GEOMETRY').setGeometryType(geom.POINT,geom.D2)
>
>        layer = gvsig.createShape(ft, prefixname="testScale")
>        store = layer.getFeatureStore()
>        layer.edit()
>        layer.append({"ID":1,"GEOMETRY":geom.createPoint(geom.D2, 10, 20)})
>        layer.append({"ID":2,"GEOMETRY":geom.createPoint(geom.D2, 20, 20)})
>        layer.append({"ID":3,"GEOMETRY":geom.createPoint(geom.D2, 20, 30)})
>        layer.commit()
>        gvsig.currentView().addLayer(layer)
>
>        #Change zoom
>        layer.setMinScale(1000)
>        layer.setMaxScale(5000)
>
>     https://gist.github.com/oscar9/296125be4e58e87d978c578ea3996000
>
>
>     El 18/10/19 a las 10:43, Montes Cámara, Victor escribió:
>
>             Buenos días,
>
>         Tengo un desarrollo en el que creo capas shapefile
>         dinámicamente a partir de tablas en Oracle Spatial.
>         Me gustaría saber como cambiar, a través de scripting, las
>         propiedades de la capa, tales como color, etiquetas, zoom
>         mínimo o incluso como agrupar capas.
>
>         Un saludo.
>         Víctor Montes
>
>         _______________________________________________
>         gvSIG_desarrolladores mailing list
>         gvSIG_desarrolladores en listserv.gva.es  <mailto:gvSIG_desarrolladores 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_desarrolladores
>
>     -- 
>     --
>     gvSIG Association
>     Óscar Martínez
>     omartinez en gvsig.com  <mailto:omartinez en gvsig.com>
>
>
>     _______________________________________________
>     gvSIG_desarrolladores mailing list
>     gvSIG_desarrolladores en listserv.gva.es
>     <mailto:gvSIG_desarrolladores 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_desarrolladores
>
>
>
>
-- 
--
gvSIG Association
Óscar Martínez
omartinez en gvsig.com

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20191030/2696bc67/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: 13627224.879999878
Type: image/png
Size: 27426 bytes
Desc: no disponible
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20191030/2696bc67/attachment.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: 216729.02999981306
Type: image/png
Size: 38087 bytes
Desc: no disponible
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20191030/2696bc67/attachment-0001.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: 410523.79999984987
Type: image/png
Size: 43089 bytes
Desc: no disponible
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20191030/2696bc67/attachment-0002.png>


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