diff --git a/brouter-core/src/main/java/btools/router/OsmNodeNamed.java b/brouter-core/src/main/java/btools/router/OsmNodeNamed.java index 7e728f5..5c4f6f1 100644 --- a/brouter-core/src/main/java/btools/router/OsmNodeNamed.java +++ b/brouter-core/src/main/java/btools/router/OsmNodeNamed.java @@ -17,7 +17,11 @@ public class OsmNodeNamed extends OsmNode @Override public String toString() { - return ilon + "," + ilat + "," + name + "," + nogoWeight; + if ( Double.isNaN(nogoWeight ) ) { + return ilon + "," + ilat + "," + name; + } else { + return ilon + "," + ilat + "," + name + "," + nogoWeight; + } } public static OsmNodeNamed decodeNogo( String s ) @@ -30,7 +34,7 @@ public class OsmNodeNamed extends OsmNode int idx3 = s.indexOf( ',', idx2+1 ); if ( idx3 == -1) { n.name = s.substring( idx2 + 1 ); - n.nogoWeight = 100000; + n.nogoWeight = Double.NaN; } else { n.name = s.substring( idx2+1, idx3 ); n.nogoWeight = Double.parseDouble( s.substring( idx3 + 1 ) ); diff --git a/brouter-core/src/main/java/btools/router/OsmPath.java b/brouter-core/src/main/java/btools/router/OsmPath.java index 63ec9d0..475027d 100644 --- a/brouter-core/src/main/java/btools/router/OsmPath.java +++ b/brouter-core/src/main/java/btools/router/OsmPath.java @@ -427,7 +427,11 @@ abstract class OsmPath implements OsmLinkHolder } if ( rc.nogomatch != null ) { - cost += rc.nogomatch.nogoWeight; + if ( Double.isNaN(rc.nogomatch.nogoWeight) ) { + cost = -1; + } else { + cost += rc.nogomatch.nogoWeight; + } } return; } @@ -462,7 +466,12 @@ abstract class OsmPath implements OsmLinkHolder // check for nogo-matches (after the *actual* start of segment) if ( rc.nogomatch != null ) { - cost += rc.nogomatch.nogoWeight; + if ( Double.isNaN(rc.nogomatch.nogoWeight) ) { + cost = -1; + return; + } else { + cost += rc.nogomatch.nogoWeight; + } } // add target-node costs diff --git a/brouter-core/src/main/java/btools/router/StdPath.java b/brouter-core/src/main/java/btools/router/StdPath.java index c299f04..9501681 100644 --- a/brouter-core/src/main/java/btools/router/StdPath.java +++ b/brouter-core/src/main/java/btools/router/StdPath.java @@ -180,7 +180,6 @@ final class StdPath extends OsmPath return 0.; } - @Override public int elevationCorrection( RoutingContext rc ) { diff --git a/brouter-mem-router/src/main/java/btools/memrouter/ScheduledRouter.java b/brouter-mem-router/src/main/java/btools/memrouter/ScheduledRouter.java index b7e0cb3..701bfe1 100644 --- a/brouter-mem-router/src/main/java/btools/memrouter/ScheduledRouter.java +++ b/brouter-mem-router/src/main/java/btools/memrouter/ScheduledRouter.java @@ -45,7 +45,7 @@ final class ScheduledRouter private static List trips = new ArrayList(); private static long oldChecksum = 0; - + private String startEndText() { return (start == null ? "unmatched" : start.getName() ) + "->" + (end == null ? "unmatched" : end.getName() ); @@ -69,11 +69,11 @@ final class ScheduledRouter // check for identical params long[] nogocheck = rc.getNogoChecksums(); - + long checksum = nogocheck[0] + nogocheck[1] + nogocheck[2]; checksum += startPos.getILat() + startPos.getILon() + endPos.getILat() + endPos.getILon(); checksum += rc.localFunction.hashCode(); - + if ( checksum != oldChecksum ) { trips = _findRoute( startPos, endPos, false ); @@ -86,7 +86,7 @@ final class ScheduledRouter if ( linksProcessed + linksReProcessed > 5000000 ) throw new RuntimeException( "5 million links limit reached" ); else throw new RuntimeException( "no track found! (" + startEndText() + ")" ); } - + if ( alternativeIdx == 0 ) // = result overview { List details = new ArrayList(); @@ -101,15 +101,15 @@ final class ScheduledRouter t.iternity = details; return t; } - + int idx = alternativeIdx > trips.size() ? trips.size()-1 : alternativeIdx-1; Iternity iternity = trips.get( idx ); OsmTrack t = iternity.track; t.iternity = iternity.details; return t; - } - - + } + + private List _findRoute( OsmPos startPos, OsmPos endPos, boolean fastStop ) throws Exception { List iternities = new ArrayList(); @@ -120,7 +120,7 @@ final class ScheduledRouter end = graph.matchNodeForPosition( endPos, rc.expctxWay, rc.transitonly ); if ( end == null ) throw new IllegalArgumentException( "unmatched end: " + endPos ); - + time0 = System.currentTimeMillis() + (long) ( rc.starttimeoffset * 60000L ); long minutes0 = ( time0 + 59999L ) / 60000L; time0 = minutes0 * 60000L; @@ -170,8 +170,8 @@ final class ScheduledRouter OffsetSet offsets = trip.offsets.ensureMaxOffset( maxOffset ); if ( offsets == null ) continue; - */ - + */ + OffsetSet offsets = trip.offsets; // check global closure @@ -240,7 +240,7 @@ System.out.println( "*** added track to result list !**** "); } } System.out.println( "*** finishedOffsets = " + finishedOffsets ); - + } for ( OsmLinkP link = currentNode.getFirstLink(); link != null; link = link.getNext( currentNode ) ) { @@ -305,9 +305,9 @@ System.out.println( "*** finishedOffsets = " + finishedOffsets ); } // calc distance and check nogos - rc.nogomatch = false; + rc.nogomatch = null; int distance = rc.calcDistance( currentNode.ilon, currentNode.ilat, node.ilon, node.ilat ); - if ( rc.nogomatch ) + if ( rc.nogomatch != null ) { return; } @@ -483,7 +483,7 @@ System.out.println( "*** finishedOffsets = " + finishedOffsets ); int distance = 0; long departure = 0; - + ScheduledTrip itrip = null; String profile = extractProfile( rc.localFunction ); @@ -496,7 +496,7 @@ System.out.println( "*** finishedOffsets = " + finishedOffsets ); while (current != null) { departure = current.departure; - + // System.out.println( "trip=" + current ); OsmNodeP node = current.getTargetNode(); OsmPathElement pe = OsmPathElement.create( node.ilon, node.ilat, node.selev, null, false ); @@ -569,18 +569,18 @@ System.out.println( "*** finishedOffsets = " + finishedOffsets ); iternity.details.add( "depart: " + df.format( d0 ) + " " + stationName ); iternity.details.add( " --- " + lineName + " ---" ); iternity.details.add( "arrive: " + df.format( d1 ) + " " + nextStationName ); - + if ( !iternity.lines.contains( lineName ) ) { iternity.lines.add( lineName ); - } + } } } iternity.track = track; iternity.arrivaltime = time0 + 60000L * offset + trip.arrival; iternity.departtime = time0 + 60000L * offset + departure; - + return iternity; } diff --git a/brouter-server/src/main/java/btools/server/request/ServerHandler.java b/brouter-server/src/main/java/btools/server/request/ServerHandler.java index 494f844..23febaf 100644 --- a/brouter-server/src/main/java/btools/server/request/ServerHandler.java +++ b/brouter-server/src/main/java/btools/server/request/ServerHandler.java @@ -222,7 +222,7 @@ public class ServerHandler extends RequestHandler { for (int i = 0; i < lonLatRadList.length; i++) { String[] lonLatRad = lonLatRadList[i].split(","); - String nogoWeight = "100000"; + String nogoWeight = "NaN"; if (lonLatRad.length > 3) { nogoWeight = lonLatRad[3]; }