traffic simulation delta supression

This commit is contained in:
Arndt Brenschede 2020-02-02 11:48:54 +01:00
parent d29581694e
commit 6fd1c6151d

View file

@ -36,12 +36,16 @@ public class OsmTrafficMap
private File oldTrafficFile; private File oldTrafficFile;
private File newTrafficFile; private File newTrafficFile;
int totalChanges = 0; private int totalChanges = 0;
int supressedChanges = 0; private int supressedChanges = 0;
private boolean doNotAdd = false;
private boolean debug = false;
public OsmTrafficMap( BExpressionContextWay expctxWay ) public OsmTrafficMap( BExpressionContextWay expctxWay )
{ {
this.expctxWay = expctxWay; this.expctxWay = expctxWay;
debug = Boolean.getBoolean( "debugTrafficMap" );
} }
public static class OsmTrafficElement public static class OsmTrafficElement
@ -62,6 +66,7 @@ public class OsmTrafficMap
if ( oldTrafficFile.exists() ) if ( oldTrafficFile.exists() )
{ {
oldTrafficClasses = new OsmTrafficMap( null ); oldTrafficClasses = new OsmTrafficMap( null );
oldTrafficClasses.doNotAdd = true;
oldTrafficClasses.load( oldTrafficFile, minLon, minLat, maxLon, maxLat, false ); oldTrafficClasses.load( oldTrafficFile, minLon, minLat, maxLon, maxLat, false );
} }
@ -143,7 +148,14 @@ public class OsmTrafficMap
} }
return true; return true;
} }
if ( doNotAdd )
{
e.traffic = Math.max( e.traffic, traffic );
}
else
{
e.traffic = e.traffic == -1 || traffic == -1 ? -1 : e.traffic + traffic; e.traffic = e.traffic == -1 || traffic == -1 ? -1 : e.traffic + traffic;
}
return false; return false;
} }
@ -157,8 +169,9 @@ public class OsmTrafficMap
public int getTrafficClass( long n1, long n2 ) public int getTrafficClass( long n1, long n2 )
{ {
int traffic = getTraffic( n1, n2 ); // used for the old data, where we stpre traffic-classes, not volumes
return getTrafficClassForTraffic( traffic ); OsmTrafficElement e = getElement( n1, n2 );
return e == null ? 0 : e.traffic;
} }
public int getTrafficClassForTraffic( int traffic ) public int getTrafficClassForTraffic( int traffic )
@ -234,13 +247,19 @@ public class OsmTrafficMap
// delta suppression: keep old traffic classes within some buffer range // delta suppression: keep old traffic classes within some buffer range
if ( oldTrafficClasses != null ) if ( oldTrafficClasses != null )
{ {
int oldTrafficClass = oldTrafficClasses.getTraffic( id0, id1 ); int oldTrafficClass = oldTrafficClasses.getTrafficClass( id0, id1 );
if ( oldTrafficClass != trafficClass ) if ( oldTrafficClass != trafficClass )
{ {
totalChanges++; totalChanges++;
boolean supressChange =
oldTrafficClass == getTrafficClassForTraffic( (int)(traffic*1.3) )
|| oldTrafficClass == getTrafficClassForTraffic( (int)(traffic*0.77) );
if ( oldTrafficClass == getTrafficClassForTraffic( (int)(traffic*1.3) ) if ( debug )
|| oldTrafficClass == getTrafficClassForTraffic( (int)(traffic*0.77) ) ) {
System.out.println( "traffic class change " + oldTrafficClass + "->" + trafficClass + " supress=" + supressChange );
}
if ( supressChange )
{ {
trafficClass = oldTrafficClass; trafficClass = oldTrafficClass;
supressedChanges++; supressedChanges++;