/**
* Class to provide a map source for all OSM-like sources
* (eg mapnik, opencyclemap, openpistemap etc).
- * These can be single-layer or double-layer sources with png tiles
+ * These can be single-layer or double-layer sources with tiles
+ * in various formats (default png)
*/
public class OsmMapSource extends MapSource
{
*/
public OsmMapSource(String inName, String inUrl)
{
- this(inName, inUrl, null, 18);
+ this(inName, inUrl, "png", null, null, 18);
}
/**
- * Constructor giving name, urls and maximum zoom
+ * Constructor giving name, two strings and maximum zoom
+ * @param inName source name
+ * @param inStr1 base layer url
+ * @param inStr2 either base layer extension or upper layer url
+ * @param inMaxZoom maximum zoom level
+ */
+ public OsmMapSource(String inName, String inStr1, String inStr2, int inMaxZoom)
+ {
+ if (inStr2 != null && inStr2.length() == 3)
+ init(inName, inStr1, inStr2, null, null, 18);
+ else
+ init(inName, inStr1, "png", inStr2, "png", 18);
+ }
+
+ /**
+ * Constructor giving name, urls, extensions and maximum zoom
* @param inName source name
* @param inUrl1 base layer url
+ * @param inExt1 extension for base layer
* @param inUrl2 upper layer url
+ * @param inExt2 extension for top layer
* @param inMaxZoom maximum zoom level
*/
- public OsmMapSource(String inName, String inUrl1, String inUrl2, int inMaxZoom)
+ public OsmMapSource(String inName, String inUrl1, String inExt1,
+ String inUrl2, String inExt2, int inMaxZoom)
+ {
+ init(inName, inUrl1, inExt1, inUrl2, inExt2, inMaxZoom);
+ }
+
+ /**
+ * Initialisation giving name, urls, extensions and maximum zoom
+ * @param inName source name
+ * @param inUrl1 base layer url
+ * @param inExt1 extension for base layer
+ * @param inUrl2 upper layer url
+ * @param inExt2 extension for top layer
+ * @param inMaxZoom maximum zoom level
+ */
+ private void init(String inName, String inUrl1, String inExt1,
+ String inUrl2, String inExt2, int inMaxZoom)
{
_name = inName;
if (_name == null || _name.trim().equals("")) {_name = I18nManager.getText("mapsource.unknown");}
_baseUrls = new String[2];
_baseUrls[0] = fixBaseUrl(inUrl1);
_baseUrls[1] = fixBaseUrl(inUrl2);
+ _extensions = new String[2];
+ _extensions[0] = inExt1;
+ _extensions[1] = inExt2;
_siteNames = new String[2];
_siteNames[0] = fixSiteName(_baseUrls[0]);
_siteNames[1] = fixSiteName(_baseUrls[1]);
{
String[] items = inConfigString.substring(2).split(";");
try {
- if (items.length == 3) {
+ if (items.length == 3) { // single source url
source = new OsmMapSource(items[0], items[1], null, Integer.parseInt(items[2]));
}
- else if (items.length == 4) {
+ else if (items.length == 4) { // two urls or one url plus extension
source = new OsmMapSource(items[0], items[1], items[2], Integer.parseInt(items[3]));
}
+ else if (items.length == 6) { // two urls and two extensions
+ source = new OsmMapSource(items[0], items[1], items[2], items[3], items[4], Integer.parseInt(items[5]));
+ }
} catch (NumberFormatException nfe) {}
}
return source;
*/
public String makeURL(int inLayerNum, int inZoom, int inX, int inY)
{
- return _baseUrls[inLayerNum] + inZoom + "/" + inX + "/" + inY + getFileExtension(inLayerNum);
- }
-
- /** file extension is always png */
- public final String getFileExtension(int inLayerNum) {
- return ".png";
+ return _baseUrls[inLayerNum] + inZoom + "/" + inX + "/" + inY + "." + getFileExtension(inLayerNum);
}
/**