package org.osmdroid.tileprovider.tilesource;
import org.osmdroid.tileprovider.MapTile;
import java.util.ArrayList;
import java.util.List;
/**
* looking for mapquest? it's moved because they stopped supporting anonymous access to tiles
* @see MapQuestTileSource
*/
public class TileSourceFactory {
/**
* Get the tile source with the specified name. The tile source must be one of the registered sources
* as defined in the static list mTileSources of this class.
*
* @param aName
* the tile source name
* @return the tile source
* @throws IllegalArgumentException
* if tile source not found
*/
public static ITileSource getTileSource(final String aName) throws IllegalArgumentException {
for (final ITileSource tileSource : mTileSources) {
if (tileSource.name().equals(aName)) {
return tileSource;
}
}
throw new IllegalArgumentException("No such tile source: " + aName);
}
public static boolean containsTileSource(final String aName) {
for (final ITileSource tileSource : mTileSources) {
if (tileSource.name().equals(aName)) {
return true;
}
}
return false;
}
/**
* Get the tile source at the specified position.
*
* @param aOrdinal
* @return the tile source
* @throws IllegalArgumentException
* if tile source not found
*/
@Deprecated
public static ITileSource getTileSource(final int aOrdinal) throws IllegalArgumentException {
for (final ITileSource tileSource : mTileSources) {
if (tileSource.ordinal() == aOrdinal) {
return tileSource;
}
}
throw new IllegalArgumentException("No tile source at position: " + aOrdinal);
}
/**
* returns all predefined tiles sources that are generally free to use. be sure to check the usage
* agreements yourself.
* @return
*/
public static List<ITileSource> getTileSources() {
return mTileSources;
}
/**
* adds a new tile source to the list
* @param mTileSource
*/
public static void addTileSource(final ITileSource mTileSource) {
mTileSources.add(mTileSource);
}
/**
* removes any tile sources whose name matches the regular expression
* @param aRegex regular expression
* @return number of sources removed
*/
public static int removeTileSources(final String aRegex) {
int n=0;
for (int i=mTileSources.size()-1; i>=0; --i) {
if (mTileSources.get(i).name().matches(aRegex)) {
mTileSources.remove(i);
++n;
}
}
return n;
}
public static final OnlineTileSourceBase MAPNIK = new XYTileSource("Mapnik",
0, 19, 256, ".png", new String[] {
"http://a.tile.openstreetmap.org/",
"http://b.tile.openstreetmap.org/",
"http://c.tile.openstreetmap.org/" },"© OpenStreetMap contributors");
public static final OnlineTileSourceBase PUBLIC_TRANSPORT = new XYTileSource(
"OSMPublicTransport", 0, 17, 256, ".png",
new String[] { "http://openptmap.org/tiles/" },"© OpenStreetMap contributors");
public static final OnlineTileSourceBase DEFAULT_TILE_SOURCE = MAPNIK;
// CloudMade tile sources are not in mTileSource because they are not free
// and therefore not provided by default.
public static final OnlineTileSourceBase CLOUDMADESTANDARDTILES = new CloudmadeTileSource(
"CloudMadeStandardTiles", 0, 18, 256, ".png",
new String[] { "http://a.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s",
"http://b.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s",
"http://c.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s" });
// FYI - This tile source has a tileSize of "6"
public static final OnlineTileSourceBase CLOUDMADESMALLTILES = new CloudmadeTileSource(
"CloudMadeSmallTiles", 0, 21, 64, ".png",
new String[] { "http://a.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s",
"http://b.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s",
"http://c.tile.cloudmade.com/%s/%d/%d/%d/%d/%d%s?token=%s" });
// The following tile sources are overlays, not standalone map views.
// They are therefore not in mTileSources.
public static final OnlineTileSourceBase FIETS_OVERLAY_NL = new XYTileSource("Fiets",
3, 18, 256, ".png",
new String[] { "http://overlay.openstreetmap.nl/openfietskaart-overlay/" },"© OpenStreetMap contributors");
public static final OnlineTileSourceBase BASE_OVERLAY_NL = new XYTileSource("BaseNL",
0, 18, 256, ".png",
new String[] { "http://overlay.openstreetmap.nl/basemap/" });
public static final OnlineTileSourceBase ROADS_OVERLAY_NL = new XYTileSource("RoadsNL",
0, 18, 256, ".png",
new String[] { "http://overlay.openstreetmap.nl/roads/" },"© OpenStreetMap contributors");
public static final OnlineTileSourceBase HIKEBIKEMAP = new XYTileSource("HikeBikeMap",
0, 18, 256, ".png",
new String[] { "http://a.tiles.wmflabs.org/hikebike/",
"http://b.tiles.wmflabs.org/hikebike/",
"http://c.tiles.wmflabs.org/hikebike/" });
/**
* This is actually another tile overlay
* @sunce 5.6.2
*/
public static final OnlineTileSourceBase OPEN_SEAMAP = new XYTileSource("OpenSeaMap",
3,18,256,".png", new String[] { "http://tiles.openseamap.org/seamark/"}, "OpenSeaMap");
public static final OnlineTileSourceBase USGS_TOPO = new OnlineTileSourceBase("USGS National Map Topo", 0, 15, 256, "",
new String[] { "https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/" },"USGS") {
@Override
public String getTileURLString(MapTile aTile) {
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX();
}
};
public static final OnlineTileSourceBase USGS_SAT = new OnlineTileSourceBase("USGS National Map Sat", 0, 15, 256, "",
new String[]{"https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/"},"USGS") {
@Override
public String getTileURLString(MapTile aTile) {
return getBaseUrl() + aTile.getZoomLevel() + "/" + aTile.getY() + "/" + aTile.getX();
}
};
/**
* Chart Bundle US Aeronautical Charts
* @since 5.6.2
*/
public static final OnlineTileSourceBase ChartbundleWAC = new XYTileSource("ChartbundleWAC", 4, 12, 256, ".png?type=google",
new String[]{"http://wms.chartbundle.com/tms/v1.0/wac/"}, "chartbundle.com");
/**
* Chart Bundle US Aeronautical Charts Enroute High
* @since 5.6.2
*/
public static final OnlineTileSourceBase ChartbundleENRH = new XYTileSource("ChartbundleENRH", 4, 12, 256, ".png?type=google",
new String[]{"http://wms.chartbundle.com/tms/v1.0/enrh/", "chartbundle.com"});
/**
* Chart Bundle US Aeronautical Charts Enroute Low
* @since 5.6.2
*/
public static final OnlineTileSourceBase ChartbundleENRL = new XYTileSource("ChartbundleENRL", 4, 12, 256, ".png?type=google",
new String[]{"http://wms.chartbundle.com/tms/v1.0/enrl/", "chartbundle.com"});
/**
* Open Topo Maps https://opentopomap.org
* @since 5.6.2
*/
public static final OnlineTileSourceBase OpenTopo= new XYTileSource("OpenTopoMap", 0, 19, 256, ".png",
new String[]{"https://opentopomap.org/"}, "Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)");
private static List<ITileSource> mTileSources;
static {
mTileSources = new ArrayList<ITileSource>();
mTileSources.add(MAPNIK);
mTileSources.add(PUBLIC_TRANSPORT);
mTileSources.add(HIKEBIKEMAP);
mTileSources.add(USGS_TOPO);
mTileSources.add(USGS_SAT);
mTileSources.add(ChartbundleWAC);
mTileSources.add(ChartbundleENRH);
mTileSources.add(ChartbundleENRL);
mTileSources.add(OpenTopo);
}
}