metatile cache added

This commit is contained in:
simon 2020-09-09 13:28:14 +03:00
parent 2851fd38cd
commit ce2b0eacbf
3 changed files with 29 additions and 19 deletions

View file

@ -58,7 +58,11 @@ public class OsmAndHttpServer extends NanoHTTPD {
while (it.hasNext()) {
Map.Entry<String, ApiEndpoint> e = it.next();
if (uri.startsWith(e.getKey())) {
return e.getValue().process(session, uri);
try {
return e.getValue().process(session, uri);
} catch (Exception exception) {
LOG.error("SERVER ERROR: " + exception.getMessage());
}
}
}
return ErrorResponses.response404;

View file

@ -85,14 +85,13 @@ public class ServerFragment extends BaseOsmAndFragment {
}
private void initServer() {
TrafficStats.setThreadStatsTag(THREAD_ID);
String hostname = getDeviceAddress();
try {
server = new OsmAndHttpServer(hostname, port);
server.start((MapActivity) getActivity());
initialized = true;
updateTextView("Server started at: " + server.getUrl());
updateTextView("Server started at " + server.getUrl());
} catch (IOException e) {
Toast.makeText(requireContext(),
e.getLocalizedMessage(),

View file

@ -21,7 +21,7 @@ public class TileEndpoint implements OsmAndHttpServer.ApiEndpoint {
private static final int TILE_DENSITY = 2;
private static final int TIMEOUT_STEP = 500;
private static final int TIMEOUT = 5000;
private static final int METATILE_SIZE = 1;
private static final int METATILE_SIZE = 2;
private static final int MAX_CACHE_SIZE = 4;
private static final Log LOG = PlatformUtil.getLog(TileEndpoint.class);
@ -43,8 +43,10 @@ public class TileEndpoint implements OsmAndHttpServer.ApiEndpoint {
}
public Bitmap getSubtile(int x, int y) {
// TODO cut subtitle
return bmp;
return Bitmap.createBitmap(bmp,
(x - sx) * TILE_SIZE_PX * TILE_DENSITY,
(y - sy) * TILE_SIZE_PX * TILE_DENSITY,
TILE_SIZE_PX * TILE_DENSITY, TILE_SIZE_PX * TILE_DENSITY);
}
}
@ -76,19 +78,24 @@ public class TileEndpoint implements OsmAndHttpServer.ApiEndpoint {
int zoom = Integer.parseInt(prms[1]);
int x = Integer.parseInt(prms[2]);
int y = Integer.parseInt(prms[3]);
//incorrect condition
// for (MetaTileCache r : cache) {
// if (r.zoom == zoom && r.ex >= x && r.ey >= y && r.sx <= x && r.sy <= y) {
// res = r;
// }
// }
MetaTileCache res = requestMetatile(x, y, zoom);
MetaTileCache res = null;
for (MetaTileCache r : cache) {
if (r.zoom == zoom && r.ex >= x && r.ey >= y && r.sx <= x && r.sy <= y) {
res = r;
}
}
if (res == null) {
return OsmAndHttpServer.ErrorResponses.response500;
res = requestMetatile(x, y, zoom);
if (res == null) {
LOG.error("SERVER: Cannot request metatile");
return OsmAndHttpServer.ErrorResponses.response500;
}
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bmp = res.bmp;
Bitmap bmp = res.getSubtile(x, y);
if (bmp == null) {
LOG.error("SERVER: Cannot cut bitmap");
return OsmAndHttpServer.ErrorResponses.response500;
}
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
@ -109,7 +116,8 @@ public class TileEndpoint implements OsmAndHttpServer.ApiEndpoint {
.setLocation(lat, lon)
.setMapDensity(TILE_DENSITY).density(TILE_DENSITY)
.setZoom(zoom)
.setPixelDimensions(TILE_SIZE_PX * TILE_DENSITY * METATILE_SIZE, TILE_SIZE_PX * TILE_DENSITY * METATILE_SIZE, 0.5f, 0.5f).build();
.setPixelDimensions(TILE_SIZE_PX * TILE_DENSITY * METATILE_SIZE,
TILE_SIZE_PX * TILE_DENSITY * METATILE_SIZE, 0.5f, 0.5f).build();
mapActivity.getMapView().setCurrentViewport(rotatedTileBox);
int timeout = 0;
try {
@ -127,9 +135,8 @@ public class TileEndpoint implements OsmAndHttpServer.ApiEndpoint {
res.sy = my;
res.ey = my + METATILE_SIZE - 1;
res.zoom = zoom;
RotatedTileBox tilebox = mapActivity.getMapView().getBufferImgLoc();
res.bmp = mapActivity.getMapView().getBufferBitmap();
LOG.debug(mapActivity.getMapView().getBufferImgLoc());
Bitmap tempBmp = mapActivity.getMapView().getBufferBitmap();
res.bmp = tempBmp.copy(tempBmp.getConfig(), true);
addToMemoryCache(res);
}
return res;