add TileSource.Builders
This commit is contained in:
@@ -22,9 +22,44 @@ import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
|
||||
|
||||
public abstract class TileSource {
|
||||
|
||||
public abstract static class Builder<T extends Builder<T>> {
|
||||
int minZoom, maxZoom;
|
||||
FadeStep[] fadeSteps;
|
||||
|
||||
public T zoomMin(int zoom) {
|
||||
minZoom = zoom;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T zoomMax(int zoom) {
|
||||
maxZoom = zoom;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T fadeSteps(FadeStep[] fadeSteps) {
|
||||
this.fadeSteps = fadeSteps;
|
||||
return self();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected T self() {
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
public abstract TileSource build();
|
||||
}
|
||||
|
||||
protected int mZoomMin = 0;
|
||||
protected int mZoomMax = 20;
|
||||
|
||||
protected TileSource() {
|
||||
}
|
||||
|
||||
protected TileSource(int zoomMin, int zoomMax) {
|
||||
mZoomMin = zoomMin;
|
||||
mZoomMax = zoomMax;
|
||||
}
|
||||
|
||||
public abstract ITileDataSource getDataSource();
|
||||
|
||||
public abstract OpenResult open();
|
||||
@@ -35,6 +70,8 @@ public abstract class TileSource {
|
||||
|
||||
public ITileCache tileCache;
|
||||
|
||||
private FadeStep[] mFadeSteps;
|
||||
|
||||
/**
|
||||
* Cache MUST be set before TileSource is added to a TileLayer!
|
||||
*/
|
||||
@@ -51,7 +88,7 @@ public abstract class TileSource {
|
||||
}
|
||||
|
||||
public FadeStep[] getFadeSteps() {
|
||||
return null;
|
||||
return mFadeSteps;
|
||||
}
|
||||
|
||||
public TileSource setOption(String key, String value) {
|
||||
|
||||
@@ -27,6 +27,40 @@ import org.oscim.tiling.source.LwHttp.LwHttpFactory;
|
||||
|
||||
public abstract class UrlTileSource extends TileSource {
|
||||
|
||||
public abstract static class Builder<T extends Builder<T>> extends TileSource.Builder<T> {
|
||||
protected int zoomMin, zoomMax;
|
||||
protected String tilePath;
|
||||
protected String url;
|
||||
private HttpEngine.Factory engineFactory;
|
||||
|
||||
protected Builder() {
|
||||
|
||||
}
|
||||
|
||||
protected Builder(String url, String tilePath, int zoomMin, int zoomMax) {
|
||||
this.url = url;
|
||||
this.tilePath = tilePath;
|
||||
this.zoomMin = zoomMin;
|
||||
this.zoomMax = zoomMax;
|
||||
}
|
||||
|
||||
public T tilePath(String tilePath) {
|
||||
this.tilePath = tilePath;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T url(String url) {
|
||||
this.url = url;
|
||||
return self();
|
||||
}
|
||||
|
||||
public T httpFactory(HttpEngine.Factory factory) {
|
||||
this.engineFactory = factory;
|
||||
return self();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final static TileUrlFormatter URL_FORMATTER = new DefaultTileUrlFormatter();
|
||||
private final URL mUrl;
|
||||
private final String[] mTilePath;
|
||||
@@ -39,19 +73,17 @@ public abstract class UrlTileSource extends TileSource {
|
||||
public String formatTilePath(UrlTileSource tileSource, Tile tile);
|
||||
}
|
||||
|
||||
public UrlTileSource(String url, String tilePath, int zoomMin, int zoomMax) {
|
||||
this(url, tilePath);
|
||||
mZoomMin = zoomMin;
|
||||
mZoomMax = zoomMax;
|
||||
protected UrlTileSource(Builder<?> builder) {
|
||||
this(builder.url, builder.tilePath, builder.zoomMin, builder.zoomMax);
|
||||
mHttpFactory = builder.engineFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param urlString 'http://example.com/'
|
||||
* @param tilePath replacement string for tile coordinates,
|
||||
* e.g. '{Z}/{X}/{Y}.png'
|
||||
*/
|
||||
public UrlTileSource(String urlString, String tilePath) {
|
||||
protected UrlTileSource(String urlString, String tilePath) {
|
||||
this(urlString, tilePath, 0, 17);
|
||||
}
|
||||
|
||||
protected UrlTileSource(String urlString, String tilePath, int zoomMin, int zoomMax) {
|
||||
super(zoomMin, zoomMax);
|
||||
if (tilePath == null)
|
||||
throw new IllegalArgumentException("tilePath cannot be null.");
|
||||
|
||||
|
||||
@@ -18,6 +18,26 @@ import org.slf4j.LoggerFactory;
|
||||
public class BitmapTileSource extends UrlTileSource {
|
||||
static final Logger log = LoggerFactory.getLogger(LwHttp.class);
|
||||
|
||||
public static class Builder<T extends Builder<T>> extends UrlTileSource.Builder<T> {
|
||||
|
||||
public Builder() {
|
||||
super(null, "/{Z}/{X}/{Y}.png", 0, 17);
|
||||
}
|
||||
|
||||
public BitmapTileSource build() {
|
||||
return new BitmapTileSource(this);
|
||||
}
|
||||
}
|
||||
|
||||
protected BitmapTileSource(Builder<?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Builder<?> builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create BitmapTileSource for 'url'
|
||||
*
|
||||
@@ -26,15 +46,19 @@ public class BitmapTileSource extends UrlTileSource {
|
||||
* implement getUrlString() for custom formatting.
|
||||
*/
|
||||
public BitmapTileSource(String url, int zoomMin, int zoomMax) {
|
||||
super(url, "/{Z}/{X}/{Y}.png", zoomMin, zoomMax);
|
||||
this(url, "/{Z}/{X}/{Y}.png", zoomMin, zoomMax);
|
||||
}
|
||||
|
||||
public BitmapTileSource(String url, int zoomMin, int zoomMax, String extension) {
|
||||
super(url, "/{Z}/{X}/{Y}" + extension, zoomMin, zoomMax);
|
||||
this(url, "/{Z}/{X}/{Y}" + extension, zoomMin, zoomMax);
|
||||
}
|
||||
|
||||
public BitmapTileSource(String url, String tilePath, int zoomMin, int zoomMax) {
|
||||
super(url, tilePath, zoomMin, zoomMax);
|
||||
super(builder()
|
||||
.url(url)
|
||||
.tilePath(tilePath)
|
||||
.zoomMin(zoomMin)
|
||||
.zoomMax(zoomMax));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.oscim.tiling.source.bitmap;
|
||||
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
|
||||
import org.oscim.tiling.source.bitmap.BitmapTileSource.Builder;
|
||||
|
||||
/**
|
||||
* Do not use in applications unless you read through and comply to
|
||||
@@ -8,82 +9,27 @@ import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
|
||||
*/
|
||||
public class DefaultSources {
|
||||
|
||||
public static class OpenStreetMap extends BitmapTileSource {
|
||||
public OpenStreetMap() {
|
||||
super("http://tile.openstreetmap.org", 0, 18);
|
||||
}
|
||||
}
|
||||
public static Builder<?> OPENSTREETMAP = BitmapTileSource.builder()
|
||||
.url("http://tile.openstreetmap.org")
|
||||
.zoomMax(18);
|
||||
|
||||
public static class OSMTransport extends BitmapTileSource {
|
||||
public OSMTransport() {
|
||||
super("http://a.tile.thunderforest.com/transport", 0, 18);
|
||||
}
|
||||
}
|
||||
public static Builder<?> OSM_TRANSPORT = BitmapTileSource.builder()
|
||||
.url("http://a.tile.thunderforest.com/transport")
|
||||
.zoomMax(18);
|
||||
|
||||
public static class StamenToner extends BitmapTileSource {
|
||||
public StamenToner() {
|
||||
super("http://a.tile.stamen.com/toner", 0, 18);
|
||||
}
|
||||
}
|
||||
public static Builder<?> STAMEN_TONER = BitmapTileSource.builder()
|
||||
.url("http://a.tile.stamen.com/toner")
|
||||
.zoomMax(18);
|
||||
|
||||
public static class StamenWatercolor extends BitmapTileSource {
|
||||
public StamenWatercolor() {
|
||||
super("http://a.tile.stamen.com/watercolor", 0, 16);
|
||||
}
|
||||
}
|
||||
public static Builder<?> STAMEN_WATERCOLOR = BitmapTileSource.builder()
|
||||
.url("http://a.tile.stamen.com/watercolor")
|
||||
.tilePath("/{Z}/{X}/{Y}.jpg")
|
||||
.zoomMax(18);
|
||||
|
||||
public static class ImagicoLandcover extends BitmapTileSource {
|
||||
public ImagicoLandcover() {
|
||||
super("http://www.imagico.de/map/tiles/landcover", 0, 6, ".jpg");
|
||||
}
|
||||
}
|
||||
|
||||
public static class MapQuestAerial extends BitmapTileSource {
|
||||
public MapQuestAerial() {
|
||||
super("http://otile1.mqcdn.com/tiles/1.0.0/sat", 0, 8, ".jpg");
|
||||
}
|
||||
|
||||
@Override
|
||||
public FadeStep[] getFadeSteps() {
|
||||
return fadeSteps;
|
||||
}
|
||||
}
|
||||
|
||||
public static class NaturalEarth extends BitmapTileSource {
|
||||
public NaturalEarth() {
|
||||
super("http://opensciencemap.org/tiles/ne", 0, 8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FadeStep[] getFadeSteps() {
|
||||
return fadeSteps;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ArcGISWorldShaded extends BitmapTileSource {
|
||||
public ArcGISWorldShaded() {
|
||||
super("http://server.arcgisonline.com/ArcGIS/rest/services" +
|
||||
"/World_Shaded_Relief/MapServer/tile/",
|
||||
"{Z}/{Y}/{X}", 0, 13);
|
||||
}
|
||||
}
|
||||
|
||||
public static class HillShadeHD extends BitmapTileSource {
|
||||
public HillShadeHD() {
|
||||
super("http://129.206.74.245:8004/tms_hs.ashx",
|
||||
"?x={X}&y={Y}&z={Z}", 2, 16);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* https://github.com/opensciencemap/vtm/issues/18
|
||||
* https://developers.google.com/maps/faq
|
||||
*/
|
||||
public static class GoogleMaps extends BitmapTileSource {
|
||||
public GoogleMaps(String hostName) {
|
||||
super(hostName, "/vt/x={X}&y={Y}&z={Z}&s=Galileo&scale=2", 1, 20); //jpeg for sat
|
||||
}
|
||||
}
|
||||
public static Builder<?> IMAGICO_LANDCOVER = BitmapTileSource.builder()
|
||||
.url("http://www.imagico.de/map/tiles/landcover")
|
||||
.tilePath("/{Z}/{X}/{Y}.jpg")
|
||||
.zoomMax(6);
|
||||
|
||||
final static FadeStep[] fadeSteps = new FadeStep[] {
|
||||
new FadeStep(0, 8 - 1, 1, 0.7f),
|
||||
@@ -91,4 +37,38 @@ public class DefaultSources {
|
||||
// fade above zoom max + 2, interpolate 1 to 0
|
||||
new FadeStep(8 - 1, 8 + 1, 0.7f, 0)
|
||||
};
|
||||
|
||||
public static Builder<?> MAPQUEST_AERIAL = BitmapTileSource.builder()
|
||||
.url("http://otile1.mqcdn.com/tiles/1.0.0/sat")
|
||||
.tilePath("/{Z}/{X}/{Y}.jpg")
|
||||
.fadeSteps(fadeSteps)
|
||||
.zoomMax(8);
|
||||
|
||||
public static Builder<?> NE_LANDCOVER = BitmapTileSource.builder()
|
||||
.url("http://opensciencemap.org/tiles/ne")
|
||||
.fadeSteps(fadeSteps)
|
||||
.zoomMax(8);
|
||||
|
||||
public static Builder<?> ARCGIS_RELIEF = BitmapTileSource.builder()
|
||||
.url("http://server.arcgisonline.com/ArcGIS/rest/services" +
|
||||
"/World_Shaded_Relief/MapServer/tile/")
|
||||
.tilePath("{Z}/{Y}/{X}")
|
||||
.zoomMax(13);
|
||||
|
||||
public static Builder<?> HD_HILLSHADE = BitmapTileSource.builder()
|
||||
.url("http://129.206.74.245:8004/tms_hs.ashx")
|
||||
.tilePath("?x={X}&y={Y}&z={Z}")
|
||||
.zoomMin(2)
|
||||
.zoomMax(16);
|
||||
|
||||
/**
|
||||
* https://github.com/opensciencemap/vtm/issues/18
|
||||
* https://developers.google.com/maps/faq
|
||||
*/
|
||||
|
||||
public static Builder<?> GOOGLE_MAPS = BitmapTileSource.builder()
|
||||
.url("INSERT URL")
|
||||
.tilePath("/vt/x={X}&y={Y}&z={Z}&s=Galileo&scale=2")
|
||||
.zoomMin(1)
|
||||
.zoomMax(20);
|
||||
}
|
||||
|
||||
@@ -45,6 +45,10 @@ public class MapFileTileSource extends TileSource {
|
||||
File mapFile;
|
||||
RandomAccessFile mInputFile;
|
||||
|
||||
public MapFileTileSource() {
|
||||
super(0, 18);
|
||||
}
|
||||
|
||||
public boolean setMapFile(String filename) {
|
||||
setOption("file", filename);
|
||||
|
||||
|
||||
@@ -22,12 +22,35 @@ import org.oscim.tiling.source.UrlTileSource;
|
||||
|
||||
public class OSciMap4TileSource extends UrlTileSource {
|
||||
|
||||
public OSciMap4TileSource() {
|
||||
this("http://opensciencemap.org/tiles/vtm");
|
||||
private final static String DEFAULT_URL = "http://opensciencemap.org/tiles/vtm";
|
||||
private final static String DEFAULT_PATH = "/{Z}/{X}/{Y}.vtm";
|
||||
|
||||
public static class Builder<T extends Builder<T>> extends UrlTileSource.Builder<T> {
|
||||
|
||||
public Builder() {
|
||||
super(DEFAULT_URL, DEFAULT_PATH, 0, 17);
|
||||
}
|
||||
|
||||
public OSciMap4TileSource build() {
|
||||
return new OSciMap4TileSource(this);
|
||||
}
|
||||
}
|
||||
|
||||
public OSciMap4TileSource(String url) {
|
||||
super(url, "/{Z}/{X}/{Y}.vtm");
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Builder<?> builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
protected OSciMap4TileSource(Builder<?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
public OSciMap4TileSource() {
|
||||
this(builder());
|
||||
}
|
||||
|
||||
public OSciMap4TileSource(String urlString) {
|
||||
this(builder().url(urlString));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -30,6 +30,10 @@ public class TestTileSource extends TileSource {
|
||||
|
||||
// private boolean mOpenFile = false;
|
||||
|
||||
public TestTileSource() {
|
||||
super(0, 18);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITileDataSource getDataSource() {
|
||||
return new TileDataSource();
|
||||
|
||||
Reference in New Issue
Block a user