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}