Interesting. Thanks MIchael! I will study this modification... (Integer(ID) was a left over from an old code.....) Peppe
Il giorno mer 11 nov 2020 alle ore 12:02 jump-pilot-svn--- via Jump-pilot-devel <jump-pilot-devel@lists.sourceforge.net> ha scritto: > Revision: 6621 > http://sourceforge.net/p/jump-pilot/code/6621 > Author: michaudm > Date: 2020-11-11 11:01:59 +0000 (Wed, 11 Nov 2020) > Log Message: > ----------- > Fix #510 + acceleration > > Modified Paths: > -------------- > > core/trunk/src/org/openjump/core/rasterimage/algorithms/VectorizeAlgorithm.java > > Modified: > core/trunk/src/org/openjump/core/rasterimage/algorithms/VectorizeAlgorithm.java > =================================================================== > --- > core/trunk/src/org/openjump/core/rasterimage/algorithms/VectorizeAlgorithm.java > 2020-11-11 10:30:58 UTC (rev 6620) > +++ > core/trunk/src/org/openjump/core/rasterimage/algorithms/VectorizeAlgorithm.java > 2020-11-11 11:01:59 UTC (rev 6621) > @@ -3,8 +3,7 @@ > import java.awt.Point; > import java.awt.geom.Point2D; > import java.awt.image.DataBuffer; > -import java.util.ArrayList; > -import java.util.Collections; > +import java.util.*; > > import org.openjump.core.rasterimage.sextante.OpenJUMPSextanteRasterLayer; > import > org.openjump.core.rasterimage.sextante.rasterWrappers.GridWrapperNotInterpolated; > @@ -43,24 +42,21 @@ > > public static WorkbenchFrame frame = > JUMPWorkbench.getInstance().getFrame(); > > - private static int arrPos(int valIn, double[] arrayIn) { > + //private static int arrPos(double valIn, double[] arrayIn) { > + // for (int i = 0; i < arrayIn.length; i++) { > + // if (arrayIn[i] == valIn) { > + // return i; > + // } > + // } > + // return -1; > + //} > > - int valOut = -9999; > - for (int i = 0; i < arrayIn.length; i++) { > - if (arrayIn[i] == valIn) { > - valOut = i; > - break; > - } > - } > - return valOut; > - } > - > /** > * Create a FeatureCollection of polygons defining a > GridWrapperNotInterpolated and number of band > * AdbToolbox algorithm > - * @param gwrapper. GridWrapperNotInterpolated > - * @param explodeMultipolygons. Explode MultiPolygons in Polygons > - * @param band. Number of band (0,1,2,etc) > + * @param gwrapper GridWrapperNotInterpolated > + * @param explodeMultipolygons Explode MultiPolygons in Polygons > + * @param band Number of band (0,1,2,etc) > * @return > */ > public static FeatureCollection toPolygonsAdbToolBox( > @@ -74,11 +70,12 @@ > // Find unique values > final double[] uniqueVals = findUniqueVals(gwrapper, noData, > band); > final int uniqueValsCount = uniqueVals.length; > + final Map<Double,Integer> index = index(uniqueVals); > // Scan lines > @SuppressWarnings("unchecked") > final ArrayList<Polygon>[] arrAll = new > ArrayList[uniqueValsCount]; > for (int i = 0; i < arrAll.length; i++) { > - arrAll[i] = new ArrayList<Polygon>(); > + arrAll[i] = new ArrayList<>(); > } > final Coordinate[] coords = new Coordinate[5]; > final PackedCoordinateSequenceFactory pcsf = new > PackedCoordinateSequenceFactory(); > @@ -110,7 +107,8 @@ > final CoordinateSequence cs = pcsf.create(coords); > lr = new LinearRing(cs, geomFactory); > polygon = new Polygon(lr, null, geomFactory); > - arrAll[arrPos((int) oldVal, > uniqueVals)].add(polygon); > + //arrAll[arrPos((int) oldVal, > uniqueVals)].add(polygon); > + arrAll[index.get(oldVal)].add(polygon); > } > oldVal = val; > cStart = c; > @@ -134,7 +132,7 @@ > for (int g = 0; g < geom.getNumGeometries(); g++) { > feature = new BasicFeature(featSchema); > feature.setGeometry(geom.getGeometryN(g)); > - feature.setAttribute(1, new Integer(ID)); > + feature.setAttribute(1, ID); > feature.setAttribute(2, uniqueVals[i]); > featColl.add(feature); > ID++; > @@ -141,7 +139,7 @@ > } > } else { > feature = new BasicFeature(featSchema); > - feature.setAttribute(1, new Integer(ID)); > + feature.setAttribute(1, ID); > feature.setGeometry(geom); > feature.setAttribute(2, uniqueVals[i]); > featColl.add(feature); > @@ -183,6 +181,14 @@ > return uniqueVals; > } > > + private static Map<Double,Integer> index(double[] values) { > + Map<Double,Integer> map = new HashMap<>(values.length); > + for (int i = 0 ; i < values.length ; i++) { > + map.put(values[i],i); > + } > + return map; > + } > + > private static int[][] m_Lock; > private static char[][] m_Area; > private static int m_iNX; > > > > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >
_______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel