diff gnv-artifacts/src/main/java/de/intevation/gnv/math/GridCell.java @ 517:96a1e92e7ed2

If the number of data points to generate a "Horizontalschnitt" is above a given threshold, they are culled against an 5% extented bounding box of the interpolation area. gnv-artifacts/trunk@611 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 23 Jan 2010 17:42:04 +0000
parents d9d933e06875
children 4e347624ee7c
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/GridCell.java	Sat Jan 23 14:03:26 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/GridCell.java	Sat Jan 23 17:42:04 2010 +0000
@@ -16,12 +16,16 @@
 import java.util.HashMap;
 import java.util.List;
 
+import org.apache.log4j.Logger;
+
 /**
  *  @author Sascha L. Teichmann (sascha.teichmann@intevation.de)
  */
 public class GridCell
 implements   Serializable
 {
+    private static Logger log = Logger.getLogger(GridCell.class);
+
     public static final class CellFinder
     implements                ItemVisitor
     {
@@ -85,6 +89,13 @@
     public static List<GridCell> pointsToGridCells(
         List<? extends Point2d> points
     ) {
+        return pointsToGridCells(points, null);
+    }
+
+    public static List<GridCell> pointsToGridCells(
+        List<? extends Point2d> points,
+        Envelope                relevantArea
+    ) {
         int minI = Integer.MAX_VALUE;
         int maxI = Integer.MIN_VALUE;
         int minJ = Integer.MAX_VALUE;
@@ -93,8 +104,15 @@
         HashMap<Integer, HashMap<Integer, Point2d>> rows =
             new HashMap<Integer, HashMap<Integer, Point2d>>();
 
+        int culled = 0;
+
         for (Point2d p: points) {
 
+            if (relevantArea != null && !relevantArea.contains(p.x, p.y)) {
+                ++culled;
+                continue;
+            }
+
             if (p.i < minI) minI = p.i;
             if (p.i > maxI) maxI = p.i;
             if (p.j < minJ) minJ = p.j;
@@ -109,6 +127,10 @@
             row.put(p.j, p);
         }
 
+        if (log.isDebugEnabled()) {
+            log.debug("culled points: " + culled);
+        }
+
         ArrayList<GridCell> cells = new ArrayList<GridCell>(points.size());
 
         for (int i = minI + 1; i <= maxI; ++i) {

http://dive4elements.wald.intevation.org