use of net.osmand.router.RoutingContext in project OsmAnd-tools by osmandapp.
the class ManyToOneRoadCalculation method manyToManyCalculation.
private void manyToManyCalculation(BinaryMapIndexReader reader, double top, double bottom) throws IOException {
RoutePlannerFrontEnd frontEnd = new RoutePlannerFrontEnd(false);
RoutingConfiguration config = RoutingConfiguration.getDefault().build("car", 1000);
RouteCalculationMode mode = RouteCalculationMode.BASE;
RoutingContext ctx = frontEnd.buildRoutingContext(config, null, new BinaryMapIndexReader[] { reader }, mode);
RouteRegion reg = reader.getRoutingIndexes().get(0);
List<RouteSubregion> baseSubregions = reg.getBaseSubregions();
List<RoutingSubregionTile> tiles = new ArrayList<RoutingContext.RoutingSubregionTile>();
for (RouteSubregion s : baseSubregions) {
List<RoutingSubregionTile> loadTiles = ctx.loadAllSubregionTiles(reader, s);
tiles.addAll(loadTiles);
}
int st = MapUtils.get31TileNumberY(top);
int sb = MapUtils.get31TileNumberY(bottom);
List<ManyToManySegment> topIntersects = new ArrayList<ManyToManySegment>();
List<ManyToManySegment> bottomIntersects = new ArrayList<ManyToManySegment>();
TLongObjectHashMap<ManyToManySegment> allSegments = initSegments(st, sb, ctx, tiles, topIntersects, bottomIntersects);
filterDisconnected(ctx, allSegments, topIntersects);
filterDisconnected(ctx, allSegments, topIntersects);
System.out.println("TOP " + topIntersects.size());
System.out.println("BOTTOM " + bottomIntersects.size());
calculateManyToMany(ctx, allSegments, topIntersects, bottomIntersects, st, sb);
}
use of net.osmand.router.RoutingContext in project OsmAnd-tools by osmandapp.
the class MapClusterLayer method clustering.
private List<RouteSegment> clustering(final ClusteringContext clusterCtx, double lat, double lon, final DataTileManager<Way> points) throws IOException {
List<BinaryMapIndexReader> rs = new ArrayList<BinaryMapIndexReader>();
for (File f : new File(DataExtractionSettings.getSettings().getBinaryFilesDir()).listFiles()) {
if (f.getName().endsWith(".obf")) {
// $NON-NLS-1$ //$NON-NLS-2$
RandomAccessFile raf = new RandomAccessFile(f, "r");
rs.add(new BinaryMapIndexReader(raf, f));
}
}
RoutePlannerFrontEnd router = new RoutePlannerFrontEnd(true);
Builder builder = RoutingConfiguration.getDefault();
RoutingConfiguration config = builder.build("car", RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3);
RoutingContext ctx = router.buildRoutingContext(config, NativeSwingRendering.getDefaultFromSettings(), rs.toArray(new BinaryMapIndexReader[rs.size()]), clusterCtx.BASEMAP_CLUSTERING ? RouteCalculationMode.BASE : RouteCalculationMode.NORMAL);
// find closest way
RouteSegment st = router.findRouteSegment(lat, lon, ctx, null);
if (st != null) {
RouteDataObject road = st.getRoad();
String highway = getHighway(road);
log.info(// road.getName() + " "
"ROAD TO START " + highway + " " + +road.id);
}
map.setPoints(points);
ctx.setVisitor(new RouteSegmentVisitor() {
private List<RouteSegment> cache = new ArrayList<RouteSegment>();
@Override
public void visitSegment(RouteSegment s, int endSegment, boolean poll) {
if (!clusterCtx.ANIMATE_CLUSTERING) {
return;
}
cache.add(s);
if (cache.size() < SIZE_OF_ROUTES_TO_ANIMATE) {
return;
}
for (RouteSegment segment : cache) {
Way way = new Way(-1);
for (int i = 0; i < segment.getRoad().getPointsLength(); i++) {
net.osmand.osm.edit.Node n = new net.osmand.osm.edit.Node(MapUtils.get31LatitudeY(segment.getRoad().getPoint31YTile(i)), MapUtils.get31LongitudeX(segment.getRoad().getPoint31XTile(i)), -1);
way.addNode(n);
}
way.putTag("color", "white");
LatLon n = way.getLatLon();
points.registerObject(n.getLatitude(), n.getLongitude(), way);
}
cache.clear();
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
map.prepareImage();
}
});
} catch (InterruptedException e1) {
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
});
List<RouteSegment> results = searchCluster(clusterCtx, ctx, st);
return results;
}
use of net.osmand.router.RoutingContext in project OsmAnd-tools by osmandapp.
the class CheckRoadConnectivity method findAllBaseRoadIntersections.
private void findAllBaseRoadIntersections(BinaryMapIndexReader reader, TLongObjectHashMap<List<RouteDataObject>> all, TLongObjectHashMap<List<RouteDataObject>> onlyRoads, TLongHashSet registeredRoadIds) throws IOException {
RoutePlannerFrontEnd router = new RoutePlannerFrontEnd(false);
Builder builder = RoutingConfiguration.getDefault();
RoutingConfiguration config = builder.build("car", RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3);
RoutingContext ctx = router.buildRoutingContext(config, null, new BinaryMapIndexReader[] { reader }, RouteCalculationMode.BASE);
if (reader.getRoutingIndexes().size() != 1) {
throw new UnsupportedOperationException();
}
RouteRegion reg = reader.getRoutingIndexes().get(0);
List<RouteSubregion> baseSubregions = reg.getBaseSubregions();
List<RoutingSubregionTile> tiles = new ArrayList<RoutingContext.RoutingSubregionTile>();
for (RouteSubregion s : baseSubregions) {
List<RoutingSubregionTile> loadTiles = ctx.loadAllSubregionTiles(reader, s);
tiles.addAll(loadTiles);
}
for (RoutingSubregionTile tile : tiles) {
ArrayList<RouteDataObject> dataObjects = new ArrayList<RouteDataObject>();
ctx.loadSubregionTile(tile, false, dataObjects, null);
for (RouteDataObject o : dataObjects) {
registeredRoadIds.add(o.getId());
int len = o.getPointsLength() - 1;
double dist = MapUtils.squareRootDist31(o.getPoint31XTile(0), o.getPoint31YTile(0), o.getPoint31XTile(len), o.getPoint31YTile(len));
boolean shortFerry = "ferry".equals(o.getRoute()) && dist < 1000;
if (shortFerry) {
continue;
}
boolean link = o.getHighway() != null && (o.getHighway().endsWith("link"));
long b = calcPointId(o, 0);
long e = calcPointId(o, len);
if (!link) {
addPoint(onlyRoads, o, b);
addPoint(onlyRoads, o, e);
}
for (int i = 0; i < o.getPointsLength(); i++) {
addPoint(all, o, calcPointId(o, i));
}
}
}
}
use of net.osmand.router.RoutingContext in project OsmAnd-tools by osmandapp.
the class CheckRoadConnectivity method calculateDisconnectedRoadsToAddAndDelete.
private TLongObjectHashMap<RouteDataObject> calculateDisconnectedRoadsToAddAndDelete(TLongObjectHashMap<List<RouteDataObject>> mapOfObjectToCheck, TLongObjectHashMap<List<RouteDataObject>> all, BinaryMapIndexReader reader, TLongHashSet setToRemove, TLongHashSet registeredIds) {
RoutePlannerFrontEnd frontEnd = new RoutePlannerFrontEnd(false);
RoutingConfiguration config = RoutingConfiguration.getDefault().build("car", 1000);
long[] keys = mapOfObjectToCheck.keys();
TLongObjectHashMap<RouteDataObject> toAdd = new TLongObjectHashMap<RouteDataObject>();
TLongHashSet beginIsolated = new TLongHashSet();
TLongHashSet endIsolated = new TLongHashSet();
for (int k = 0; k < keys.length; k++) {
long point = keys[k];
if (all.get(point).size() == 1) {
RouteDataObject rdo = all.get(keys[k]).get(0);
boolean begin = calcPointId(rdo, 0) == point;
RoutingContext ctx = frontEnd.buildRoutingContext(config, null, new BinaryMapIndexReader[] { reader }, RouteCalculationMode.NORMAL);
List<RouteDataObject> result = findConnectedRoads(ctx, rdo, begin, all);
if (result == null) {
if (begin) {
beginIsolated.add(rdo.getId());
} else {
endIsolated.add(rdo.getId());
}
} else {
for (RouteDataObject obj : result) {
if (!registeredIds.contains(obj.id)) {
toAdd.put(obj.id, obj);
}
}
}
}
}
int begSize = beginIsolated.size();
int endSize = endIsolated.size();
beginIsolated.retainAll(endIsolated);
int intersectionSize = beginIsolated.size();
if (setToRemove != null) {
setToRemove.addAll(beginIsolated);
}
System.out.println("All objects in base file " + mapOfObjectToCheck.size() + " to keep isolated " + (begSize + endSize - 2 * intersectionSize) + " to add " + toAdd.size() + " to remove " + beginIsolated.size());
return toAdd;
}
use of net.osmand.router.RoutingContext in project OsmAnd-tools by osmandapp.
the class DijkstraAlgorithm method main.
public static void main(String[] args) throws IOException, InterruptedException, XmlPullParserException {
File fl = new File("/Users/victorshcherb/osmand/maps/Netherlands_europe_2.obf");
// $NON-NLS-1$ //$NON-NLS-2$
RandomAccessFile raf = new RandomAccessFile(fl, "r");
RoutePlannerFrontEnd fe = new RoutePlannerFrontEnd(false);
Builder builder = RoutingConfiguration.parseFromInputStream(new FileInputStream("/Users/victorshcherb/osmand/repos/resources/routing/routing.xml"));
RoutingConfiguration config = builder.build("car", RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3);
RoutingContext ctx = fe.buildRoutingContext(config, null, new BinaryMapIndexReader[] { new BinaryMapIndexReader(raf, fl) }, RouteCalculationMode.NORMAL);
RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true;
List<RouteSegmentResult> route = fe.searchRoute(ctx, new LatLon(52.28283, 4.8622713), new LatLon(52.326496, 4.8753176), null);
}
Aggregations