/
TileSourceFactory.java
218 lines (185 loc) · 7.99 KB
/
TileSourceFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
package org.osmdroid.tileprovider.tilesource;
import org.osmdroid.util.MapTileIndex;
import java.util.ArrayList;
import java.util.List;
/**
* looking for mapquest? it's moved because they stopped supporting anonymous access to tiles
* @see MapQuestTileSource
* @see org.osmdroid.tileprovider.tilesource.bing.BingMapTileSource
* @see CloudmadeTileSource
* @see HEREWeGoTileSource
* @see MapBoxTileSource
* @see TMSOnlineTileSourceBase
*/
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[] {
"https://a.tile.openstreetmap.org/",
"https://b.tile.openstreetmap.org/",
"https://c.tile.openstreetmap.org/" },"© OpenStreetMap contributors",
new TileSourcePolicy(2, false, false));
// max concurrent thread number is 2 (cf. https://operations.osmfoundation.org/policies/tiles/)
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(final long pMapTileIndex) {
return getBaseUrl() + MapTileIndex.getZoom(pMapTileIndex) + "/" + MapTileIndex.getY(pMapTileIndex) + "/" + MapTileIndex.getX(pMapTileIndex);
}
};
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(final long pMapTileIndex) {
return getBaseUrl() + MapTileIndex.getZoom(pMapTileIndex) + "/" + MapTileIndex.getY(pMapTileIndex) + "/" + MapTileIndex.getX(pMapTileIndex);
}
};
/**
* 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);
}
}