Support sharing native context and passing road id to native (to speed up search)
This commit is contained in:
parent
7f1fd48455
commit
d592736252
4 changed files with 24 additions and 2 deletions
|
@ -153,6 +153,8 @@ public class NativeLibrary {
|
||||||
protected static native NativeRouteSearchResult loadRoutingData(RouteRegion reg, String regName, int regfp, RouteSubregion subreg,
|
protected static native NativeRouteSearchResult loadRoutingData(RouteRegion reg, String regName, int regfp, RouteSubregion subreg,
|
||||||
boolean loadObjects);
|
boolean loadObjects);
|
||||||
|
|
||||||
|
public static native void deleteNativeRoutingContext(long handle);
|
||||||
|
|
||||||
protected static native void deleteRenderingContextHandle(long handle);
|
protected static native void deleteRenderingContextHandle(long handle);
|
||||||
|
|
||||||
protected static native void deleteRouteSearchResult(long searchResultHandle);
|
protected static native void deleteRouteSearchResult(long searchResultHandle);
|
||||||
|
|
|
@ -217,6 +217,7 @@ public class RoutePlannerFrontEnd {
|
||||||
if (gctx.ctx.calculationProgress == null) {
|
if (gctx.ctx.calculationProgress == null) {
|
||||||
gctx.ctx.calculationProgress = new RouteCalculationProgress();
|
gctx.ctx.calculationProgress = new RouteCalculationProgress();
|
||||||
}
|
}
|
||||||
|
gctx.ctx.keepNativeRoutingContext = true;
|
||||||
List<GpxPoint> gpxPoints = generageGpxPoints(points, gctx);
|
List<GpxPoint> gpxPoints = generageGpxPoints(points, gctx);
|
||||||
GpxPoint start = null;
|
GpxPoint start = null;
|
||||||
GpxPoint prev = null;
|
GpxPoint prev = null;
|
||||||
|
@ -281,6 +282,7 @@ public class RoutePlannerFrontEnd {
|
||||||
if(gctx.ctx.calculationProgress != null) {
|
if(gctx.ctx.calculationProgress != null) {
|
||||||
gctx.ctx.calculationProgress.timeToCalculate = System.nanoTime() - timeToCalculate;
|
gctx.ctx.calculationProgress.timeToCalculate = System.nanoTime() - timeToCalculate;
|
||||||
}
|
}
|
||||||
|
gctx.ctx.deleteNativeRoutingContext();
|
||||||
BinaryRoutePlanner.printDebugMemoryInformation(gctx.ctx);
|
BinaryRoutePlanner.printDebugMemoryInformation(gctx.ctx);
|
||||||
calculateGpxRoute(gctx, gpxPoints);
|
calculateGpxRoute(gctx, gpxPoints);
|
||||||
if (!gctx.res.isEmpty()) {
|
if (!gctx.res.isEmpty()) {
|
||||||
|
@ -538,6 +540,8 @@ public class RoutePlannerFrontEnd {
|
||||||
// for native routing this is possible when point lies on intersection of 2 lines
|
// for native routing this is possible when point lies on intersection of 2 lines
|
||||||
// solution here could be to pass to native routing id of the route
|
// solution here could be to pass to native routing id of the route
|
||||||
// though it should not create any issue
|
// though it should not create any issue
|
||||||
|
System.out.println("??? not found " + start.pnt.getRoad().getId() + " instead "
|
||||||
|
+ res.get(0).getObject().getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start.routeToTarget = res;
|
start.routeToTarget = res;
|
||||||
|
|
|
@ -395,7 +395,7 @@ public class RouteResultPreparation {
|
||||||
List<RouteSegmentResult> result = new ArrayList<RouteSegmentResult>();
|
List<RouteSegmentResult> result = new ArrayList<RouteSegmentResult>();
|
||||||
if (finalSegment != null) {
|
if (finalSegment != null) {
|
||||||
ctx.routingTime += finalSegment.distanceFromStart;
|
ctx.routingTime += finalSegment.distanceFromStart;
|
||||||
println("Routing calculated time distance " + finalSegment.distanceFromStart);
|
// println("Routing calculated time distance " + finalSegment.distanceFromStart);
|
||||||
// Get results from opposite direction roads
|
// Get results from opposite direction roads
|
||||||
RouteSegment segment = finalSegment.reverseWaySearch ? finalSegment :
|
RouteSegment segment = finalSegment.reverseWaySearch ? finalSegment :
|
||||||
finalSegment.opposite.getParentRoute();
|
finalSegment.opposite.getParentRoute();
|
||||||
|
|
|
@ -48,6 +48,10 @@ public class RoutingContext {
|
||||||
public final Map<BinaryMapIndexReader, List<RouteSubregion>> map = new LinkedHashMap<BinaryMapIndexReader, List<RouteSubregion>>();
|
public final Map<BinaryMapIndexReader, List<RouteSubregion>> map = new LinkedHashMap<BinaryMapIndexReader, List<RouteSubregion>>();
|
||||||
public final Map<RouteRegion, BinaryMapIndexReader> reverseMap = new LinkedHashMap<RouteRegion, BinaryMapIndexReader>();
|
public final Map<RouteRegion, BinaryMapIndexReader> reverseMap = new LinkedHashMap<RouteRegion, BinaryMapIndexReader>();
|
||||||
|
|
||||||
|
// 0. Reference to native routingcontext for multiple routes
|
||||||
|
public long nativeRoutingContext;
|
||||||
|
public boolean keepNativeRoutingContext;
|
||||||
|
|
||||||
// 1. Initial variables
|
// 1. Initial variables
|
||||||
public int startX;
|
public int startX;
|
||||||
public int startY;
|
public int startY;
|
||||||
|
@ -62,11 +66,13 @@ public class RoutingContext {
|
||||||
|
|
||||||
public boolean publicTransport;
|
public boolean publicTransport;
|
||||||
|
|
||||||
|
|
||||||
public RouteCalculationProgress calculationProgress;
|
public RouteCalculationProgress calculationProgress;
|
||||||
public boolean leftSideNavigation;
|
public boolean leftSideNavigation;
|
||||||
public List<RouteSegmentResult> previouslyCalculatedRoute;
|
public List<RouteSegmentResult> previouslyCalculatedRoute;
|
||||||
public PrecalculatedRouteDirection precalculatedRouteDirection;
|
public PrecalculatedRouteDirection precalculatedRouteDirection;
|
||||||
|
|
||||||
|
|
||||||
// 2. Routing memory cache (big objects)
|
// 2. Routing memory cache (big objects)
|
||||||
TLongObjectHashMap<List<RoutingSubregionTile>> indexedSubregions = new TLongObjectHashMap<List<RoutingSubregionTile>>();
|
TLongObjectHashMap<List<RoutingSubregionTile>> indexedSubregions = new TLongObjectHashMap<List<RoutingSubregionTile>>();
|
||||||
|
|
||||||
|
@ -812,7 +818,17 @@ public class RoutingContext {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void deleteNativeRoutingContext() {
|
||||||
|
if (nativeRoutingContext != 0) {
|
||||||
|
NativeLibrary.deleteNativeRoutingContext(nativeRoutingContext);
|
||||||
|
}
|
||||||
|
nativeRoutingContext = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
deleteNativeRoutingContext();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue