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 protected String id; 013 014 public AbstractTMSTileSource(String name, String base_url, String id) { 015 this.name = name; 016 this.baseUrl = base_url; 017 if(baseUrl.endsWith("/")) { 018 baseUrl = baseUrl.substring(0,baseUrl.length()-1); 019 } 020 this.id = id; 021 } 022 023 @Override 024 public String getName() { 025 return name; 026 } 027 028 @Override 029 public String getId() { 030 return id; 031 } 032 033 @Override 034 public int getMaxZoom() { 035 return 21; 036 } 037 038 @Override 039 public int getMinZoom() { 040 return 0; 041 } 042 043 public String getExtension() { 044 return "png"; 045 } 046 047 /** 048 * @throws IOException when subclass cannot return the tile URL 049 */ 050 public String getTilePath(int zoom, int tilex, int tiley) throws IOException { 051 return "/" + zoom + "/" + tilex + "/" + tiley + "." + getExtension(); 052 } 053 054 public String getBaseUrl() { 055 return this.baseUrl; 056 } 057 058 @Override 059 public String getTileUrl(int zoom, int tilex, int tiley) throws IOException { 060 return this.getBaseUrl() + getTilePath(zoom, tilex, tiley); 061 } 062 063 @Override 064 public String toString() { 065 return getName(); 066 } 067 068 @Override 069 public String getTileType() { 070 return "png"; 071 } 072 073 /* 074 * Most tilesources use OsmMercator projection. 075 */ 076 @Override 077 public int getTileSize() { 078 return OsmMercator.TILE_SIZE; 079 } 080 081 @Override 082 public double getDistance(double lat1, double lon1, double lat2, double lon2) { 083 return OsmMercator.getDistance(lat1, lon1, lat2, lon2); 084 } 085 086 @Override 087 public int LonToX(double lon, int zoom) { 088 return (int )OsmMercator.LonToX(lon, zoom); 089 } 090 091 @Override 092 public int LatToY(double lat, int zoom) { 093 return (int )OsmMercator.LatToY(lat, zoom); 094 } 095 096 @Override 097 public double XToLon(int x, int zoom) { 098 return OsmMercator.XToLon(x, zoom); 099 } 100 101 @Override 102 public double YToLat(int y, int zoom) { 103 return OsmMercator.YToLat(y, zoom); 104 } 105 106 @Override 107 public double latToTileY(double lat, int zoom) { 108 return OsmMercator.LatToY(lat, zoom) / OsmMercator.TILE_SIZE; 109 } 110 111 @Override 112 public double lonToTileX(double lon, int zoom) { 113 return OsmMercator.LonToX(lon, zoom) / OsmMercator.TILE_SIZE; 114 } 115 116 @Override 117 public double tileYToLat(int y, int zoom) { 118 return OsmMercator.YToLat(y * OsmMercator.TILE_SIZE, zoom); 119 } 120 121 @Override 122 public double tileXToLon(int x, int zoom) { 123 return OsmMercator.XToLon(x * OsmMercator.TILE_SIZE, zoom); 124 } 125}