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
|
* 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 )
|
public static void doDPFilter( ArrayList<OsmNodeP> nodes, int first, int last )
|
||||||
{
|
{
|
||||||
double maxSqDist = -1.;
|
double maxSqDist = -1.;
|
||||||
|
|
|
@ -252,7 +252,7 @@ public class OsmNodeP extends OsmLinkP
|
||||||
mc.writeModeAndDesc( isReverse, link0.descriptionBitmap );
|
mc.writeModeAndDesc( isReverse, link0.descriptionBitmap );
|
||||||
if ( !isReverse && linkNodes.size() > 2 ) // write geometry for forward links only
|
if ( !isReverse && linkNodes.size() > 2 ) // write geometry for forward links only
|
||||||
{
|
{
|
||||||
DPFilter.doDPFilter( linkNodes, 0, linkNodes.size()-1 );
|
DPFilter.doDPFilter( linkNodes );
|
||||||
origin = this;
|
origin = this;
|
||||||
for( int i=1; i<linkNodes.size()-1; i++ )
|
for( int i=1; i<linkNodes.size()-1; i++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -237,6 +237,7 @@ public class WayLinker extends MapCreatorBase
|
||||||
{
|
{
|
||||||
r.fromLon = n1.ilon;
|
r.fromLon = n1.ilon;
|
||||||
r.fromLat = n1.ilat;
|
r.fromLat = n1.ilat;
|
||||||
|
n1.bits |= OsmNodeP.DP_SURVIVOR_BIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( r.toWid == wid )
|
if ( r.toWid == wid )
|
||||||
|
@ -245,6 +246,7 @@ public class WayLinker extends MapCreatorBase
|
||||||
{
|
{
|
||||||
r.toLon = n1.ilon;
|
r.toLon = n1.ilon;
|
||||||
r.toLat = n1.ilat;
|
r.toLat = n1.ilat;
|
||||||
|
n1.bits |= OsmNodeP.DP_SURVIVOR_BIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r = r.next;
|
r = r.next;
|
||||||
|
|
Loading…
Reference in a new issue