001// License: GPL. For details, see Readme.txt file. 002package org.openstreetmap.gui.jmapviewer.tilesources; 003 004import java.awt.Point; 005 006import org.openstreetmap.gui.jmapviewer.Coordinate; 007import org.openstreetmap.gui.jmapviewer.OsmMercator; 008import org.openstreetmap.gui.jmapviewer.TileXY; 009import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate; 010 011/** 012 * TMS tile source. 013 */ 014public class TMSTileSource extends AbstractTMSTileSource { 015 016 protected int maxZoom; 017 protected int minZoom; 018 protected OsmMercator osmMercator; 019 020 /** 021 * Constructs a new {@code TMSTileSource}. 022 * @param info tile source information 023 */ 024 public TMSTileSource(TileSourceInfo info) { 025 super(info); 026 minZoom = info.getMinZoom(); 027 maxZoom = info.getMaxZoom(); 028 this.osmMercator = new OsmMercator(this.getTileSize()); 029 } 030 031 @Override 032 public int getMinZoom() { 033 return (minZoom == 0) ? super.getMinZoom() : minZoom; 034 } 035 036 @Override 037 public int getMaxZoom() { 038 return (maxZoom == 0) ? super.getMaxZoom() : maxZoom; 039 } 040 041 @Override 042 public double getDistance(double lat1, double lon1, double lat2, double lon2) { 043 return osmMercator.getDistance(lat1, lon1, lat2, lon2); 044 } 045 046 @Override 047 public Point latLonToXY(double lat, double lon, int zoom) { 048 return new Point( 049 (int) osmMercator.lonToX(lon, zoom), 050 (int) osmMercator.latToY(lat, zoom) 051 ); 052 } 053 054 @Override 055 public ICoordinate xyToLatLon(int x, int y, int zoom) { 056 return new Coordinate( 057 osmMercator.yToLat(y, zoom), 058 osmMercator.xToLon(x, zoom) 059 ); 060 } 061 062 @Override 063 public TileXY latLonToTileXY(double lat, double lon, int zoom) { 064 return new TileXY( 065 osmMercator.lonToX(lon, zoom) / getTileSize(), 066 osmMercator.latToY(lat, zoom) / getTileSize() 067 ); 068 } 069 070 @Override 071 public ICoordinate tileXYToLatLon(int x, int y, int zoom) { 072 return new Coordinate( 073 osmMercator.yToLat(y * getTileSize(), zoom), 074 osmMercator.xToLon(x * getTileSize(), zoom) 075 ); 076 } 077}