/**
- 球体墨卡托
- /
export class WebMercator extends Projection {
/**- 地球半径
- /
static R: number = 6378137;
/** - 投影后的平面坐标范围
- /
get bound(): Bound {
return new Bound(-Math.PI * WebMercator.R, Math.PI * WebMercator.R, Math.PI * WebMercator.R, -Math.PI * WebMercator.R);
}
/** - @description: 经纬度转平面坐标
- @param {number} lng - 经度
- @param {number} lat - 纬度
- @return {number[]} 地理平面坐标
- /
project([lng, lat]): number[] {
const d = Math.PI / 180, sin = Math.sin(lat * d);
return [WebMercator.R * lng * d, WebMercator.R * Math.log((1 + sin) / (1 - sin)) / 2];
}
/** - @description: 平面坐标转经纬度坐标
- @param {number} lng - 经度
- @param {number} lat - 纬度
- @return {number[]} 经纬度坐标
- /
unproject([x, y]): number[] {
const d = 180 / Math.PI;
return [x * d / WebMercator.R, (2 * Math.atan(Math.exp(y / WebMercator.R)) - (Math.PI / 2)) * d];
}
}