diff flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java @ 5083:7bbee0cfc171 slt-simplify-cross-sections

Added experimental Douglas Peuker simplification of cross sections.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 24 Feb 2013 17:29:52 +0100
parents 05ff91146ddd
children ca45dd039b54
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Sun Feb 24 13:03:44 2013 +0100
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Sun Feb 24 17:29:52 2013 +0100
@@ -1,23 +1,9 @@
 package de.intevation.flys.importer;
 
-import java.io.File;
-import java.io.IOException;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.exception.ConstraintViolationException;
+import de.intevation.artifacts.common.utils.FileTools.HashedFile;
 
 import de.intevation.artifacts.common.utils.FileTools;
-import de.intevation.artifacts.common.utils.FileTools.HashedFile;
+
 import de.intevation.flys.importer.parsers.AnnotationClassifier;
 import de.intevation.flys.importer.parsers.AnnotationsParser;
 import de.intevation.flys.importer.parsers.BedHeightEpochParser;
@@ -39,9 +25,32 @@
 import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser;
 import de.intevation.flys.importer.parsers.WaterlevelParser;
 import de.intevation.flys.importer.parsers.WstParser;
+
 import de.intevation.flys.model.River;
 import de.intevation.flys.model.Unit;
 
+import de.intevation.flys.utils.DouglasPeuker;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.sql.SQLException;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+
+import org.hibernate.exception.ConstraintViolationException;
+
 
 /** Import all river-related data (files) that can be found. */
 public class ImportRiver
@@ -159,9 +168,11 @@
 
 
     /** Callback-implementation for CrossSectionParsers. */
-    class ImportRiverCrossSectionParserCallback implements CrossSectionParser.Callback {
-        Set<HashedFile> files = new HashSet<HashedFile>();
-        String type;
+    private class ImportRiverCrossSectionParserCallback
+    implements    CrossSectionParser.Callback {
+
+        private Set<HashedFile> files = new HashSet<HashedFile>();
+        private String type;
 
 
         /**
@@ -185,7 +196,7 @@
 
 
         /** Add crosssection. */
-        public void    parsed(CrossSectionParser parser) {
+        public void parsed(CrossSectionParser parser) {
            log.debug("callback from " + type + " parser");
 
            addCrossSections(parser);
@@ -941,14 +952,20 @@
         List<ImportCrossSectionLine> lines =
             new ArrayList<ImportCrossSectionLine>(data.size());
 
+        Double simplificationEpsilon =
+            Config.INSTANCE.getCrossSectionSimplificationEpsilon();
+
         for (Map.Entry<Double, List<XY>> entry: data.entrySet()) {
             Double   km     = entry.getKey();
             List<XY> points = entry.getValue();
+            if (simplificationEpsilon != null) {
+                points = DouglasPeuker.simplify(points, simplificationEpsilon);
+            }
             lines.add(new ImportCrossSectionLine(km, points));
         }
 
         crossSections.add(new ImportCrossSection(
-            ImportRiver.this, description, ti, lines));
+            this, description, ti, lines));
     }
 
     /** Create a W80 Parser and parse w80 files found. */
@@ -1080,7 +1097,10 @@
     }
 
     public void storeCrossSections() {
-        if (!Config.INSTANCE.skipPRFs() || !Config.INSTANCE.skipDA66s() || !Config.INSTANCE.skipDA50s() || !Config.INSTANCE.skipW80s()) {
+        if (!Config.INSTANCE.skipPRFs()
+        ||  !Config.INSTANCE.skipDA66s()
+        ||  !Config.INSTANCE.skipDA50s()
+        ||  !Config.INSTANCE.skipW80s()) {
             log.info("store cross sections");
             getPeer();
             for (ImportCrossSection crossSection: crossSections) {

http://dive4elements.wald.intevation.org