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

@@ -14,6 +14,8 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.OPENSTREETMAP;
import org.oscim.android.MapActivity; import org.oscim.android.MapActivity;
import org.oscim.android.MapView; import org.oscim.android.MapView;
import org.oscim.android.cache.TileCache; import org.oscim.android.cache.TileCache;
@@ -22,7 +24,6 @@ import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.bitmap.DefaultSources;
import android.os.Bundle; import android.os.Bundle;
@@ -33,7 +34,7 @@ public class BitmapTileMapActivity extends MapActivity {
protected BitmapTileLayer mBitmapLayer; protected BitmapTileLayer mBitmapLayer;
public BitmapTileMapActivity() { public BitmapTileMapActivity() {
mTileSource = new DefaultSources.OpenStreetMap(); mTileSource = OPENSTREETMAP.build();
} }
public BitmapTileMapActivity(TileSource tileSource) { public BitmapTileMapActivity(TileSource tileSource) {

View File

@@ -16,6 +16,8 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -27,19 +29,18 @@ import org.oscim.layers.marker.ItemizedLayer.OnItemGestureListener;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerItem.HotspotPlace; import org.oscim.layers.marker.MarkerItem.HotspotPlace;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.tiling.source.bitmap.DefaultSources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
public class MarkerOverlayActivity extends BitmapTileMapActivity public class MarkerOverlayActivity extends BitmapTileMapActivity
implements OnItemGestureListener<MarkerItem> { implements OnItemGestureListener<MarkerItem> {
private MarkerSymbol mFocusMarker; private MarkerSymbol mFocusMarker;
public MarkerOverlayActivity() { public MarkerOverlayActivity() {
super(new DefaultSources.StamenToner()); super(STAMEN_TONER.build());
} }
@Override @Override
@@ -54,7 +55,7 @@ implements OnItemGestureListener<MarkerItem> {
ItemizedLayer<MarkerItem> markerLayer = ItemizedLayer<MarkerItem> markerLayer =
new ItemizedLayer<MarkerItem>(mMap, new ArrayList<MarkerItem>(), new ItemizedLayer<MarkerItem>(mMap, new ArrayList<MarkerItem>(),
symbol, this); symbol, this);
mMap.layers().add(markerLayer); mMap.layers().add(markerLayer);

View File

@@ -14,6 +14,8 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import org.oscim.android.MapActivity; import org.oscim.android.MapActivity;
import org.oscim.android.MapView; import org.oscim.android.MapView;
import org.oscim.layers.TileGridLayer; import org.oscim.layers.TileGridLayer;
@@ -25,7 +27,6 @@ import org.oscim.theme.IRenderTheme;
import org.oscim.theme.ThemeLoader; import org.oscim.theme.ThemeLoader;
import org.oscim.theme.VtmThemes; import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.bitmap.DefaultSources.StamenToner;
import org.oscim.tiling.source.geojson.HighroadJsonTileSource; import org.oscim.tiling.source.geojson.HighroadJsonTileSource;
import org.oscim.tiling.source.geojson.OsmBuildingJsonTileSource; import org.oscim.tiling.source.geojson.OsmBuildingJsonTileSource;
import org.oscim.tiling.source.geojson.OsmLanduseJsonTileSource; import org.oscim.tiling.source.geojson.OsmLanduseJsonTileSource;
@@ -49,7 +50,7 @@ public class OsmJsonMapActivity extends MapActivity {
mTileSource = new OsmWaterJsonTileSource(); mTileSource = new OsmWaterJsonTileSource();
mMap.setBaseMap(new BitmapTileLayer(mMap, new StamenToner())); mMap.setBaseMap(new BitmapTileLayer(mMap, STAMEN_TONER.build()));
mMap.layers().add(new TileGridLayer(mMap)); mMap.layers().add(new TileGridLayer(mMap));
IRenderTheme theme = ThemeLoader.load(VtmThemes.OSMARENDER); IRenderTheme theme = ThemeLoader.load(VtmThemes.OSMARENDER);

View File

@@ -16,13 +16,14 @@
*/ */
package org.oscim.android.test; package org.oscim.android.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.PathLayer; import org.oscim.layers.PathLayer;
import org.oscim.tiling.source.bitmap.DefaultSources;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
@@ -30,7 +31,7 @@ import android.os.SystemClock;
public class PathOverlayActivity extends BitmapTileMapActivity { public class PathOverlayActivity extends BitmapTileMapActivity {
public PathOverlayActivity() { public PathOverlayActivity() {
super(new DefaultSources.StamenToner()); super(STAMEN_TONER.build());
} }
@Override @Override
@@ -58,7 +59,8 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
} }
}, 50); }, 50);
} }
void redraw(){
void redraw() {
mMap.render(); mMap.render();
} }
@@ -71,7 +73,7 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
for (double lat = -90; lat <= 90; lat += 5) { for (double lat = -90; lat <= 90; lat += 5) {
List<GeoPoint> pts = new ArrayList<GeoPoint>(); List<GeoPoint> pts = new ArrayList<GeoPoint>();
for (double lon = -180; lon <= 180; lon += 2){ for (double lon = -180; lon <= 180; lon += 2) {
//pts.add(new GeoPoint(lat, lon)); //pts.add(new GeoPoint(lat, lon));
double longitude = lon + (pos * 180); double longitude = lon + (pos * 180);
if (longitude < -180) if (longitude < -180)
@@ -79,8 +81,8 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
if (longitude > 180) if (longitude > 180)
longitude -= 360; longitude -= 360;
double latitude = lat + (pos * 90); double latitude = lat + (pos * 90);
if (latitude< -90) if (latitude < -90)
latitude += 180; latitude += 180;
if (latitude > 90) if (latitude > 90)
latitude -= 180; latitude -= 180;

View File

@@ -20,7 +20,11 @@ public class S3DBMapActivity extends BaseMapActivity {
mMap.setTheme(VtmThemes.DEFAULT); mMap.setTheme(VtmThemes.DEFAULT);
TileSource ts = new OSciMap4TileSource("http://opensciencemap.org/tiles/s3db"); TileSource ts = OSciMap4TileSource.builder()
.url("http://opensciencemap.org/tiles/s3db")
.zoomMin(16)
.zoomMax(16)
.build();
if (USE_CACHE) { if (USE_CACHE) {
mS3dbCache = new TileCache(this, null, "s3db.db"); mS3dbCache = new TileCache(this, null, "s3db.db");

View File

@@ -1,13 +1,14 @@
package org.oscim.test; package org.oscim.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.HD_HILLSHADE;
import static org.oscim.tiling.source.bitmap.DefaultSources.OPENSTREETMAP;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_WATERCOLOR;
import org.oscim.gdx.GdxMap; import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.tiling.source.bitmap.DefaultSources.HillShadeHD;
import org.oscim.tiling.source.bitmap.DefaultSources.OpenStreetMap;
import org.oscim.tiling.source.bitmap.DefaultSources.StamenToner;
import org.oscim.tiling.source.bitmap.DefaultSources.StamenWatercolor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -18,23 +19,28 @@ public class BitmapLayerTest extends GdxMap {
final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class); final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class);
BitmapTileLayer mLayer = null; BitmapTileLayer mLayer = null;
BitmapTileLayer mShaded = null;
@Override @Override
protected boolean onKeyDown(int keycode) { protected boolean onKeyDown(int keycode) {
if (keycode == Input.Keys.NUM_1) { if (keycode == Input.Keys.NUM_1) {
mMap.layers().remove(mLayer); mMap.layers().remove(mLayer);
mLayer = new BitmapTileLayer(mMap, new OpenStreetMap()); mLayer = new BitmapTileLayer(mMap, OPENSTREETMAP.build());
mMap.layers().set(2, mLayer); mMap.layers().add(mLayer);
return true; return true;
} else if (keycode == Input.Keys.NUM_2) { } else if (keycode == Input.Keys.NUM_2) {
mMap.layers().remove(mLayer); mMap.layers().remove(mLayer);
mLayer = new BitmapTileLayer(mMap, new StamenWatercolor()); mLayer = new BitmapTileLayer(mMap, STAMEN_WATERCOLOR.build());
mMap.layers().set(2, mLayer); mMap.layers().add(mLayer);
return true; return true;
} else if (keycode == Input.Keys.NUM_3) { } else if (keycode == Input.Keys.NUM_3) {
mMap.layers().remove(mLayer); if (mShaded != null) {
mLayer = new BitmapTileLayer(mMap, new HillShadeHD()); mMap.layers().remove(mShaded);
mMap.layers().set(2, mLayer); mShaded = null;
} else {
mShaded = new BitmapTileLayer(mMap, HD_HILLSHADE.build());
mMap.layers().add(mShaded);
}
return true; return true;
} }
@@ -45,7 +51,7 @@ public class BitmapLayerTest extends GdxMap {
public void createLayers() { public void createLayers() {
MapRenderer.setBackgroundColor(0xff888888); MapRenderer.setBackgroundColor(0xff888888);
mLayer = new BitmapTileLayer(mMap, new StamenToner()); mLayer = new BitmapTileLayer(mMap, STAMEN_TONER.build());
mMap.layers().add(mLayer); mMap.layers().add(mLayer);
} }

View File

@@ -1,10 +1,11 @@
package org.oscim.test; package org.oscim.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.layers.tile.buildings.S3DBLayer; import org.oscim.layers.tile.buildings.S3DBLayer;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
public class MeshTest extends GdxMapApp { public class MeshTest extends GdxMapApp {
@@ -16,7 +17,7 @@ public class MeshTest extends GdxMapApp {
//VectorTileLayer l = mMap.setBaseMap(new OSciMap4TileSource()); //VectorTileLayer l = mMap.setBaseMap(new OSciMap4TileSource());
//mMap.setTheme(VtmThemes.DEFAULT); //mMap.setTheme(VtmThemes.DEFAULT);
mMap.setBaseMap(new BitmapTileLayer(mMap, new DefaultSources.StamenToner())); mMap.setBaseMap(new BitmapTileLayer(mMap, STAMEN_TONER.build()));
TileSource ts = new OSciMap4TileSource("http://opensciencemap.org/tiles/s3db"); TileSource ts = new OSciMap4TileSource("http://opensciencemap.org/tiles/s3db");
S3DBLayer tl = new S3DBLayer(mMap, ts); S3DBLayer tl = new S3DBLayer(mMap, ts);

View File

@@ -1,5 +1,7 @@
package org.oscim.test; package org.oscim.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import org.oscim.core.MercatorProjection; import org.oscim.core.MercatorProjection;
import org.oscim.gdx.GdxMap; import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
@@ -15,7 +17,6 @@ import org.oscim.layers.tile.vector.VectorTileLoader;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.theme.DebugTheme; import org.oscim.theme.DebugTheme;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
public class TileRenderTest extends GdxMap { public class TileRenderTest extends GdxMap {
@@ -114,7 +115,7 @@ public class TileRenderTest extends GdxMap {
} }
} }
mMap.setBaseMap(new BitmapTileLayer(mMap, new DefaultSources.StamenToner())); mMap.setBaseMap(new BitmapTileLayer(mMap, STAMEN_TONER.build()));
mMap.layers().add(l); mMap.layers().add(l);
} }

View File

@@ -1,5 +1,7 @@
package org.oscim.test.jeo; package org.oscim.test.jeo;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
@@ -14,7 +16,6 @@ import org.oscim.layers.OSMIndoorLayer;
import org.oscim.layers.TileGridLayer; import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.bitmap.BitmapTileLayer; import org.oscim.layers.tile.bitmap.BitmapTileLayer;
import org.oscim.test.JeoTest; import org.oscim.test.JeoTest;
import org.oscim.tiling.source.bitmap.DefaultSources.StamenToner;
public class LayerTest extends GdxMap { public class LayerTest extends GdxMap {
@@ -24,7 +25,7 @@ public class LayerTest extends GdxMap {
@Override @Override
public void createLayers() { public void createLayers() {
mMap.setBaseMap(new BitmapTileLayer(mMap, new StamenToner())); mMap.setBaseMap(new BitmapTileLayer(mMap, STAMEN_TONER.build()));
mMap.layers().add(new TileGridLayer(mMap)); mMap.layers().add(new TileGridLayer(mMap));
mMap.addTask(new Runnable() { mMap.addTask(new Runnable() {

View File

@@ -35,7 +35,6 @@ import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource; import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.bitmap.BitmapTileSource; import org.oscim.tiling.source.bitmap.BitmapTileSource;
import org.oscim.tiling.source.bitmap.DefaultSources; import org.oscim.tiling.source.bitmap.DefaultSources;
import org.oscim.tiling.source.bitmap.DefaultSources.StamenToner;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -90,17 +89,17 @@ class GwtMap extends GdxMap {
BitmapTileSource ts; BitmapTileSource ts;
if ("toner".equals(mapName)) if ("toner".equals(mapName))
ts = new StamenToner(); ts = DefaultSources.STAMEN_TONER.build();
else if ("osm".equals(mapName)) else if ("osm".equals(mapName))
ts = new DefaultSources.OpenStreetMap(); ts = DefaultSources.OPENSTREETMAP.build();
else if ("watercolor".equals(mapName)) else if ("watercolor".equals(mapName))
ts = new DefaultSources.StamenWatercolor(); ts = DefaultSources.STAMEN_WATERCOLOR.build();
else if ("arcgis-shaded".equals(mapName)) else if ("arcgis-shaded".equals(mapName))
ts = new DefaultSources.ArcGISWorldShaded(); ts = DefaultSources.ARCGIS_RELIEF.build();
else if ("imagico".equals(mapName)) else if ("imagico".equals(mapName))
ts = new DefaultSources.ImagicoLandcover(); ts = DefaultSources.IMAGICO_LANDCOVER.build();
else else
ts = new StamenToner(); ts = DefaultSources.STAMEN_TONER.build();
mMap.setBaseMap(new BitmapTileLayer(mMap, ts)); mMap.setBaseMap(new BitmapTileLayer(mMap, ts));
} else { } else {
@@ -123,7 +122,11 @@ class GwtMap extends GdxMap {
boolean s3db = mapUrl.params.containsKey("s3db"); boolean s3db = mapUrl.params.containsKey("s3db");
if (s3db) { if (s3db) {
TileSource ts = new OSciMap4TileSource("http://opensciencemap.org/tiles/s3db"); TileSource ts = OSciMap4TileSource.builder()
.url("http://opensciencemap.org/tiles/s3db")
.zoomMin(16)
.zoomMax(16)
.build();
mMap.layers().add(new S3DBLayer(mMap, ts)); mMap.layers().add(new S3DBLayer(mMap, ts));
} }
if (l != null) { if (l != null) {

View File

@@ -24,6 +24,26 @@ import com.google.gwt.user.client.ui.RootPanel;
public class BitmapTileSource extends UrlTileSource { public class BitmapTileSource extends UrlTileSource {
static final Logger log = LoggerFactory.getLogger(LwHttp.class); 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' * Create BitmapTileSource for 'url'
* *

View File

@@ -22,9 +22,44 @@ import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
public abstract class TileSource { 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 mZoomMin = 0;
protected int mZoomMax = 20; protected int mZoomMax = 20;
protected TileSource() {
}
protected TileSource(int zoomMin, int zoomMax) {
mZoomMin = zoomMin;
mZoomMax = zoomMax;
}
public abstract ITileDataSource getDataSource(); public abstract ITileDataSource getDataSource();
public abstract OpenResult open(); public abstract OpenResult open();
@@ -35,6 +70,8 @@ public abstract class TileSource {
public ITileCache tileCache; public ITileCache tileCache;
private FadeStep[] mFadeSteps;
/** /**
* Cache MUST be set before TileSource is added to a TileLayer! * Cache MUST be set before TileSource is added to a TileLayer!
*/ */
@@ -51,7 +88,7 @@ public abstract class TileSource {
} }
public FadeStep[] getFadeSteps() { public FadeStep[] getFadeSteps() {
return null; return mFadeSteps;
} }
public TileSource setOption(String key, String value) { 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 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(); public final static TileUrlFormatter URL_FORMATTER = new DefaultTileUrlFormatter();
private final URL mUrl; private final URL mUrl;
private final String[] mTilePath; private final String[] mTilePath;
@@ -39,19 +73,17 @@ public abstract class UrlTileSource extends TileSource {
public String formatTilePath(UrlTileSource tileSource, Tile tile); public String formatTilePath(UrlTileSource tileSource, Tile tile);
} }
public UrlTileSource(String url, String tilePath, int zoomMin, int zoomMax) { protected UrlTileSource(Builder<?> builder) {
this(url, tilePath); this(builder.url, builder.tilePath, builder.zoomMin, builder.zoomMax);
mZoomMin = zoomMin; mHttpFactory = builder.engineFactory;
mZoomMax = zoomMax;
} }
/** protected UrlTileSource(String urlString, String tilePath) {
* @param urlString 'http://example.com/' this(urlString, tilePath, 0, 17);
* @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, int zoomMin, int zoomMax) {
super(zoomMin, zoomMax);
if (tilePath == null) if (tilePath == null)
throw new IllegalArgumentException("tilePath cannot be null."); throw new IllegalArgumentException("tilePath cannot be null.");

View File

@@ -18,6 +18,26 @@ import org.slf4j.LoggerFactory;
public class BitmapTileSource extends UrlTileSource { public class BitmapTileSource extends UrlTileSource {
static final Logger log = LoggerFactory.getLogger(LwHttp.class); 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' * Create BitmapTileSource for 'url'
* *
@@ -26,15 +46,19 @@ public class BitmapTileSource extends UrlTileSource {
* implement getUrlString() for custom formatting. * implement getUrlString() for custom formatting.
*/ */
public BitmapTileSource(String url, int zoomMin, int zoomMax) { 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) { 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) { 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 @Override

View File

@@ -1,6 +1,7 @@
package org.oscim.tiling.source.bitmap; package org.oscim.tiling.source.bitmap;
import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep; 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 * 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 class DefaultSources {
public static class OpenStreetMap extends BitmapTileSource { public static Builder<?> OPENSTREETMAP = BitmapTileSource.builder()
public OpenStreetMap() { .url("http://tile.openstreetmap.org")
super("http://tile.openstreetmap.org", 0, 18); .zoomMax(18);
}
}
public static class OSMTransport extends BitmapTileSource { public static Builder<?> OSM_TRANSPORT = BitmapTileSource.builder()
public OSMTransport() { .url("http://a.tile.thunderforest.com/transport")
super("http://a.tile.thunderforest.com/transport", 0, 18); .zoomMax(18);
}
}
public static class StamenToner extends BitmapTileSource { public static Builder<?> STAMEN_TONER = BitmapTileSource.builder()
public StamenToner() { .url("http://a.tile.stamen.com/toner")
super("http://a.tile.stamen.com/toner", 0, 18); .zoomMax(18);
}
}
public static class StamenWatercolor extends BitmapTileSource { public static Builder<?> STAMEN_WATERCOLOR = BitmapTileSource.builder()
public StamenWatercolor() { .url("http://a.tile.stamen.com/watercolor")
super("http://a.tile.stamen.com/watercolor", 0, 16); .tilePath("/{Z}/{X}/{Y}.jpg")
} .zoomMax(18);
}
public static class ImagicoLandcover extends BitmapTileSource { public static Builder<?> IMAGICO_LANDCOVER = BitmapTileSource.builder()
public ImagicoLandcover() { .url("http://www.imagico.de/map/tiles/landcover")
super("http://www.imagico.de/map/tiles/landcover", 0, 6, ".jpg"); .tilePath("/{Z}/{X}/{Y}.jpg")
} .zoomMax(6);
}
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
}
}
final static FadeStep[] fadeSteps = new FadeStep[] { final static FadeStep[] fadeSteps = new FadeStep[] {
new FadeStep(0, 8 - 1, 1, 0.7f), new FadeStep(0, 8 - 1, 1, 0.7f),
@@ -91,4 +37,38 @@ public class DefaultSources {
// fade above zoom max + 2, interpolate 1 to 0 // fade above zoom max + 2, interpolate 1 to 0
new FadeStep(8 - 1, 8 + 1, 0.7f, 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; File mapFile;
RandomAccessFile mInputFile; RandomAccessFile mInputFile;
public MapFileTileSource() {
super(0, 18);
}
public boolean setMapFile(String filename) { public boolean setMapFile(String filename) {
setOption("file", filename); setOption("file", filename);

View File

@@ -22,12 +22,35 @@ import org.oscim.tiling.source.UrlTileSource;
public class OSciMap4TileSource extends UrlTileSource { public class OSciMap4TileSource extends UrlTileSource {
public OSciMap4TileSource() { private final static String DEFAULT_URL = "http://opensciencemap.org/tiles/vtm";
this("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) { @SuppressWarnings("rawtypes")
super(url, "/{Z}/{X}/{Y}.vtm"); 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 @Override

View File

@@ -30,6 +30,10 @@ public class TestTileSource extends TileSource {
// private boolean mOpenFile = false; // private boolean mOpenFile = false;
public TestTileSource() {
super(0, 18);
}
@Override @Override
public ITileDataSource getDataSource() { public ITileDataSource getDataSource() {
return new TileDataSource(); return new TileDataSource();