版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014322206/article/details/83055355
现在几乎每一个App都会收集用户位置信息,App得到的坐标大多是通过高德地图等SDK获取的,当使用这些坐标进行webGIS可视化的时候会发现各种偏离状况,坐标不对,叠加错位。这是由于不同SDK获取到的坐标可能属于不同坐标系,想要针对不同地图的地图将手中的坐标数据转换成相吻合的数据,可以采用coordtransform库来解决这一问题。
首先,了解现如今互联网坐标系的现状。
1. 地球坐标 (WGS84)
- 国际标准,从GPS设备中取出的数据的坐标系
- 国际地图提供商使用的坐标系
2. 火星坐标 (GCJ-02) 也叫国测局坐标系
- 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
- 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
3. 百度坐标 (BD-09)
- 百度标准,百度 SDK,百度地图,Geocoding 使用
- 百度在火星坐标上来了个二次加密
其次,设备与坐标系对应关系
1. 从设备获取经纬度(GPS)坐标
- 百度SDK,可以获取百度坐标(bd09,默认)或者火星坐标(GCJ02)
- IOS原生定位库,可以获取WGS84坐标
- 高德SDK,可以获取GCJ02坐标
2. 互联网在线地图使用的坐标系
- 火星坐标系:
- ios地图(其实是高德)
- Google国内地图(.cn域名下)
- 搜搜、阿里云、高德地图、腾讯
- 百度坐标系:
- 百度地图
- WGS84坐标系:
- Google国外地图
- osm地图等国外地图
最后,使用coordtransform库进行坐标转换
该库有NodeJS、浏览器、python以及命令行等用法,我参与的项目是需要从网页上将坐标以WGS84坐标导出,因此采用了浏览器方式,其他方法请参考链接文档。关键代码如下:
function exportWGS84Excel () {
......
$.ajax({
url:'/trace/web_getLocationList',
dataType: "json",
type: 'POST',
data:{"StartDate":startDate,"EndDate":endDate,"GroupID":GroupID,"UserID":UserID},
success:function (json) {
if(json!= null) {
for (var i = 0; i < json.recs.length; i++) {
//国测局坐标转wgs84坐标
var gcj02towgs84 = coordtransform.gcj02towgs84(json.recs[i].Longitude, json.recs[i].Latitude);
json.recs[i].Longitude = gcj02towgs84[0];
json.recs[i].Latitude = gcj02towgs84[1];
}
JSONToExcelConvertor(json, "导出记录");
}
},
error: function () {
alert("error page="+page);
}
});
}
感谢:https://github.com/wandergis/coordtransform#%E5%9C%B0%E7%90%83%E5%9D%90%E6%A0%87-wgs84