在地理信息系统(GIS)、地图服务、导航、位置服务等应用中,我们经常需要处理不同的坐标系和经纬度表示格式。常见的坐标系有:

  • WGS84:GPS全球卫星定位系统使用的坐标系,也是国际通用坐标系。

  • GCJ02:中国国家测绘局制定的坐标系,即“火星坐标系”,对WGS84坐标进行加密。

  • BD09:百度地图使用的坐标系,在GCJ02基础上进行了二次加密。

此外,经纬度的表示格式也有多种,最常见的是十进制表示法和度分秒表示法。

用途:

  1. 在不同地图服务(如Google地图、高德地图、百度地图)之间切换时,需要将坐标转换为对应的坐标系。

  2. 在显示坐标时,可能需要将十进制的经纬度转换为度分秒格式,以满足不同的展示需求。

使用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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐