From: <emm...@us...> - 2008-11-05 10:36:18
|
Revision: 4167 http://fudaa.svn.sourceforge.net/fudaa/?rev=4167&view=rev Author: emmanuel_martin Date: 2008-11-05 10:36:07 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Ajout de le la position lors de l'enregistrement Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java 2008-11-04 17:46:05 UTC (rev 4166) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java 2008-11-05 10:36:07 UTC (rev 4167) @@ -88,18 +88,24 @@ final FeatureType type = _coll.getSchema(); final int initAttributeCount = type.getAttributeCount(); final List atts = new ArrayList(initAttributeCount); + int indexGeomAttr=-1; // Index de l'attribut n\xE9c\xE9ssaire au classement de la g\xE9om\xE9trie dans la zone final TIntArrayList idxInFeature = new TIntArrayList(initAttributeCount); for (int i = 0; i < initAttributeCount; i++) { final GISAttributeInterface att = GISLib.createAttributeFrom(type.getAttributeType(i)); - if (att != null) { - atts.add(att); - idxInFeature.add(i); + if (att != null){ + if(att.getName().equals("IndexGeometry")) + indexGeomAttr=i; + else{ + atts.add(att); + idxInFeature.add(i); + } } } final GISAttributeInterface[] finalAtt = (GISAttributeInterface[]) atts.toArray(new GISAttributeInterface[atts .size()]); final int finalAttributeCount = finalAtt.length; final List geom = new ArrayList(); + final List<Integer> indexGeom=new ArrayList<Integer>(); final List[] values = new ArrayList[finalAttributeCount]; for (int i = values.length - 1; i >= 0; i--) { values[i] = new ArrayList(); @@ -111,8 +117,43 @@ for (int i = 0; i < finalAttributeCount; i++) { values[i].add(f.getAttribute(idxInFeature.getQuick(i))); } - + if(indexGeomAttr!=-1) + indexGeom.add((Integer) f.getAttribute(indexGeomAttr)); } + + if (indexGeomAttr!=-1) { + // Classement des g\xE9om\xE9tries en fonction de leur index \\ + /* + * L'algorithme utilis\xE9 est simple : pour chaque index on permute le + * contenu de cet index dans la case correspondant \xE0 ce contenu. Et cela + * tant que le contenu de la case ne correspond pas \xE0 son index. Exemple : + * [1, 2, 0, 4, 3] => i=0; permutation index : 0 avec 1 + * [2, 1, 0, 4, 3] => i=0; permutation index : 0 avec 2 + * [2, 1, 0, 4, 3] => i=1; + * [2, 1, 0, 4, 3] => i=2; + * [0, 1, 2, 4, 3] => i=3; permutation index : 3 avec 4 + * [0, 1, 2, 3, 4] => i=4; fin (le traitement du dernier index n'est jamais utile) + */ + for (int i=0; i<indexGeom.size(); i++) { + while (i!=indexGeom.get(i).intValue()) { + int j=indexGeom.get(i); + // permutation entre i et j dans indexGeom + indexGeom.set(i, indexGeom.get(j)); + indexGeom.set(j, j); + // permutation entre i et j dans geom + Object tmpGeom=geom.get(i); + geom.set(i, geom.get(j)); + geom.set(j, tmpGeom); + // permutation entre i et j dans values + for (int k=0; k<values.length; k++) { + Object tmpValue=values[k].get(i); + values[k].set(i, values[k].get(j)); + values[k].set(j, tmpValue); + } + } + } + } + final Object[][] finalValues = new Object[values.length][geom.size()]; for (int i = finalValues.length - 1; i >= 0; i--) { finalValues[i] = values[i].toArray(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java 2008-11-04 17:46:05 UTC (rev 4166) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java 2008-11-05 10:36:07 UTC (rev 4167) @@ -69,7 +69,7 @@ } final int size = attribute.size(); // on construit les attributs que vont bien - final AttributeType[] atts = new AttributeType[1 + size]; + final AttributeType[] atts = new AttributeType[2 + size]; // le premier correspond a la geometrie atts[0] = AttributeTypeFactory.newAttributeType(BasicFeatureTypes.GEOMETRY_ATTRIBUTE_NAME, Geometry.class); @@ -81,6 +81,8 @@ .getDataClass(), true, 18); _attrIdx.put(atts[i + 1], posInZone); } + // Le dernier correspond \xE0 l'index de la g\xE9om\xE9trie dans la GISZone + atts[atts.length-1]=AttributeTypeFactory.newAttributeType("IndexGeometry", Integer.class); return atts; } @@ -155,9 +157,11 @@ } final Feature feature = writer.next(); feature.setDefaultGeometry(_zone.getGeometry(i)); - for (int j = 1; j < nbAttribute; j++) { + for (int j = 1; j < nbAttribute-1; j++) { feature.setAttribute(j, _zone.getModel(attIdx.get(atts[j])).getObjectValueAt(i)); } + // Enregistrement de l'index de la g\xE9om\xE9trie dans le fichier + feature.setAttribute(nbAttribute-1, new Integer(i)); writer.write(); up.majAvancement(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |