geotile_sdk
Version:
A tile sdk for Cloud Optimised Geotiff and shapefile
67 lines (57 loc) • 1.55 kB
JavaScript
/*
* @Description: SRS convertor (spatial reference system ,SRS) 空间参考系的转换
* @Author: luojun1
* @Date: 2021-10-21 17:25:12
* @LastEditTime: 2021-12-02 16:51:19
*/
function tile2X (x, z) {
return (x / Math.pow(2, z) * 2 - 1) * 6378137.0 * Math.PI
}
function tile2Y (y, z) {
return (1 - 2 * y / Math.pow(2, z)) * 6378137.0 * Math.PI
}
// tile to bbox on web mercator
function tile2BBox (tile, tile2) {
if (!tile2) {
tile2 = [tile[0] + 1, tile[1] + 1]
}
var e = tile2X(tile2[0], tile[2])
var w = tile2X(tile[0], tile[2])
var s = tile2Y(tile2[1], tile[2])
var n = tile2Y(tile[1], tile[2])
return [w, s, e, n]
}
const r2d = 180 / Math.PI
function tile2lon (x, z) {
return (x / Math.pow(2, z) * 360 - 180)
}
function tile2lat (y, z) {
var n = Math.PI - 2 * Math.PI * y / Math.pow(2, z)
return (r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))))
}
// tile to bbox on WGS84
function tile2BBox84 (tile) {
var e = tile2lon(tile[0] + 1, tile[2])
var w = tile2lon(tile[0], tile[2])
var s = tile2lat(tile[1] + 1, tile[2])
var n = tile2lat(tile[1], tile[2])
return [w, s, e, n]
}
// WGS84 to web mercator
function WGS84To3857 (lng, lat) {
var out = []
out[0] = 6378137.0 * (Math.PI * lng / 180)
if (lat <= -90) {
out[1] = -20037508.3427892
} else if (lat >= 90) {
out[1] = 20037508.3427892
} else {
out[1] = 6378137.0 * Math.log(Math.tan((Math.PI * 0.25) + (0.5 * (Math.PI * lat / 180))))
};
return out
};
module.exports = {
tile2BBox,
tile2BBox84,
WGS84To3857
}