001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer.tilesources;
003
004import java.io.IOException;
005
006import org.openstreetmap.gui.jmapviewer.OsmMercator;
007
008public abstract class AbstractTMSTileSource extends AbstractTileSource {
009
010    protected String name;
011    protected String baseUrl;
012
013    public AbstractTMSTileSource(String name, String base_url) {
014        this.name = name;
015        this.baseUrl = base_url;
016        if(baseUrl.endsWith("/")) {
017            baseUrl = baseUrl.substring(0,baseUrl.length()-1);
018        }
019    }
020
021    @Override
022    public String getName() {
023        return name;
024    }
025
026    @Override
027    public int getMaxZoom() {
028        return 21;
029    }
030
031    @Override
032    public int getMinZoom() {
033        return 0;
034    }
035
036    public String getExtension() {
037        return "png";
038    }
039
040    /**
041     * @throws IOException when subclass cannot return the tile URL
042     */
043    public String getTilePath(int zoom, int tilex, int tiley) throws IOException {
044        return "/" + zoom + "/" + tilex + "/" + tiley + "." + getExtension();
045    }
046
047    public String getBaseUrl() {
048        return this.baseUrl;
049    }
050
051    @Override
052    public String getTileUrl(int zoom, int tilex, int tiley) throws IOException {
053        return this.getBaseUrl() + getTilePath(zoom, tilex, tiley);
054    }
055
056    @Override
057    public String toString() {
058        return getName();
059    }
060
061    @Override
062    public String getTileType() {
063        return "png";
064    }
065
066    /*
067     * Most tilesources use OsmMercator projection.
068     */
069    @Override
070    public int getTileSize() {
071        return OsmMercator.TILE_SIZE;
072    }
073
074    @Override
075    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
076        return OsmMercator.getDistance(lat1, lon1, lat2, lon2);
077    }
078
079    @Override
080    public int LonToX(double lon, int zoom) {
081        return (int )OsmMercator.LonToX(lon, zoom);
082    }
083
084    @Override
085    public int LatToY(double lat, int zoom) {
086        return (int )OsmMercator.LatToY(lat, zoom);
087    }
088
089    @Override
090    public double XToLon(int x, int zoom) {
091        return OsmMercator.XToLon(x, zoom);
092    }
093
094    @Override
095    public double YToLat(int y, int zoom) {
096        return OsmMercator.YToLat(y, zoom);
097    }
098
099    @Override
100    public double latToTileY(double lat, int zoom) {
101        return OsmMercator.LatToY(lat, zoom) / OsmMercator.TILE_SIZE;
102    }
103
104    @Override
105    public double lonToTileX(double lon, int zoom) {
106        return OsmMercator.LonToX(lon, zoom) / OsmMercator.TILE_SIZE;
107    }
108
109    @Override
110    public double tileYToLat(int y, int zoom) {
111        return OsmMercator.YToLat(y * OsmMercator.TILE_SIZE, zoom);
112    }
113
114    @Override
115    public double tileXToLon(int x, int zoom) {
116        return OsmMercator.XToLon(x * OsmMercator.TILE_SIZE, zoom);
117    }
118}