UNPKG

geotile_sdk

Version:

A tile sdk for Cloud Optimised Geotiff and shapefile

67 lines (57 loc) 1.55 kB
/* * @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 }