Personal tools
gvSIG Desktop
gvSIG Desktop

Cached time 11/21/13 11:24:39 Clear cache and reload

 

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:

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.

FeatureQuery query = store.createFeatureQuery();

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

query.setFeatureType(featureType):

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

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.

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:

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.

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:


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: