位置信息坐标转换(GCJ02坐标、WGS84坐标、bd09坐标之间的转换)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/u014322206/article/details/83055355