[Gvsig_desarrolladores] Personalizar la ventana de Informaci髇 por punto

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Jue Ago 27 16:32:54 CEST 2015


El 25 de agosto de 2015, 9:46, Ana Calle <nico200307 en gmail.com> escribi贸:

> hola Joaquin,
> yo lo ten铆a implementado para la versi贸n 1.10. Donde me he atascado al
> migrarlo a 2.2 es en el punto donde le pido la informaci贸n al layer.
> Antes lo devolv铆a como una estructura XMLItem[] y ahora lo devuelve
> como DynObjectSet. Ah铆 es donde me he liado.
>
> 驴puedo obtener un XMLItem[] a partir del 'Map<String, DynObjectSet>' que
> me devuelve: layer.getInfo(point, tolerance);???,
> con eso lo tendr铆a resuelto!!
>
>
Hola Ana,
olvidate del XMLItem, es algo que no se lo que quedara por ahi, pero esta
obsoleto, y cualquier referencia a ello puede desaparecer en proximas
revisiones. Debes usar el DynObjectSet que te devuelbe el getInfo.

Asi de memoria....

  DynObjectSet set = layer.getInfo(....);
  Iterator it = set.iterator();
  while( it.hasNext() ) {
    DynObject element = (DynObject)it.next();

    ... procesar "element"...
  }

"element" es un DynObject, puedes acceder a sus atributos con

  Object atributo = element.getDynValue("nombre-de-attributo")

Si quieres saber que atributos tiene puedes usar:

  DynClass dynClass = element.getDynClass();
  DynField[] fields = dynClass.getDynFields();

  fields[0].getName()
  fields[0].getDataType()


Podrias recorrertelos todos con algo como:

  DynClass dynClass = element.getDynClass();
  DynField[] fields = dynClass.getDynFields();
  for( int i=0; i<fields.length(); i++) {
     Object valor = element.getDynValue(fields[i].getName());

     ....

  }

Ahora mismo no se de donde has sacado el "Map<String,DynObjectSet>" que
comentas, pero es facil que sea el Map que se genera con el "getInfo" de
las capas activas, donde para cada una de las capas activas tienes su
DynObjectSet asociado al getInfo de la capa.

Ves acostumbrandote a ver DynObject/DynClass por que en la 2 se gastan en
muchos sitios.
Son una forma de mantener estructuras de datos dinamicas. La DynClass
define la estructura y el DynObject representa una instancia de esta
estructura. hace ya algun tiempo escribimos algun articulo en el blog de
gvsig sobre ellos...
a ver si lo encuentro...

Aqui esta http://blog.gvsig.org/2012/06/11/dynobjects-en-gvsig-2-0/

En relacion a utilizar y personalizar e editor de atributos, sigo sin tener
tiempo para terminar el borrador de articulo que comenta como
personalizarlo, pero os voy a dejar aqui el borrador que hize en su dia,
espero que valga mas tener acceso a un borrador que no tener nada.

un saludo
Joaquin


[borrador]
Hola a todos,
hace unos dias, la verdad es que ya bastantes dias, en la lista preguntaron
por la posibilidad de integrar el uso de listas controladas o dominios
dentro de gvSIG 2 de forma similar a como se hacia con Navtable. Un
Navtable para gvSIG 2 no tenemos pero si podemos hacer nuestros pinitos
para mostrar formularios personalizados.

Partiremos de la herramienta "Editor de atributos". Esta herramienta
funciona de forma similar a como funcionaria la herramienta de informacion
de un punto, pero nos permitiria modificar y guardar los atributos sobre la
misma ventana en la que nos muestra la informacion. Probablemente aun se
pueda mejorar y depurar bastante pero ya es funcional.

Para hacer las pruebas crearemos una vista y cargaremos en ella la capa
"carre2009", que podemos encontrar en:


http://downloads.gvsig.org/download/geodata/vector/SHP2D/Aragon_Carreteras_SITAR_SHP2d.zip

Una vez cargada la capa en la vista, la activaremos y haremos zoom a un
area en concreto.

[imagen]

Una vez ya tengamos un zoom aceptable, seleccionaremos la herramienta
"Editor de atributos" de la barra de herramientas...

[imagen]

Y pulsaremos sobre una carretera.

[imagen]

Nos presenta un formulario para poder ver y modificar los datos asociados a
la geometria que hemos seleccionado.

Bueno, hasta aqui, esto deberia ser mas o menos normal, es una
funcionalidad que ya viene con gvSIG 2.2. Ahora bien, podemos hacer mas
cosas con ella. Si abrimos la tabla de atributos veremos que tiene un campo
"TIPO" y "ESTADO" que se prestan a usar un desplegable para impedir que se
puedan introducir valores incorrectos. Tambien estaria bien poder utilizar
unas etiquetas mas descriptivas para los campos del formulario, o
establecer el orden de estos, que ahora mismo es un tanto aleatorio.

Vamos a ver una serie de cosas que podriamos hacer con ese formulario:

- Establecer listas de valores para los campos "TIPO", "ESTADO" y
"VELOCIDAD".
- Establecer etiquetas personalizadas para los campos.
- Establecer un orden mas amigable de los campos.
- Podemos asociar una descripcion a los campos que nos interese.
- Ocultar el campo "GEOMETRY" ya que no queremos que lo altere el usuario
desde el formulario.

Bien, pues vamos a ver como podemos hacer estas cosas. Lo primero, con la
capa seleccionada iremos al menu herramientas y seleccionaremos la opcion :

  "Herramientas->Editor de atributos->Crear definicion por defecto"

Al pulsar aqui, aparentemente no sucedera nada. Sin embargo nos habra
generado un fichero XML con la definicion del formularios por defecto
asociado a esa capa. Si no hacemos nada mas, no obserbaremos nungun cambio
en el comportamiento de la aplicacion; pero vamos a ver que podemos hacer
con esto.

Abriremos un editor de textos, "Bloc de notas", "GEdit" o "Kate" (no un
procesador como Word o OpenOffice) y nos dispondremos a cargar un archivo
que se habra creado en la carpeta

  "gvSIG/plugins/org.gvsig.attributeeditor.app.mainplugin/definitions"

Dentro de la carpeta de nuestro usuario (normalmente en Windows en
"C:\Users\mi-usuario").
Veremos que en esa carpeta tendremos un archivo

  "carre2009-528ef2f.xml"

Normalmente tendra el nombre de la capa, en nuestro caso "carre2009",
seguido de un codigo identificativo de esta.

Si habrimos el fichero con nuestro editor de textos nos encontraremos algo
como:

<?xml version="1.0"?>
<definitions>
  <version>1.0.0</version>
  <classes>
    <class name="carre2009_528ef2f">
      <extends>
      </extends>
      <description></description>
      <fields>
        <field name="LENGTH" type="Double" mandatory="true"
defaultValue="0.0" order="0" hidden="false">
          <description>LENGTH</description>
        </field>
        <field name="CODIGO" type="String" mandatory="true" defaultValue=""
order="0" hidden="false">
          <description>CODIGO</description>
        </field>
        <field name="ITINERARIO" type="String" mandatory="true"
defaultValue="" order="0" hidden="false">
          <description>ITINERARIO</description>
        </field>
        <field name="TIPO" type="String" mandatory="true" defaultValue=""
order="0" hidden="false">
          <description>TIPO</description>
        </field>
        <field name="TRAMO" type="String" mandatory="true" defaultValue=""
order="0" hidden="false">
          <description>TRAMO</description>
        </field>
        <field name="ESTADO" type="String" mandatory="true" defaultValue=""
order="0" hidden="false">
          <description>ESTADO</description>
        </field>
        <field name="CLASE" type="Double" mandatory="true"
defaultValue="0.0" order="0" hidden="false">
          <description>CLASE</description>
        </field>
        <field name="VELOCIDAD" type="Double" mandatory="true"
defaultValue="0.0" order="0" hidden="false">
          <description>VELOCIDAD</description>
        </field>
        <field name="TIERECSEG" type="Double" mandatory="true"
defaultValue="0.0" order="0" hidden="false">
          <description>TIERECSEG</description>
        </field>
        <field name="GEOMETRY" type="Geometry" mandatory="false" order="0"
hidden="false">
          <description>GEOMETRY</description>
        </field>
      </fields>
    </class>
  </classes>
  </definitions>


Obserbaremos que hay una serie de tags "field" con la informacion de cada
campo que aparece en el formulario, por ejemplo:


        <field name="CODIGO" type="String" mandatory="true" defaultValue=""
order="0" hidden="false">
          <description>CODIGO</description>
        </field>

Aqui tendremos:

- name, que es el nombre del atributo de la tabla. No debemos cambiarlo.
- type, es el tipo de datos. Tampoco deberemos cambiarlo ya que no
concordarian los datos del formulario con los de la table.
- mandatory. Indica si un campo es obligatorio o no. Dependiendo de la
fuente de datos podremos cambiarlo. Suele ser bastante seguro cambiarlo y
ponerlo a "true" si esta a "false", pero al reves hay que hacerlo
conociendo el almacen de datos que tenemos detras. Esto es, si es una tabla
de BBDD y el campo en la BBDD es obligatorio, no deberiamos nunca cambiarlo
y ponerlo a false, ya que cuando un usuario lo deje en blanco fallara al
guardar los datos en la BBDD.
- defaultValue, indica el valor por defecto para este campo.
- order, este si que nos interesara cambiarlo habitualmente. Indica el
orden de los campos a la hora de mostrarlos en el formulario. Veremos que
todos estan a cero. Nosotros lo modificaremos para indicar un numero de
orden distinto para cada uno de los campos de forma que salgan en el orden
que nos interesa.
- hidden, indica si el campo se debe mostrar o no en el formulario.
- description, aqui podemos indicar una descripcion que se mostrara en la
linea inferior del formulario cuando el campo este seleccionado.

Y ademas de estos podemos utilizar un par mas que no estan entre los
valores por defecto:

- label, para indicar una etiqueta a utilizar en el formulario en lugar del
nombre del campo.
- availableValues, para indicar una lista de valores permitidos para ese
campo, normalmente luego se utilizara un desplegable para presentar el
campo en el formulario.


Ahora vamos a ver que tendriamos que hacer. Volviendo con el ejemplo del
campo "CODIGO", podriamos:

- A帽adirle un label
- Ponerle una descripcion mas adecuada
- Establecerle un orden de presentacion.

Lo que quedaria asi:

        <field name="CODIGO" label="Codigo" type="String" mandatory="true"
defaultValue="" order="1" hidden="false">
          <description>Codigo de la carretera</description>
        </field>

Veamos por ejemplo que podriamos hacer con el campo "ESTADO":

        <field name="ESTADO" label="Estado" type="String" mandatory="true"
defaultValue="" order="3" hidden="false">
          <description>Estado de la carretera</description>
          <availableValues>
            <value label="(desconocido)"></value>
            <value label="EN OBRAS">EN OBRAS</value>
            <value label="EN PROYECTO">EN PROYECTO</value>
            <value label="TRAVES脥A">TRAVES脥A</value>
          </availableValues>
        </field>

Aqui hemos a帽adido un label, modificado el orden y la descripcion como con
el campo "CODIGO", y ademas hemos a帽adido una lista de valores permitidos.

Vamos a ver como quedarian todos los cambios en el fichero. Por comodidad
para mi, he reordenado los campos en el orden de visializacion aunque esto
no es necesario, bastaria con asignarle a cada campo el valor de "order"
adecuado.

<?xml version="1.0"?>
<definitions>
  <version>1.0.0</version>
  <classes>
    <class name="carre2009_528ef2f">
      <extends>
      </extends>
      <description></description>
      <fields>
        <field name="CODIGO" label="Codigo" type="String" mandatory="false"
defaultValue="" order="1" hidden="false">
          <description>Codigo de la carretera</description>
        </field>
        <field name="TIPO" label="Tipo" type="String" mandatory="false"
defaultValue="" order="2" hidden="false">
          <description>Tipo de carretera</description>
          <availableValues>
            <value label="(desconocido)"></value>
            <value label="ACCESOS">ACCESOS</value>
            <value label="AUTOPISTA">AUTOPISTA</value>
            <value label="AUTOV脥A">AUTOV脥A</value>
            <value label="CONFEDERACI脫N">CONFEDERACI脫N</value>
            <value label="DPH">DPH</value>
            <value label="DPT">DPT</value>
            <value label="DPZ">DPZ</value>
            <value label="LOCAL">LOCAL</value>
            <value label="NACIONAL">NACIONAL</value>
            <value label="RAA III">RAA III</value>
            <value label="RAA II">RAA II</value>
            <value label="RAA I">RAA I</value>
            <value label="SENDA">SENDA</value>
            <value label="TUNEL">TUNEL</value>
          </availableValues>
        </field>
        <field name="ESTADO" label="Estado" type="String" mandatory="false"
defaultValue="" order="3" hidden="false">
          <description>Estado de la carretera</description>
          <availableValues>
            <value label="(desconocido)"></value>
            <value label="EN OBRAS">EN OBRAS</value>
            <value label="EN PROYECTO">EN PROYECTO</value>
            <value label="TRAVES脥A">TRAVES脥A</value>
          </availableValues>
        </field>
        <field name="VELOCIDAD" label="Velocidad" type="Double"
mandatory="true" defaultValue="0.0" order="4" hidden="false">
          <description>Velocidad maxima permitida</description>
          <availableValues>
            <value label="10">10</value>
            <value label="20">20</value>
            <value label="30">30</value>
            <value label="40">40</value>
            <value label="50">50</value>
            <value label="60">60</value>
            <value label="70">70</value>
            <value label="80">80</value>
            <value label="90">90</value>
            <value label="100">100</value>
            <value label="110">110</value>
            <value label="120">120</value>
          </availableValues>
        </field>
        <field name="TRAMO" label="Tramo" type="String" mandatory="false"
defaultValue="" order="5" hidden="false">
          <description>TRAMO</description>
        </field>
        <field name="CLASE" label="Clase" type="Double" mandatory="true"
defaultValue="0.0" order="6" hidden="false">
          <description>CLASE</description>
        </field>
        <field name="LENGTH" label="Longitud" type="Double"
mandatory="true" defaultValue="0.0" order="7" hidden="false">
          <description>Longitud de la carretera</description>
        </field>
        <field name="ITINERARIO" label="Itinerario" type="String"
mandatory="true" defaultValue="" order="8" hidden="false">
          <description>ITINERARIO</description>
        </field>
        <field name="TIERECSEG" type="Double" mandatory="true"
defaultValue="0.0" order="9" hidden="false">
          <description>TIERECSEG</description>
        </field>
        <field name="GEOMETRY" type="Geometry" mandatory="false" order="10"
hidden="true">
          <description>GEOMETRY</description>
        </field>
      </fields>
    </class>
  </classes>
  </definitions>

Si una vez hechos estos cambios, cerramos y volvemos a arrancar gvSIG, y
repetimos la operacion que hicimos al principio, cargar la capa carre2009,
hacemos zoom, activamos la herramienta del editor de atributos y pulsamos
sobre una carretera, obserbaremos que el formulario que muestra se
presentara ya con los cambios que hemos indicado en nuestro fichero.

A ver si para la proxima version podemos presentar ya directamente los
datos asociados a una capa en modo formulario ademas de como una tabla
usando el mismo mecanismo que usa el editor de atributos.

Un saludo
Joaquin


[/borrador]









> Muchas gracias de nuevo.
> Saludos
>
> El 25 de agosto de 2015, 7:46, Ana Calle <nico200307 en gmail.com> escribi贸:
>
>> Gracias Joaquin,
>> bueno mi idea era como dec铆a cambiar el contenido del panel derecho de la
>> ventana de informaci贸n por punto, por un panel propio de manera que se
>> adec煤e a mis necesidades (b谩sicamente se trata de cambiar las etiquetas, ya
>> que los nombres de los campos no suelen ser intuitivos para e usuario final
>> e introducir ciertas validaciones entre los datos introducidos)
>>
>> Si sugieres 'personalizar' la ventana del editor de atributos, siempre y
>> cuando me permita introducir esas validaciones en el bot贸n de guardar, pues
>> me puedo acoplar. 驴Para cu谩ndo tendr铆as pensado publicar ese art铆culo ?
>>
>> Muchas gracias,
>> Ana
>>
>>
>>
>> El 25 de agosto de 2015, 4:06, Joaquin Jose del Cerro Murciano <
>> jjdelcerro en gvsig.org> escribi贸:
>>
>>>
>>> El 21 de agosto de 2015, 9:41, Ana Calle <nico200307 en gmail.com>
>>> escribi贸:
>>>
>>>> Hola a todos,
>>>> 驴alguien podr铆a aportar alg煤n ejemplo o indicaciones a seguir para
>>>> poder personalizar la ventana de la herramienta informaci贸n por punto?
>>>>
>>>> Necesitar铆a poder colocar en el panel derecho de dicha
>>>> ventana('Identificar Resultados') mi propio formulario para la edici贸n de
>>>> los datos alfanum茅ricos de la capa.
>>>>
>>>> Hola Ana,
>>> si lo que quieres es editar los datos.... 驴 te has planteado que usen la
>>> herramienta del editor de attributos en lugar de la de informacion por
>>> punto ?
>>> Esta precisamente para eso, para que el usuario haga click en un
>>> elemento de la vista y le muestre un formulario para que edite los datos.
>>> Ademas esa herramienta permite una personalizacion limitada del
>>> fomulario (tengo a medias un articulo contando como hacerlo).
>>>
>>> La herramienta de informacion por punto no permite una personalizacion
>>> sencilla del formulario, basicamente lo que puedes hacer es cambiarlo.
>>>
>>> un saludo
>>> Joaquin
>>>
>>>
>>>
>>>> Muchas gracias de antemano.
>>>> Saludos
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> gvSIG_desarrolladores mailing list
>>>> 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:
>>>> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>>>
>>>>
>>>
>>>
>>> --
>>> --------------------------------------
>>> Joaquin Jose del Cerro Murciano
>>> Development and software arquitecture manager at gvSIG Team
>>> jjdelcerro en gvsig.com
>>> jjdelcerro en gvsig.org
>>> gvSIG Association
>>> www.gvsig.com
>>> www.gvsig.org
>>>
>>> _______________________________________________
>>> gvSIG_desarrolladores mailing list
>>> 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:
>>> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>>
>>>
>>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> 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:
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
jjdelcerro en gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
------------ pr髕ima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20150827/83aaa52c/attachment.htm 


M醩 informaci髇 sobre la lista de distribuci髇 gvSIG_desarrolladores