diff --git a/brouter-core/src/main/java/btools/router/OsmPath.java b/brouter-core/src/main/java/btools/router/OsmPath.java index ab220b3..f4fd7a2 100644 --- a/brouter-core/src/main/java/btools/router/OsmPath.java +++ b/brouter-core/src/main/java/btools/router/OsmPath.java @@ -98,6 +98,8 @@ final class OsmPath implements OsmLinkHolder int linkdist = 0; int linkelevationcost = 0; int linkturncost = 0; + int linknodecost = 0; + int linkinitcost = 0; OsmTransferNode transferNode = link.decodeFirsttransfer(); OsmNode targetNode = link.targetNode; @@ -139,6 +141,8 @@ final class OsmPath implements OsmLinkHolder linkdist = 0; linkelevationcost = 0; linkturncost = 0; + linknodecost = 0; + linkinitcost = 0; } int dist = rc.calcDistance( lon1, lat1, lon2, lat2 ); @@ -176,7 +180,7 @@ final class OsmPath implements OsmLinkHolder linkdisttotal += dist; - // *** penalty for way-change + // *** penalty for turning angles if ( origin.originElement != null ) { // penalty proportional to direction change @@ -283,6 +287,7 @@ final class OsmPath implements OsmLinkHolder lastCostfactor = newcostfactor; float initialcost = rc.expctxWay.getInitialcost(); int iicost = (int)initialcost; + linkinitcost += iicost; cost += iicost; } @@ -296,7 +301,9 @@ final class OsmPath implements OsmLinkHolder + iCost + "\t" + linkelevationcost + "\t" + linkturncost - + rc.expctxWay.getCsvDescription( link.counterLinkWritten, description ); + + "\t" + linknodecost + + "\t" + linkinitcost + + rc.expctxWay.getKeyValueDescription( link.counterLinkWritten, description ); } if ( stopAtEndpoint ) @@ -305,6 +312,7 @@ final class OsmPath implements OsmLinkHolder { originElement = new OsmPathElement( rc.ilonshortest, rc.ilatshortest, ele2, originElement ); originElement.cost = cost; + originElement.message = lastMessage; } if ( rc.nogomatch ) { @@ -359,6 +367,7 @@ final class OsmPath implements OsmLinkHolder return; } int iicost = (int)initialcost; + linknodecost += iicost; cost += iicost; } } diff --git a/brouter-core/src/main/java/btools/router/OsmTrack.java b/brouter-core/src/main/java/btools/router/OsmTrack.java index 6d40446..f7affde 100644 --- a/brouter-core/src/main/java/btools/router/OsmTrack.java +++ b/brouter-core/src/main/java/btools/router/OsmTrack.java @@ -349,11 +349,7 @@ public final class OsmTrack { // csv-header-line - String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost"; - if ( rc.expctxWay != null ) - { - header += rc.expctxWay.getCsvHeader(); - } + String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost\tNodeCost\tInitialCost\tOsmTags"; dumpLine( bw, header ); for( OsmPathElement n : nodes ) { diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index bd1b2b5..9fb0153 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -166,7 +166,7 @@ public final class BExpressionContext decode( ld2, ab ); for( int inum = 0; inum < lookupValues.size(); inum++ ) // loop over lookup names { - if ( ld2[inum] != ld[inum] ) throw new RuntimeException( "assertion failed encoding " + getKeyValueDescription(ab) ); + if ( ld2[inum] != ld[inum] ) throw new RuntimeException( "assertion failed encoding " + getKeyValueDescription(false, ab) ); } return ab; @@ -273,7 +273,7 @@ public final class BExpressionContext } } - public String getCsvDescription( boolean inverseDirection, byte[] ab ) + public String getKeyValueDescription( boolean inverseDirection, byte[] ab ) { int inverseBitByteIndex = meta.readVarLength ? 0 : 7; int abLen = ab.length; @@ -285,41 +285,16 @@ public final class BExpressionContext decode( lookupData, ab_copy ); for( int inum = 0; inum < lookupValues.size(); inum++ ) // loop over lookup names { - int idx = meta.readVarLength ? (inum+1)%lookupValues.size() : inum; // reversebit at the end.. - - BExpressionLookupValue[] va = lookupValues.get(idx); - sb.append( '\t' ).append( va[lookupData[idx]].toString() ); + BExpressionLookupValue[] va = lookupValues.get(inum); + String value = va[lookupData[inum]].toString(); + if ( value != null && value.length() > 0 ) + { + sb.append( " " + lookupNames.get( inum ) + "=" + value ); + } } return sb.toString(); } - public String getCsvHeader() - { - StringBuilder sb = new StringBuilder( 200 ); - for( int inum = 0; inum < lookupNames.size(); inum++ ) // loop over lookup names - { - int idx = meta.readVarLength ? (inum+1)%lookupValues.size() : inum; // reversebit at the end.. - sb.append( '\t' ).append( lookupNames.get(idx) ); - } - return sb.toString(); - } - - public String getKeyValueDescription( byte[] ab ) - { - StringBuilder sb = new StringBuilder( 200 ); - decode( lookupData, ab ); - for( int inum = 0; inum < lookupValues.size(); inum++ ) // loop over lookup names - { - BExpressionLookupValue[] va = lookupValues.get(inum); - String value = va[lookupData[inum]].toString(); - if ( value != null && value.length() > 0 ) - { - sb.append( " " + lookupNames.get( inum ) + "=" + value ); - } - } - return sb.toString(); - } - private int parsedLines = 0; private boolean fixTagsWritten = false; diff --git a/brouter-map-creator/src/main/java/btools/mapcreator/RelationMerger.java b/brouter-map-creator/src/main/java/btools/mapcreator/RelationMerger.java index 1d0baf4..848b9c6 100644 --- a/brouter-map-creator/src/main/java/btools/mapcreator/RelationMerger.java +++ b/brouter-map-creator/src/main/java/btools/mapcreator/RelationMerger.java @@ -131,7 +131,7 @@ public class RelationMerger extends MapCreatorBase expctxCheck.evaluate( false, data.description, null ); ok = expctxCheck.getCostfactor() < 10000.; - System.out.println( "** relation access conflict for wid = " + data.wid + " tags:" + expctxReport.getKeyValueDescription( data.description ) + " (ok=" + ok + ")" ); + System.out.println( "** relation access conflict for wid = " + data.wid + " tags:" + expctxReport.getKeyValueDescription( false, data.description ) + " (ok=" + ok + ")" ); } if ( ok )