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

Reply via email to