【JavaScript】经纬度转化 - 坐标系转换,度分秒,米
·
在地理信息系统(GIS)、地图服务、导航、位置服务等应用中,我们经常需要处理不同的坐标系和经纬度表示格式。常见的坐标系有:
-
WGS84:GPS全球卫星定位系统使用的坐标系,也是国际通用坐标系。
-
GCJ02:中国国家测绘局制定的坐标系,即“火星坐标系”,对WGS84坐标进行加密。
-
BD09:百度地图使用的坐标系,在GCJ02基础上进行了二次加密。
此外,经纬度的表示格式也有多种,最常见的是十进制表示法和度分秒表示法。
用途:
-
在不同地图服务(如Google地图、高德地图、百度地图)之间切换时,需要将坐标转换为对应的坐标系。
-
在显示坐标时,可能需要将十进制的经纬度转换为度分秒格式,以满足不同的展示需求。
使用gcoord进行坐标系转换
gcoord是一个轻量级的JavaScript库,用于处理地理坐标系的转换。它支持多种坐标系(如WGS84、GCJ02、BD09等)之间的转换。
首先,我们需要安装gcoord:
npm install gcoord
然后,我们可以在代码中引入并使用它。
示例代码:将WGS84坐标转换为GCJ02坐标
import { transform } from 'gcoord';
// 原始坐标,假设为WGS84坐标
const wgs84Point = [116.397428, 39.90923];
// 将WGS84坐标转换为GCJ02坐标
const gcj02Point = transform(wgs84Point, 'WGS84', 'GCJ02');
console.log(gcj02Point); // [116.403663, 39.914546]
同样,我们也可以将GCJ02坐标转换为BD09坐标:
const gcj02Point = [116.403663, 39.914546];
const bd09Point = transform(gcj02Point, 'GCJ02', 'BD09');
console.log(bd09Point); // [116.410369, 39.921336]
将十进制经纬度转换为度分秒格式
度分秒(DMS)是另一种表示经纬度的方式。它将一度分为60分,一分分为60秒。转换公式如下:
-
度:整数部分不变
-
分:小数部分乘以60,取整数部分
-
秒:剩余的小数部分再乘以60,取两位小数
示例代码:将十进制的经纬度转换为度分秒格式
function decimalToDMS(decimal) {
const degrees = Math.floor(decimal);
const minutesFloat = (decimal - degrees) * 60;
const minutes = Math.floor(minutesFloat);
const seconds = (minutesFloat - minutes) * 60;
// 保留秒的小数点后2位
return {
degrees,
minutes,
seconds: seconds.toFixed(2)
};
}
// 示例:将116.397428转换为度分秒
const lngDMS = decimalToDMS(116.397428);
const latDMS = decimalToDMS(39.90923);
console.log(`经度: ${lngDMS.degrees}°${lngDMS.minutes}'${lngDMS.seconds}"`);
console.log(`纬度: ${latDMS.degrees}°${latDMS.minutes}'${latDMS.seconds}"`);
输出结果:
经度: 116°23'50.74"
纬度: 39°54'33.23"
在实际应用中,我们还需要区分东经/西经、北纬/南纬。上述代码仅展示了转换计算,在实际使用中,可以根据正负号来添加方向标识。
示例网站:https://www.mapchaxun.cn/Regeo
更多推荐
所有评论(0)