Personal tools
gvSIG Desktop
gvSIG Desktop

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

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

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


Dentro de este apartado veremos:

* Como obtener un conjunto de fenómenos filtrando
  por tipo de fenómeno.

* Como obtener un conjunto de fenómenos filtrando
  por una condición en función de los atributos
  de los fenómenos.


Vamos a seguir trabajando sobre el ejemplo que hemos estado viendo en el
apartado anterior.  ¿ Como podemos obtener un subconjunto de fenómenos de
nuestro almacén ?

Para aplicar un filtro, este se aplicara en el momento de invocar al
método *getFeatureSet* de nuestro *almacén*. Para esto deberemos
construir un objeto FeatureQuery_ , rellenarlo con los valores con los
que queremos filtrar e invocar al *getFeatureSet* pasándole
ese *query*.

A la hora de filtrar los fenómenos de un almacén de datos, podemos hacerlo
llevándonos de dos tipos de criterios:

* Según el tipo de fenómeno

* O según una condición de filtro en función de los valores
  de los fenómenos del almacén.

Por ejemplo podríamos asegurarnos que cuando nos recorremos los fenómenos
siempre nos da fenómenos del mismo tipo, para ello podríamos hacer:

.. code-block:: java

  types = store.getFeatureTypes();
  Iterator typesIterator = types.iterator();
  while( typesIterator.hasNext() ) {
    featureType = (FeatureType)typesIterator.next();
    index = featureType.getFieldIndex("NOMBRE");

    FeatureQuery query = store.createFeatureQuery();
    query.setFeatureType(featureType);
    features = store.getFeatureSet(query);

    DisposableIterator featuresIterator = features.iterator();
    while( featuresIterator.hasNext() ) {
      feature = (Feature)featuresIterator.next();
      System.out.println(feature.getString(index));
    }
    featuresIterator.dispose();
    features.dispose();
  }


Primero averiguamos los tipos de fenómenos que contiene nuestro almacén,
y luego obtenemos los fenómenos filtrando por tipo. Para filtrar creamos
un FeatureQuery_ a partir del *store*.

.. code-block:: java

    FeatureQuery query = store.createFeatureQuery();

Indicamos que queremos filtrar por los fenómenos de un tipo
en concreto.

.. code-block:: java

    query.setFeatureType(featureType):

y por ultimo creamos el conjunto de fenómenos usando ese
filtro.

.. code-block:: java

    features = store.getFeatureSet(query);

Al igual que podiamos emplear *visitor* sobre un almacen para 
acceder a sus fenomenos, cuando estamos aplicando un filtro 
tambien podemos usar el concepto de *visitor*, ya que el 
almacen dispone de un metodo *acept* que recibe un query.

.. code-block:: java

  store.accept( new Visitor() {
      public void visit(Object obj) {
        ..
      }
    },
    query 
  );

De forma similar a como filtramos por el tipo de fenómeno podemos
filtrar por una expresión en función de los atributos de los
fenómenos. Para ello deberemos crear un objeto Evaluator_ con la
condición que deseemos. Así el código de filtrado podría ser:

.. code-block:: java

    FeatureQuery query = store.createFeatureQuery();
    query.setFilter( manager.createExpresion("NOMBRE like 'a%'") );
    features = store.getFeatureSet(query);

    ...

    features.dispose();

Hay que tener en cuenta que podemos mezclar los dos tipos de filtro,
filtrando a su vez por los tipo de fenómeno y por una expresión.

.. code-block:: java

    FeatureQuery query = store.createFeatureQuery();
    query.setFilter( manager.createExpresion("NOMBRE like 'a%'") );
    query.setFeatureType(featureType):
    features = store.getFeatureSet(query);
    
    ...

    features.dispose();

A la hora de aplicar un filtro a un *query*, debemos entregarle un objeto
de tipo Evaluator_ . El DataManager_  dispone de un evaluador por defecto
para la evaluación de expresiones, pero se pueden utilizar evaluadores
especializados para obtener mejores rendimientos.

Puede ser conveniente repasar la referencia sobre:

* FeatureQuery_

* Evaluator_

* DataManager_

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: