parent
4f687e6fec
commit
edf89ce36b
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2016-2017 devemux86
|
* Copyright 2016-2017 devemux86
|
||||||
|
* Copyright 2017 Mathieu De Brito
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the
|
* This program is free software: you can redistribute it and/or modify it under the
|
||||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||||
@ -16,6 +17,7 @@ package org.oscim.android.test;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import org.oscim.android.cache.TileCache;
|
||||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||||
@ -26,20 +28,35 @@ import org.oscim.tiling.source.mvt.MapboxTileSource;
|
|||||||
|
|
||||||
public class MapboxMapActivity extends MapActivity {
|
public class MapboxMapActivity extends MapActivity {
|
||||||
|
|
||||||
|
private TileCache tileCache;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
UrlTileSource tileSource = MapboxTileSource.builder()
|
UrlTileSource tileSource = MapboxTileSource.builder()
|
||||||
.apiKey("mapzen-xxxxxxx") // Put a proper API key
|
.apiKey("mapzen-xxxxxxx") // Put a proper API key
|
||||||
.httpFactory(new OkHttpEngine.OkHttpFactory())
|
.httpFactory(new OkHttpEngine.OkHttpFactory(true)) // Use TileCache or provide a Cache for OkHttp
|
||||||
//.locale("en")
|
//.locale("en")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// Cache the tiles into a local sqlite database
|
||||||
|
tileCache = new TileCache(this, null, "tile_cache.db");
|
||||||
|
tileCache.setCacheSize(512 * (1 << 10));
|
||||||
|
tileSource.setCache(tileCache);
|
||||||
|
|
||||||
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
||||||
mMap.setTheme(VtmThemes.MAPZEN);
|
mMap.setTheme(VtmThemes.MAPZEN);
|
||||||
|
|
||||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
mMap.layers().add(new BuildingLayer(mMap, l));
|
||||||
mMap.layers().add(new LabelLayer(mMap, l));
|
mMap.layers().add(new LabelLayer(mMap, l));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
|
||||||
|
if (tileCache != null)
|
||||||
|
tileCache.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
* Copyright 2014 Charles Greb
|
* Copyright 2014 Charles Greb
|
||||||
* Copyright 2014 Hannes Janetzek
|
* Copyright 2014 Hannes Janetzek
|
||||||
* Copyright 2017 devemux86
|
* Copyright 2017 devemux86
|
||||||
|
* Copyright 2017 Mathieu De Brito
|
||||||
*
|
*
|
||||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||||
*
|
*
|
||||||
@ -23,6 +24,8 @@ import org.oscim.utils.IOUtils;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -40,14 +43,27 @@ public class OkHttpEngine implements HttpEngine {
|
|||||||
|
|
||||||
private final OkHttpClient mClient;
|
private final OkHttpClient mClient;
|
||||||
private final UrlTileSource mTileSource;
|
private final UrlTileSource mTileSource;
|
||||||
|
private final boolean mUseTileCache;
|
||||||
|
|
||||||
public static class OkHttpFactory implements HttpEngine.Factory {
|
public static class OkHttpFactory implements HttpEngine.Factory {
|
||||||
private final OkHttpClient mClient;
|
private final OkHttpClient mClient;
|
||||||
|
private boolean mUseTileCache = false;
|
||||||
|
|
||||||
public OkHttpFactory() {
|
public OkHttpFactory() {
|
||||||
mClient = new OkHttpClient();
|
mClient = new OkHttpClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache using ITileCache
|
||||||
|
*/
|
||||||
|
public OkHttpFactory(boolean useTileCache) {
|
||||||
|
this();
|
||||||
|
mUseTileCache = useTileCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OkHttp cache implemented through {@link OkHttpClient.Builder#cache(Cache)}.
|
||||||
|
*/
|
||||||
public OkHttpFactory(Cache cache) {
|
public OkHttpFactory(Cache cache) {
|
||||||
mClient = new OkHttpClient.Builder()
|
mClient = new OkHttpClient.Builder()
|
||||||
.cache(cache)
|
.cache(cache)
|
||||||
@ -56,15 +72,17 @@ public class OkHttpEngine implements HttpEngine {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HttpEngine create(UrlTileSource tileSource) {
|
public HttpEngine create(UrlTileSource tileSource) {
|
||||||
return new OkHttpEngine(mClient, tileSource);
|
return new OkHttpEngine(mClient, tileSource, mUseTileCache);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private InputStream inputStream;
|
private InputStream inputStream;
|
||||||
|
private byte[] cachedData;
|
||||||
|
|
||||||
public OkHttpEngine(OkHttpClient client, UrlTileSource tileSource) {
|
public OkHttpEngine(OkHttpClient client, UrlTileSource tileSource, boolean useTileCache) {
|
||||||
mClient = client;
|
mClient = client;
|
||||||
mTileSource = tileSource;
|
mTileSource = tileSource;
|
||||||
|
mUseTileCache = useTileCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -86,6 +104,21 @@ public class OkHttpEngine implements HttpEngine {
|
|||||||
Request request = builder.build();
|
Request request = builder.build();
|
||||||
Response response = mClient.newCall(request).execute();
|
Response response = mClient.newCall(request).execute();
|
||||||
inputStream = response.body().byteStream();
|
inputStream = response.body().byteStream();
|
||||||
|
|
||||||
|
if (mUseTileCache) {
|
||||||
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||||
|
int nRead;
|
||||||
|
byte[] data = new byte[16384];
|
||||||
|
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
|
||||||
|
buffer.write(data, 0, nRead);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.flush();
|
||||||
|
|
||||||
|
cachedData = buffer.toByteArray();
|
||||||
|
inputStream = new ByteArrayInputStream(cachedData);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
@ -106,11 +139,15 @@ public class OkHttpEngine implements HttpEngine {
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* OkHttp cache implemented through {@link OkHttpClient.Builder#cache(Cache)}.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void setCache(OutputStream os) {
|
public void setCache(OutputStream os) {
|
||||||
|
if (mUseTileCache) {
|
||||||
|
try {
|
||||||
|
os.write(cachedData);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user