|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.openstreetmap.gui.jmapviewer.OsmMercator
public class OsmMercator
This class implements the Mercator Projection as it is used by Openstreetmap (and google). It provides methods to translate coordinates from 'map space' into latitude and longitude (on the WGS84 ellipsoid) and vice versa. Map space is measured in pixels. The origin of the map space is the top left corner. The map space origin (0,0) has latitude ~85 and longitude -180
Field Summary | |
---|---|
private static double |
EARTH_RADIUS
|
static double |
MAX_LAT
|
static double |
MIN_LAT
|
private static int |
TILE_SIZE
|
Constructor Summary | |
---|---|
OsmMercator()
|
Method Summary | |
---|---|
static int |
falseEasting(int aZoomlevel)
|
static int |
falseNorthing(int aZoomlevel)
|
static double |
getDistance(double la1,
double lo1,
double la2,
double lo2)
Gets the distance using Spherical law of cosines. |
static double |
getDistance(int x1,
int y1,
int x2,
int y2,
int zoomLevel)
Transform pixelspace to coordinates and get the distance. |
static int |
getMaxPixels(int aZoomlevel)
Returns the absolut number of pixels in y or x, defined as: 2^Zoomlevel * TILE_WIDTH where TILE_WIDTH is the width of a tile in pixels |
static int |
LatToY(double aLat,
int aZoomlevel)
Transforms latitude to pixelspace |
static int |
LonToX(double aLongitude,
int aZoomlevel)
Transform longitude to pixelspace |
static double |
radius(int aZoomlevel)
|
static double |
XToLon(int aX,
int aZoomlevel)
Transforms pixel coordinate X to longitude |
static double |
YToLat(int aY,
int aZoomlevel)
Transforms pixel coordinate Y to latitude |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static int TILE_SIZE
public static final double MAX_LAT
public static final double MIN_LAT
private static double EARTH_RADIUS
Constructor Detail |
---|
public OsmMercator()
Method Detail |
---|
public static double radius(int aZoomlevel)
public static int getMaxPixels(int aZoomlevel)
aZoomlevel
- zoom level to request pixel data
public static int falseEasting(int aZoomlevel)
public static int falseNorthing(int aZoomlevel)
public static double getDistance(int x1, int y1, int x2, int y2, int zoomLevel)
x1
- the first x coordinatey1
- the first y coordinatex2
- the second x coordinatey2
- the second y coordinatezoomLevel
- the zoom level
public static double getDistance(double la1, double lo1, double la2, double lo2)
la1
- the Latitude in degreeslo1
- the Longitude in degreesla2
- the Latitude from 2nd coordinate in degreeslo2
- the Longitude from 2nd coordinate in degrees
public static int LonToX(double aLongitude, int aZoomlevel)
Mathematical optimization
x = radius(aZoomlevel) * toRadians(aLongitude) + falseEasting(aZoomLevel)
x = getMaxPixels(aZoomlevel) / (2 * PI) * (aLongitude * PI) / 180 + getMaxPixels(aZoomlevel) / 2
x = getMaxPixels(aZoomlevel) * aLongitude / 360 + 180 * getMaxPixels(aZoomlevel) / 360
x = getMaxPixels(aZoomlevel) * (aLongitude + 180) / 360
aLongitude
- [-180..180]
public static int LatToY(double aLat, int aZoomlevel)
Mathematical optimization
log(u) := log((1.0 + sin(toRadians(aLat))) / (1.0 - sin(toRadians(aLat))
y = -1 * (radius(aZoomlevel) / 2 * log(u)))) - falseNorthing(aZoomlevel))
y = -1 * (getMaxPixel(aZoomlevel) / 2 * PI / 2 * log(u)) - -1 * getMaxPixel(aZoomLevel) / 2
y = getMaxPixel(aZoomlevel) / (-4 * PI) * log(u)) + getMaxPixel(aZoomLevel) / 2
y = getMaxPixel(aZoomlevel) * ((log(u) / (-4 * PI)) + 1/2)
aLat
- [-90...90]
public static double XToLon(int aX, int aZoomlevel)
Mathematical optimization
lon = toDegree((aX - falseEasting(aZoomlevel)) / radius(aZoomlevel))
lon = 180 / PI * ((aX - getMaxPixels(aZoomlevel) / 2) / getMaxPixels(aZoomlevel) / (2 * PI)
lon = 180 * ((aX - getMaxPixels(aZoomlevel) / 2) / getMaxPixels(aZoomlevel))
lon = 360 / getMaxPixels(aZoomlevel) * (aX - getMaxPixels(aZoomlevel) / 2)
lon = 360 * aX / getMaxPixels(aZoomlevel) - 180
aX
- [0..2^Zoomlevel*TILE_WIDTH[
public static double YToLat(int aY, int aZoomlevel)
aY
- [0..2^Zoomlevel*TILE_WIDTH[
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |