From d2aaeb2988b95d7be3c9601faa4e1cb6e2132ae4 Mon Sep 17 00:00:00 2001 From: Arndt Brenschede Date: Sun, 4 Aug 2019 10:22:50 +0200 Subject: [PATCH] Douglas-Peucker transfer-node elimination on pre-processor level --- .../main/java/btools/mapcreator/DPFilter.java | 19 +++++++++++++++++++ .../main/java/btools/mapcreator/OsmNodeP.java | 2 +- .../java/btools/mapcreator/WayLinker.java | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/brouter-map-creator/src/main/java/btools/mapcreator/DPFilter.java b/brouter-map-creator/src/main/java/btools/mapcreator/DPFilter.java index b23d50b..2310fd1 100644 --- a/brouter-map-creator/src/main/java/btools/mapcreator/DPFilter.java +++ b/brouter-map-creator/src/main/java/btools/mapcreator/DPFilter.java @@ -16,6 +16,25 @@ public class DPFilter /* * for each node (except first+last), eventually set the DP_SURVIVOR_BIT */ + public static void doDPFilter( ArrayList nodes ) + { + int first = 0; + int last = nodes.size()-1; + while( first < last && (nodes.get(first+1).bits & OsmNodeP.DP_SURVIVOR_BIT) != 0 ) + { + first++; + } + while( first < last && (nodes.get(last-1).bits & OsmNodeP.DP_SURVIVOR_BIT) != 0 ) + { + last--; + } + if ( last - first > 1 ) + { + doDPFilter( nodes, first, last ); + } + } + + public static void doDPFilter( ArrayList nodes, int first, int last ) { double maxSqDist = -1.; diff --git a/brouter-map-creator/src/main/java/btools/mapcreator/OsmNodeP.java b/brouter-map-creator/src/main/java/btools/mapcreator/OsmNodeP.java index dd70c65..1fa1fd0 100644 --- a/brouter-map-creator/src/main/java/btools/mapcreator/OsmNodeP.java +++ b/brouter-map-creator/src/main/java/btools/mapcreator/OsmNodeP.java @@ -252,7 +252,7 @@ public class OsmNodeP extends OsmLinkP mc.writeModeAndDesc( isReverse, link0.descriptionBitmap ); if ( !isReverse && linkNodes.size() > 2 ) // write geometry for forward links only { - DPFilter.doDPFilter( linkNodes, 0, linkNodes.size()-1 ); + DPFilter.doDPFilter( linkNodes ); origin = this; for( int i=1; i