01: package org.openjump.sigle.utilities.geom;
02:
03: import java.util.ArrayList;
04: import java.util.Iterator;
05:
06: import com.vividsolutions.jts.geom.GeometryCollection;
07: import com.vividsolutions.jump.feature.Feature;
08: import com.vividsolutions.jump.feature.FeatureCollection;
09: import com.vividsolutions.jump.feature.FeatureSchema;
10:
11: /**
12: * @author Erwan Bocher
13: * @author Olivier Bedel
14: * Created on 10 août 2005
15: * Bassin Versant du Jaudy-Guindy-Bizien,
16: * Laboratoire RESO UMR ESO 6590 CNRS, Université de Rennes 2
17: * licence Cecill
18: *
19: * Cette classe permet de savoir si la feature collection est composée d'une seule géometrie et dans ce cas le type de géometrie
20: *
21: */
22:
23: public class FeatureCollectionUtil {
24:
25: // renvoie la dimension des entites de la featureCollection fc :
26: // 0 pour si fc ne contient que des entites ponctuelles
27: // 1 pour si fc ne contient que des entites lineaires
28: // 2 pour si fc ne contient que des entites surfaciques
29: // -1 si fc ne contient aucune entite, ou si elle contient des entites
30: // ayant des dimensions differentes
31:
32: public static int getFeatureCollectionDimension(FeatureCollection fc) {
33: int type = -1; // type des geometry des entites de la featurecollection
34: // -1 correspond au type complexe
35: // (plusieurs dimensions de geometry dans la meme featureCollection)
36:
37: if (fc.getFeatures().size() > 0) {
38: Iterator i = fc.getFeatures().iterator();
39:
40: // initialisation des la variable type
41: Feature f = (Feature) i.next();
42: type = f.getGeometry().getDimension();
43: // cas particulier des geometryCollection
44: if (f.getGeometry() instanceof GeometryCollection) {
45: GeometryCollection geomCol = (GeometryCollection) f
46: .getGeometry();
47: // on ne prend en compte que les geometryCollection non specialisees, ie pas les
48: // multipoint, multilinstring ou multipolygon
49: if (geomCol.getGeometryType().equalsIgnoreCase(
50: "GeometryCollection"))
51: type = -1;
52: }
53:
54: // on parcourt le reste des entites de la featureCollection
55: while (i.hasNext() && type != -1) {
56: f = (Feature) i.next();
57: // si la geometrie de f est complexe, on marque le type comme complexe
58: if (f.getGeometry() instanceof GeometryCollection) {
59: GeometryCollection geomCol = (GeometryCollection) f
60: .getGeometry();
61: if (geomCol.getGeometryType().equalsIgnoreCase(
62: "GeometryCollection"))
63: type = -1;
64: }
65: // si sa dimension ne correspond pas au
66: // type precedent, on marque le type comme complexe
67: if (f.getGeometry().getDimension() != type)
68: type = -1;
69: }
70: }
71:
72: return type;
73: }
74:
75: public static ArrayList getAttributesList(FeatureCollection fc) {
76:
77: ArrayList AttributesList = new ArrayList();
78: FeatureSchema fs = fc.getFeatureSchema();
79:
80: for (int i = 0; i < fs.getAttributeCount() - 1; i++) {
81:
82: AttributesList.add(fs.getAttributeName(i));
83:
84: }
85:
86: return AttributesList;
87:
88: }
89: }
|