Das ist ein schwieriges Thema, weil es bei diesem Router ja kein oberes Limit für die Bearbeitungszeit gibt. Und es passiert mit dem neuen, besseren Location-Matching zwar nicht mehr häufig, aber immer noch, dass wegen einer “Zielinsel” keine Route gefunden wird, es aber auch kein Abbruch-Kriterium gibt, und das muss man irgendwann beenden. Ich hatte es zuerst mit Warteschlange und Timeout gemacht, aber das ist unglücklich, weil man mit so einem Timeout ein künstliches Limit schafft für die geroutete Distanz, daher das jetzige Verfahren mit dem Process-Kill. Ich denke, man kann das noch bisschen klüger machen mit z.B. einem Pool von 5 parallelen Berechnungen (und erst die 6. schiesst die älteste ab) und einer Rechenzeit-Priorität für die Kurzläufer.
Bei Via-Punkten macht auch BRouter das Routing für jedes Teilstück einzeln, es gibt da ein bisschen Re-Use beim Location-Matching und kleineren Caches, aber das sollte glaubich die Design-Entscheidung nicht beinflussen, ob über vias im Web-Client oder im BRouter iteriert wird.
Falls sich sonst niemand meldet, wäre das vielleicht ein Punkt, den ich als erstes angehen würde: Eine vollständige BRouter HTTP API mit Via-Punkten und Sperrzonen in das RouteServer.java (oder extra) einbauen und ein kleines Script zum Starten.
Ich hab’ Dir die vollständigen Sourcen jetzt geschickt (an Deine gmx-adresse), ohne ists ein bisschen schwierig, weil die API doch arg verbastelt ist. Zu Sperrgebieten ist in RouteServer.java die Anbindung im Prinzip drin (“nogoList”), aber nicht der Konstruktor dieser Objekte:
List<OsmNodeNamed> nogoList= new ArrayList<OsmNodeNamed>();
OsmNodeNamed n = new OsmNodeNamed();
n.name = "nogo2000";
n.isNogo = true;
n.ilon = (int)( ( lon + 180. )*1000000. + 0.5);
n.ilat = (int)( ( lat + 90. )*1000000. + 0.5);
nogoList.add( n );
Der Radius steckt also im Namen, und das Koordinatensystem ist das BRouter-Interne. Die Erweiterung um via-Punkte in dem RouteServer.java Beispiel ist trivial, da wird einfach nur die Wegpunktliste länger, also statt from-to dann from-via1-via2-to. Die Beschränkung auf 9 Vias gibts nur in der Android-App (wegen der Namenskonvention), an dieser Stelle in der API ist die Zahl nicht beschränkt und auch die Namen der Wegpunkte sind beliebig.