leaflet
Version:
JavaScript library for mobile-friendly interactive maps
69 lines (53 loc) • 2.05 kB
JavaScript
/*
* L.CRS is the base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
*/
L.CRS = {
// converts geo coords to pixel ones
latLngToPoint: function (latlng, zoom) {
var projectedPoint = this.projection.project(latlng),
scale = this.scale(zoom);
return this.transformation._transform(projectedPoint, scale);
},
// converts pixel coords to geo coords
pointToLatLng: function (point, zoom) {
var scale = this.scale(zoom),
untransformedPoint = this.transformation.untransform(point, scale);
return this.projection.unproject(untransformedPoint);
},
// converts geo coords to projection-specific coords (e.g. in meters)
project: function (latlng) {
return this.projection.project(latlng);
},
// converts projected coords to geo coords
unproject: function (point) {
return this.projection.unproject(point);
},
// defines how the world scales with zoom
scale: function (zoom) {
return 256 * Math.pow(2, zoom);
},
zoom: function (scale) {
return Math.log(scale / 256) / Math.LN2;
},
// returns the bounds of the world in projected coords if applicable
getProjectedBounds: function (zoom) {
if (this.infinite) { return null; }
var b = this.projection.bounds,
s = this.scale(zoom),
min = this.transformation.transform(b.min, s),
max = this.transformation.transform(b.max, s);
return L.bounds(min, max);
},
// whether a coordinate axis wraps in a given range (e.g. longitude from -180 to 180); depends on CRS
// wrapLng: [min, max],
// wrapLat: [min, max],
// if true, the coordinate space will be unbounded (infinite in all directions)
// infinite: false,
// wraps geo coords in certain ranges if applicable
wrapLatLng: function (latlng) {
var lng = this.wrapLng ? L.Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
lat = this.wrapLat ? L.Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,
alt = latlng.alt;
return L.latLng(lat, lng, alt);
}
};