Personal tools
gvSIG Desktop
gvSIG Desktop

Cached time 11/21/13 17:36:17 Clear cache and reload

 
.. include-document:: org.gvsig.fmap.dal/reference-links
   :rest:

.. include-document:: org.gvsig.tools/reference-links
   :rest:


Para consultar la estructura de los fenómenos de un almacén, FeatureStore_, 
dispone de dos acciones:

* getDefaultFeatureType_, que devuelve el tipo de fenómeno
  por defecto del almacén

* getFeatureTypes_ que devuelve una lista con todos los tipos
  de fenómeno que hay en el almacén.

Las primeras preguntas que tendemos ha hacernos cuando vemos estos métodos
son:

* ¿ qué es eso del tipo de fenómeno por defecto ?

* ¿ Por qué una lista de tipos de fenómenos ?

Las dos preguntas van estrechamente ligadas.

Normalmente estamos acostumbrados a encontrarnos *almacenes* como
ficheros *shapes*, *dxf*, *dgn* o bases de datos como *postgreSQL* en los que
los fenómenos tienen una estructura común a todo el almacén. Sin embargo
hay escenarios en los que eso puede no ser así. Por ejemplo, podemos encontrarnos
un fichero GML en el que los fenómenos tienen dos, tres o mas estructuras distintas
a lo largo el fichero. La forma de consultar cual es la estructura de los
fenómenos seria a través del método getFeatureTypes_ , que nos dará una lista
con un FeatureType_ por cada tipo de fenómeno del almacén. 
Como durante mucho tiempo hemos manejado almacenes que solo soportan un tipo
de fenómeno, se ha introducido el método getDefaultFeatureType_ en el almacén para
facilitar el acceso al FeatureType_ cuando solo existe un tipo de fenómeno. 

¿ Y qué pasa si invocamos al *getDefaultFeatureType* sobre un almacén con varios
tipos de fenómenos ?

Este nos devolverá un FeatureType_ de forma arbitraria dependiendo del tipo de 
almacén con el que estemos trabajando.

En general, a no ser que estemos seguros de que solo hay un tipo de fenómenos en el 
almacén deberemos usar getFeatureTypes_ para acceder a la estructura de estos.
Siempre podemos consultar el *size* de la lista para determinar cuantos tipos de 
fenómeno tenemos.

Una vez hemos conseguido un FeatureType_, podemos pensar en el como en una lista de
descriptores de los atributos del fenómeno, disponiendo de un método *size* que nos
dice cuantos atributos tiene el fenómeno que describe, un método *get* que nos 
devolverá un FeatureAttributeDescriptor_, por nombre o índice, o un iterador sobre
estos.

Veamos cuales son las principales acciones que podemos encontrarnos en un FeatureType_ 
que nos permitan interrogarle para saber de la estructura
del fenómeno:

* *size*, nos devuelve el numero de atributos que tiene el fenómeno.

* *get*, que dándole un nombre o un índice de atributo nos devolverá
  un descripción de las propiedades del atributo, FeatureAttributeDescriptor_ . 

* *getIndex*, que dándole un nombre de atributo nos devuelve el índice
  de este.

* *getDefaultGeometryAttributeName*, nos da el nombre del atributo que es
  la geometría por defecto de este almacén. Normalmente gvSIG pintará esta
  geometría cuando tenga que obtener una representación gráfica del almacén.

* *getDefaultGeometryAttributeIndex*, nos da el índice del atributo que es
  la geometría por defecto de este almacén.

* *getDefaultSRS*. Nos devuelve la cadena que representa al SRS de la geometría
  por defecto.

* *getSRSs*. Un fenómeno puede contener mas de un atributo de tipo geometría, 
  y cada atributo de tipo geometría puede tener un SRS diferente. Este método
  nos devolverá una lista con los SRSs de todos los atributos de tipo geometría.

* *iterator*. Nos devuelve un iterador sobre los descriptores de atributos del
  fenómeno.

Conviene también dar un vistazo, aunque sea superficial, a los principales métodos
u operaciones que podemos encontrar en el FeatureAttributeDescriptor_.

* *getName*, que nos informara sobre el nombre del atributo.

* *getDataType* y *getDataTypeName*, que nos dirá de que tipo son los 
  datos asociados al atributo. La lista de tipos soportados están definidos
  en el interface DataTypes_ .

* *getDefaultValue*, nos dirá cual es el valor por defecto del atributo.

* *getIndex*, nos dirá el índice numérico asociado al atributo.

* *getSize*, para los tipos de datos que lo precisen , por ejemplo las
  cadenas, nos informa de cual es su tamaño.

* *getEvaluator*, que nos devolverá una instancia del Evaluator_ asociado
  al atributo, en caso de que este sea un atributo calculado.

* *allowNull*, nos informa de si ese atributo permite o no valores nulos.

* *isPrimaryKey*, nos dirá si ese atributo forma parte de la clave
  primaria que usa el proveedor de datos para identificar al fenómeno.

* *isReadOnly*, que nos dirá si ese atributo puede ser actualizado o no.


Veamos ahora un pequeño ejemplo en el que se nos muestra como podemos obtener
el nombre de los atributos y su tipo de datos asociados a un FeatureType_.

.. code-block:: java

  FeatureType featureType = store.getDefaultFeatureType();
  Iterator it = featureType.iterator();
  while( it.hasNext() ) {
    attribute = (FeatureAttributeDescriptor)it.next();
    System.out.print(attribute.getDataTypeName();
    if( attribute.getSize() > 1 ) {
      System.out.print("["+attribute.getSize()+"]");
    }
    System.out.print(" " + attribute.getName() );
    Evaluator eval = attribute.getEvaluator();
    if( eval != null ) {
      System.out.print(attribute.getName()+", "+attribute.getDataTypeName()+" -- Calculado "+ eval.getCQL());
    } 
    System.out.println();
  }

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: