地图经纬度转换(百度,高德,谷歌,Leaflet)

您所在的位置:网站首页 苹果地图换成谷歌 地图经纬度转换(百度,高德,谷歌,Leaflet)

地图经纬度转换(百度,高德,谷歌,Leaflet)

2024-03-31 15:28| 来源: 网络整理| 查看: 265

地图经纬度转换(百度,高德,谷歌,Leaflet)

-----因项目需求,要把百度地图的经纬度转换成Leaflet经纬度,感谢leaflet群里一个老哥提供的坐标转换插件(gcoord)-----

常用地图的经纬度一般为这几种格式:GCJ02、BD09、WGS84(既EPSG:4326)、EPSG:3857(基于墨卡托坐标系)

高德、腾讯(使用GCJ02) GCJ-02坐标系,也称火星坐标系,由中国国家测绘局在02年发布,是在GPS坐标(WGS-84坐标系)基础上经加密后而来。 谷歌(使用GCJ02和WGS84)

谷歌国内版经纬度用的 GCJ02(又名 国测局 或 火星坐标 )。

国外版用的是WGS84,通常【GPS设备获取到的原始经纬度和国外的地图厂商使用的都是WGS-84坐标系】,此外它的EPSG编号为EPSG:4326。

百度(使用BD09) BD09坐标,是在的GCJ02基础上再加密得到 Leaflet(默认使用EPSG:3857,也可以使用WGS84) EPSG:3857是平面坐标系,单位是米,它基于墨卡托投影,例如: [12914838.35, 4814529.9] 详细解释:GCJ02、BD09、WGS84都是地理坐标系,球面坐标,单位为度,这种坐标方便在地球上定位,但是不方便展示和进行面积距离计算,我们印象中的地图都是平面的,所以就有了另外一种平面坐标系,平面坐标系是通过投影的方式从地理坐标系中转换过来,所以也称为投影坐标系,通常单位为米,投影坐标系根据投影方式的不同存在多种,在Web开发的场景里通常使用的是Web墨卡托投影,编号为EPSG:3857,它基于墨卡托投影,把WGS-84坐标系投影成正方形,这是通过舍弃了南北85.051129纬度以上的地区实现的,因为它是正方形,所以一个大的正方形可以很方便的被分割为更小的正方形。 如何将xy轴坐标与经纬度坐标互转

在一般情况下,想要把EPSG:3857的坐标在球面坐标系上使用时,必须转换成经纬度坐标,方法如下:

// EPSG3857 xy轴坐标 转 经纬度坐标 const Convert_EPSG3857_To_Default3857 = (lat, lng) => { let tempLng = lng/20037508.34*180; let tempLat = lat/20037508.34*180; tempLat = 180/Math.PI*(2*Math.atan(Math.exp(tempLat*Math.PI/180))-Math.PI/2); return { lng: lng == 0 ? 0 : tempLng, lat: lat == 0 ? 0 : tempLat }; }; // 经纬度坐标 转 EPSG3857 xy轴坐标 const Convert_Default3857_To_EPSG3857 = (lat, lng) => { let mercator = {}; let x = lng * 20037508.34 / 180; let y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180); y = y * 20037508.34 / 180; mercator.x = x; mercator.y = y; return { lng: lng == 0 ? 0 : mercator.x, lat: lat == 0 ? 0 : mercator.y }; }; 各种经纬度坐标互转

通过插件进行转换

// 百度 转 EPSG3857 const Convert_BD09_To_EPSG3857 = (lat, lng) => { // 使用工具将百度经纬度直接转成EPSG:3857 let result = gcoord.transform( [lng, lat], // 经纬度坐标 gcoord.BD09, // 当前坐标系 gcoord.EPSG3857 // 目标坐标系 ); return { lng: lng == 0 ? 0 : result[0], lat: lat == 0 ? 0 : result[1] }; }; // EPSG3857 转 百度 const Convert_EPSG3857_To_BD09 = (lat, lng) => { // 使用工具将EPSG:3857经纬度直接转成百度经纬度 let result = gcoord.transform( [lng, lat], // 经纬度坐标 gcoord.EPSG3857, // 当前坐标系 gcoord.BD09 // 目标坐标系 ); return { lng: lng == 0 ? 0 : result[0], lat: lat == 0 ? 0 : result[1] }; };

注:如想要 leaflet 地图使用源码可私信我或评论区留邮箱

坐标转换(插件 gcoord )

插件使用方法:

// 引入插件 gcoord,(摘自插件文档) let result = gcoord.transform( [116.403988, 39.914266], // 经纬度坐标 gcoord.WGS84, // 当前坐标系 gcoord.BD09 // 目标坐标系 ); console.log(result); // [116.41661560068297, 39.92196580126834] // 当前坐标和目标坐标就是下面的 CRS,找到对应的值,进行转换即可

附gcoord文档内,各种经纬度说明:

CRS坐标格式说明gcoord.WGS84[lng,lat]WGS-84坐标系,GPS设备获取的经纬度坐标gcoord.GCJ02[lng,lat]GCJ-02坐标系,google中国地图、soso地图、aliyun地图、mapabc地图和高德地图所用的经纬度坐标gcoord.BD09[lng,lat]BD-09坐标系,百度地图采用的经纬度坐标gcoord.BD09LL[lng,lat]同BD09gcoord.BD09MC[x,y]BD-09米制坐标,百度地图采用的米制坐标,单位:米gcoord.BD09Meter[x,y]同BD09MCgcoord.Baidu[lng,lat]百度坐标系,BD-09坐标系别名,同BD-09gcoord.BMap[lng,lat]百度地图,BD-09坐标系别名,同BD-09gcoord.AMap[lng,lat]高德地图,同GCJ-02gcoord.WebMercator[x,y]Web Mercator投影,墨卡托投影,同EPSG3857,单位:米gcoord.WGS1984[lng,lat]WGS-84坐标系别名,同WGS-84gcoord.EPSG4326[lng,lat]WGS-84坐标系别名,同WGS-84gcoord.EPSG3857[x,y]Web Mercator投影,同WebMercator,单位:米gcoord.EPSG900913[x,y]Web Mercator投影,同WebMercator,单位:米

注:[插件github地址](GitHub - hujiulong/gcoord: 地理坐标系转换工具)

参考:[墨卡托坐标系与经纬度坐标系互相转换](墨卡托坐标系与经纬度坐标系互相转换 - 简书 (jianshu.com))



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3