/* * Bassin Versant du Jaudy-Guindy-Bizien, * Laboratoire RESO UMR ESO 6590 CNRS, Universitë de Rennes 2 * licence Cecill */ package org.openjump.sigle.utilities.geom; import java.util.ArrayList; import java.util.Iterator; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jump.feature.Feature; import com.vividsolutions.jump.feature.FeatureCollection; import com.vividsolutions.jump.feature.FeatureSchema; /** * This class can check if a FeatureCollection has only one Geometry Type * and in this case, return this Geometry Type. * * @author Erwan Bocher * @author Olivier Bedel * @version 2005-08-10 * */ public class FeatureCollectionUtil { // renvoie la dimension des entites de la featureCollection fc : // 0 pour si fc ne contient que des entites ponctuelles // 1 pour si fc ne contient que des entites lineaires // 2 pour si fc ne contient que des entites surfaciques // -1 si fc ne contient aucune entite, ou si elle contient des entites // ayant des dimensions differentes public static int getFeatureCollectionDimension(FeatureCollection fc) { int type = -1; // type des geometry des entites de la featurecollection // -1 correspond au type complexe // (plusieurs dimensions de geometry dans la meme featureCollection) if (fc.getFeatures().size()>0) { Iterator i = fc.getFeatures().iterator(); // initialisation des la variable type Feature f = (Feature) i.next(); type = f.getGeometry().getDimension(); // cas particulier des geometryCollection if (f.getGeometry() instanceof GeometryCollection) { GeometryCollection geomCol = (GeometryCollection) f.getGeometry(); // on ne prend en compte que les geometryCollection non specialisees, ie pas les // multipoint, multilinstring ou multipolygon if (geomCol.getGeometryType().equalsIgnoreCase("GeometryCollection")) type = -1; } // on parcourt le reste des entites de la featureCollection while (i.hasNext() && type !=-1) { f = (Feature) i.next(); // si la geometrie de f est complexe, on marque le type comme complexe if (f.getGeometry() instanceof GeometryCollection) { GeometryCollection geomCol = (GeometryCollection) f.getGeometry(); if (geomCol.getGeometryType().equalsIgnoreCase("GeometryCollection")) type = -1; } // si sa dimension ne correspond pas au // type precedent, on marque le type comme complexe if (f.getGeometry().getDimension() != type) type = -1; } } return type; } public static ArrayList getAttributesList(FeatureCollection fc) { ArrayList AttributesList = new ArrayList(); FeatureSchema fs = fc.getFeatureSchema(); for (int i=0; i<fs.getAttributeCount()-1;i++){ AttributesList.add(fs.getAttributeName(i)); } return AttributesList; } }