Douglas-Peucker transfer-node elimination on pre-processor level

This commit is contained in:
Arndt Brenschede 2019-08-04 10:22:50 +02:00
parent aa7bb37a99
commit d2aaeb2988
3 changed files with 22 additions and 1 deletions

View file

@ -16,6 +16,25 @@ public class DPFilter
/*
* for each node (except first+last), eventually set the DP_SURVIVOR_BIT
*/
public static void doDPFilter( ArrayList<OsmNodeP> 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<OsmNodeP> nodes, int first, int last )
{
double maxSqDist = -1.;

View file

@ -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<linkNodes.size()-1; i++ )
{

View file

@ -237,6 +237,7 @@ public class WayLinker extends MapCreatorBase
{
r.fromLon = n1.ilon;
r.fromLat = n1.ilat;
n1.bits |= OsmNodeP.DP_SURVIVOR_BIT;
}
}
if ( r.toWid == wid )
@ -245,6 +246,7 @@ public class WayLinker extends MapCreatorBase
{
r.toLon = n1.ilon;
r.toLat = n1.ilat;
n1.bits |= OsmNodeP.DP_SURVIVOR_BIT;
}
}
r = r.next;