Douglas-Peucker transfer-node elimination on pre-processor level
This commit is contained in:
parent
aa7bb37a99
commit
d2aaeb2988
3 changed files with 22 additions and 1 deletions
|
@ -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.;
|
||||
|
|
|
@ -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++ )
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue