这是一篇关于WGS-84坐标系,GCJ-02坐标系,BD09坐标系相互转换的文章,方法都是网上查询得到的,并非原创。在我的项目中使用到地图定位功能,后台中返回两种坐标系经纬度,一种是百度地图获取的经纬度,另一种是GPS获取的经纬度。
首先介绍一下当前的互联网的坐标系都有哪些坐标系
地图坐标(WGS84)
-国际标准,从专业GPS 设备中取出的数据的坐标系
-国际地图提供商使用的坐标系
火星坐标 (GCJ-02)也叫国测局坐标系
-中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
-国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
百度坐标 (BD-09)
-百度标准,百度 SDK,百度地图,Geocoding 使用
需要注意的是小程序默认的是WGS84
第一种方法百度经纬度转换腾讯经纬度
//百度经纬度转换腾讯经纬度
reverseLocation: function() {
var that = this;
// 实例化API核心类
var demo = new QQMapWX({
key: '你的秘钥'
});
// 调用接口
demo.reverseGeocoder({
location: {
latitude: that.data.latitude,
longitude: that.data.longitude
},
coord_type: 3, //baidu经纬度
success: function(res) {
var latitude = res.result.ad_info.location.lat;
var longitude = res.result.ad_info.location.lng;
var markers = [{
iconPath: '../../../images/common/location.png',
longitude: longitude,
latitude: latitude,
id: "map",
}]
console.log(markers)
that.setData({
markers: markers,
longitude: longitude,
latitude: latitude
})
}
});
},
第二种方法
这里面有详细介绍
markerMap: function() {
var latitude = this.data.latitude
var longitude = this.data.longitude
var resultMap = gcoord.transform(
[latitude, longitude], // 经纬度坐标
gcoord.WGS84, // 当前坐标系
gcoord.GCJ02
)
var latitudeMap = resultMap[0]
var longitudeMap = resultMap[1]
var markers = [{
iconPath: '../../../images/common/location.png',
latitude: latitudeMap,
longitude: longitudeMap,
id: "map",
}]
console.log(markers)
this.setData({
markers: markers,
latitude: latitudeMap,
longitude: longitudeMap
})
},
第三个,也是解决我问题的方法(推荐)
原文链接
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转
小程序安装方法
npm i coordtransform -S --production
//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)
var coordtransform=require('coordtransform');
//百度经纬度坐标转国测局坐标
var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);
//国测局坐标转百度经纬度坐标
var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84转国测局坐标
var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);
//国测局坐标转wgs84坐标
var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);
console.log(bd09togcj02);
console.log(gcj02tobd09);
console.log(wgs84togcj02);
console.log(gcj02towgs84);
//result
//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]
//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]
//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]
//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]
marker:function(){
var wgs84togcj02 = markerJS.wgs84togcj02(this.data.longitude, this.data.latitude);
var gpslatitude = wgs84togcj02[1];
var gpslongitude = wgs84togcj02[0];
var markers = [{
iconPath: '../../../images/common/location.png',
latitude: gpslatitude,
longitude: gpslongitude,
id: "map",
}]
console.log(markers)
this.setData({
markers: markers,
latitude: gpslatitude,
longitude: gpslongitude
})
},
希望能帮到你!
网友评论