add TileSource.Builders

This commit is contained in:
Hannes Janetzek
2014-09-11 20:11:29 +02:00
parent 67336e0c93
commit a97b3283a0
18 changed files with 276 additions and 131 deletions

View File

@@ -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) {

View File

@@ -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.");

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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();