source: osm/applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java@ 33286

Last change on this file since 33286 was 33286, checked in by donvip, 7 years ago

sonar - fix various issues

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
1// License: GPL. For details, see Readme.txt file.
2package org.openstreetmap.gui.jmapviewer.tilesources;
3
4import java.awt.Point;
5
6import org.openstreetmap.gui.jmapviewer.Coordinate;
7import org.openstreetmap.gui.jmapviewer.OsmMercator;
8import org.openstreetmap.gui.jmapviewer.Projected;
9import org.openstreetmap.gui.jmapviewer.Tile;
10import org.openstreetmap.gui.jmapviewer.TileRange;
11import org.openstreetmap.gui.jmapviewer.TileXY;
12import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
13import org.openstreetmap.gui.jmapviewer.interfaces.IProjected;
14
15/**
16 * TMS tile source.
17 */
18public class TMSTileSource extends AbstractTMSTileSource {
19
20 protected int maxZoom;
21 protected int minZoom;
22 protected OsmMercator osmMercator;
23
24 /**
25 * Constructs a new {@code TMSTileSource}.
26 * @param info tile source information
27 */
28 public TMSTileSource(TileSourceInfo info) {
29 super(info);
30 minZoom = info.getMinZoom();
31 maxZoom = info.getMaxZoom();
32 this.osmMercator = new OsmMercator(this.getTileSize());
33 }
34
35 @Override
36 public int getMinZoom() {
37 return (minZoom == 0) ? super.getMinZoom() : minZoom;
38 }
39
40 @Override
41 public int getMaxZoom() {
42 return (maxZoom == 0) ? super.getMaxZoom() : maxZoom;
43 }
44
45 @Override
46 public double getDistance(double lat1, double lon1, double lat2, double lon2) {
47 return osmMercator.getDistance(lat1, lon1, lat2, lon2);
48 }
49
50 @Override
51 public Point latLonToXY(double lat, double lon, int zoom) {
52 return new Point(
53 (int) osmMercator.lonToX(lon, zoom),
54 (int) osmMercator.latToY(lat, zoom)
55 );
56 }
57
58 @Override
59 public ICoordinate xyToLatLon(int x, int y, int zoom) {
60 return new Coordinate(
61 osmMercator.yToLat(y, zoom),
62 osmMercator.xToLon(x, zoom)
63 );
64 }
65
66 @Override
67 public TileXY latLonToTileXY(double lat, double lon, int zoom) {
68 return new TileXY(
69 osmMercator.lonToX(lon, zoom) / getTileSize(),
70 osmMercator.latToY(lat, zoom) / getTileSize()
71 );
72 }
73
74 @Override
75 public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
76 return new Coordinate(
77 osmMercator.yToLat(y * getTileSize(), zoom),
78 osmMercator.xToLon(x * getTileSize(), zoom)
79 );
80 }
81
82 @Override
83 public IProjected tileXYtoProjected(int x, int y, int zoom) {
84 double mercatorWidth = 2 * Math.PI * OsmMercator.EARTH_RADIUS;
85 double f = mercatorWidth * getTileSize() / osmMercator.getMaxPixels(zoom);
86 return new Projected(f * x - mercatorWidth / 2, -(f * y - mercatorWidth / 2));
87 }
88
89 @Override
90 public TileXY projectedToTileXY(IProjected p, int zoom) {
91 double mercatorWidth = 2 * Math.PI * OsmMercator.EARTH_RADIUS;
92 double f = mercatorWidth * getTileSize() / osmMercator.getMaxPixels(zoom);
93 return new TileXY((p.getEast() + mercatorWidth / 2) / f, (-p.getNorth() + mercatorWidth / 2) / f);
94 }
95
96 @Override
97 public boolean isInside(Tile inner, Tile outer) {
98 int dz = inner.getZoom() - outer.getZoom();
99 if (dz < 0) return false;
100 return outer.getXtile() == inner.getXtile() >> dz &&
101 outer.getYtile() == inner.getYtile() >> dz;
102 }
103
104 @Override
105 public TileRange getCoveringTileRange(Tile tile, int newZoom) {
106 if (newZoom <= tile.getZoom()) {
107 int dz = tile.getZoom() - newZoom;
108 TileXY xy = new TileXY(tile.getXtile() >> dz, tile.getYtile() >> dz);
109 return new TileRange(xy, xy, newZoom);
110 } else {
111 int dz = newZoom - tile.getZoom();
112 TileXY t1 = new TileXY(tile.getXtile() << dz, tile.getYtile() << dz);
113 TileXY t2 = new TileXY(t1.getX() + (1 << dz) - 1, t1.getY() + (1 << dz) - 1);
114 return new TileRange(t1, t2, newZoom);
115 }
116 }
117
118 @Override
119 public String getServerCRS() {
120 return "EPSG:3857";
121 }
122}
Note: See TracBrowser for help on using the repository browser.