Fix issue with route calculation
This commit is contained in:
parent
24a7543840
commit
eff51518ce
2 changed files with 43 additions and 15 deletions
|
@ -258,21 +258,7 @@ public class MapRenderRepositories {
|
|||
long now = System.currentTimeMillis();
|
||||
|
||||
// check that everything is initialized
|
||||
for (String mapName : files.keySet()) {
|
||||
BinaryMapIndexReader fr = files.get(mapName);
|
||||
if (fr != null && (fr.containsMapData(leftX, topY, rightX, bottomY, zoom) ||
|
||||
fr.containsRouteData(leftX, topY, rightX, bottomY, zoom))) {
|
||||
if (!nativeFiles.contains(mapName)) {
|
||||
long time = System.currentTimeMillis();
|
||||
nativeFiles.add(mapName);
|
||||
if (!library.initMapFile(mapName)) {
|
||||
continue;
|
||||
}
|
||||
log.debug("Native resource " + mapName + " initialized " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkInitialized(zoom, library, leftX, rightX, bottomY, topY);
|
||||
NativeSearchResult resultHandler = library.searchObjectsForRendering(leftX, rightX, topY, bottomY, zoom, renderingReq,
|
||||
checkForDuplicateObjectIds, this, "");
|
||||
if (checkWhetherInterrupted()) {
|
||||
|
@ -291,6 +277,27 @@ public class MapRenderRepositories {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void checkInitialized(final int zoom, NativeOsmandLibrary library, int leftX, int rightX, int bottomY,
|
||||
int topY) {
|
||||
if(library == null) {
|
||||
return;
|
||||
}
|
||||
for (String mapName : files.keySet()) {
|
||||
BinaryMapIndexReader fr = files.get(mapName);
|
||||
if (fr != null && (fr.containsMapData(leftX, topY, rightX, bottomY, zoom) ||
|
||||
fr.containsRouteData(leftX, topY, rightX, bottomY, zoom))) {
|
||||
if (!nativeFiles.contains(mapName)) {
|
||||
long time = System.currentTimeMillis();
|
||||
nativeFiles.add(mapName);
|
||||
if (!library.initMapFile(mapName)) {
|
||||
continue;
|
||||
}
|
||||
log.debug("Native resource " + mapName + " initialized " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void readRouteDataAsMapObjects(SearchRequest<BinaryMapDataObject> sr, BinaryMapIndexReader c,
|
||||
final ArrayList<BinaryMapDataObject> tempResult, final TLongSet ids) {
|
||||
final boolean basemap = c.isBasemap();
|
||||
|
|
|
@ -656,6 +656,27 @@ public class RouteProvider {
|
|||
}
|
||||
// BUILD context
|
||||
NativeOsmandLibrary lib = settings.SAFE_MODE.get() ? null : NativeOsmandLibrary.getLoadedLibrary();
|
||||
// check loaded files
|
||||
int leftX = MapUtils.get31TileNumberX(params.start.getLongitude());
|
||||
int rightX = leftX;
|
||||
int bottomY = MapUtils.get31TileNumberY(params.start.getLatitude());
|
||||
int topY = bottomY;
|
||||
if (params.intermediates != null) {
|
||||
for (LatLon l : params.intermediates) {
|
||||
leftX = Math.min(MapUtils.get31TileNumberX(l.getLongitude()), leftX);
|
||||
rightX = Math.max(MapUtils.get31TileNumberX(l.getLongitude()), rightX);
|
||||
bottomY = Math.max(MapUtils.get31TileNumberY(l.getLatitude()), bottomY);
|
||||
topY = Math.min(MapUtils.get31TileNumberY(l.getLatitude()), topY);
|
||||
}
|
||||
}
|
||||
LatLon l = params.end;
|
||||
leftX = Math.min(MapUtils.get31TileNumberX(l.getLongitude()), leftX);
|
||||
rightX = Math.max(MapUtils.get31TileNumberX(l.getLongitude()), rightX);
|
||||
bottomY = Math.max(MapUtils.get31TileNumberY(l.getLatitude()), bottomY);
|
||||
topY = Math.min(MapUtils.get31TileNumberY(l.getLatitude()), topY);
|
||||
|
||||
params.ctx.getResourceManager().getRenderer().checkInitialized(15, lib, leftX, rightX, bottomY, topY);
|
||||
|
||||
RoutingContext ctx = router.buildRoutingContext(cf,
|
||||
lib, files,
|
||||
RouteCalculationMode.NORMAL);
|
||||
|
|
Loading…
Reference in a new issue