关于百度地图API的地图坐标转换问题
2015-01-15 12:19
351 查看
我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准确度不怎么精确,偏差很大。这里我要更正下:
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
由此可以看出小编之前冤枉了百度地图,所以如果对您有误导还请见谅。所以写了篇关于百度地图API坐标转换的文章,并且对之前的模型做了修正。
实现代码:
回调函数代码:
这是新的效果图:
可以看出转换出的效果还是相当精确的,并且从我这里的demo来看要比谷歌地图精确的多!所以如果也有像我一样的用户发现调用baidu map坐标有偏差的话,很有可能就是没有进行坐标转换。
转载自:http://malagis.com/baidu-maps-api-map-coordinate-conversion.html
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
由此可以看出小编之前冤枉了百度地图,所以如果对您有误导还请见谅。所以写了篇关于百度地图API坐标转换的文章,并且对之前的模型做了修正。
实现代码:
//在百度 map中显示地址 var map = new BMap.Map("map_canvas"); var point = new BMap.Point(longitudeP , latitudeP); // 创建点坐标 map.centerAndZoom(point, 15);// 初始化地图,设置中心点坐标和地图级别 var marker = new BMap.Marker(point); map.addOverlay(marker); BMap.Convertor.translate(point,0,translateCallback); //真实经纬度转成百度坐标
回调函数代码:
//坐标转换完之后的回调函数 function translateCallback(point1){ var marker1 = new BMap.Marker(point1); map.addOverlay(marker1); var label = new BMap.Label("转换后的百度坐标",{offset:new BMap.Size(20,-10)}); marker1.setLabel(label); //添加百度label map.setCenter(point1); }
这是新的效果图:
可以看出转换出的效果还是相当精确的,并且从我这里的demo来看要比谷歌地图精确的多!所以如果也有像我一样的用户发现调用baidu map坐标有偏差的话,很有可能就是没有进行坐标转换。
关于这个demo:
在线查看demodemo代码:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>GIS开发利用html5获取经纬度并在百度地图中查看</title> <!--加载百度 map api--> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=8827ee39511568ac0705d037d67b2624"></script> <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script> </head> <body> <span id="support">将下面的经纬度输入谷歌地图:</span> <div id="show"> 纬度:<span id="latitude"></span><br /> 经度:<span id="longitude"></span><br /> 准确度:<span id="accuracy"></span> </div> <div id="map_canvas" style="width:500px; height:500px;"></div> <script type="text/javascript"> var doc = document, latitude = doc.getElementById('latitude'), longitude = doc.getElementById('longitude'), accuracy = doc.getElementById('accuracy'), support = doc.getElementById('support'), showDiv = doc.getElementById('show'); var map = new BMap.Map("map_canvas"); function lodeSupport(){ if(navigator.geolocation){ support.innerHTML = '将下面的经纬度输入谷歌地图(纬度 经度)查看自己位置:'; showDiv.style.display = 'block'; navigator.geolocation.getCurrentPosition(updataPosition); }else{ support.innerHTML = '对不起,浏览器不支持!'; showDiv.style.display = 'none'; } } function updataPosition(position){ var latitudeP = position.coords.latitude, longitudeP = position.coords.longitude, accuracyP = position.coords.accuracy; latitude.innerHTML = latitudeP; longitude.innerHTML = longitudeP; accuracy.innerHTML = accuracyP; //在百度 map中显示地址 var point = new BMap.Point(longitudeP , latitudeP); // 创建点坐标 map.centerAndZoom(point, 15);// 初始化地图,设置中心点坐标和地图级别 var marker = new BMap.Marker(point); map.addOverlay(marker); BMap.Convertor.translate(point,0,translateCallback); //真实经纬度转成百度坐标 } //坐标转换完之后的回调函数 function translateCallback(point1){ var marker1 = new BMap.Marker(point1); map.addOverlay(marker1); var label = new BMap.Label("转换后的百度坐标",{offset:new BMap.Size(20,-10)}); marker1.setLabel(label); //添加百度label map.setCenter(point1); } window.addEventListener('load', lodeSupport , true); </script> </body> </html>
转载自:http://malagis.com/baidu-maps-api-map-coordinate-conversion.html
相关文章推荐
- 关于百度地图API的地图坐标转换问题
- 关于地图坐标转换的小总结
- GPS经纬度及谷歌地图坐标转换为百度地图坐标,解决地图显示经纬度的偏移问题
- 关于地图坐标标准的问题
- 关于地图坐标到屏幕坐标的转换
- JAVA里面关于byte数组和String之间的转换问题
- 关于C#数据类型之间转换的问题!
- 窗口坐标与地图坐标的转换
- 转:一个屏幕坐标和地图坐标转换的js代码
- 关于ToMapPoint过时造成的坐标转换的偏差
- 关于其他视频文件向.flv文件转换的问题
- 关于2147217913 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界 的问题解决方法
- 一个屏幕坐标和地图坐标转换的js代码
- 关于OPENGL坐标的问题(转)
- Sql中关于行列转换问题
- MapGuide open source开发系列教程五: 屏幕坐标与地图坐标(问题)已修改
- [导入]c#中的关于string的转换的问题
- [导入]c#中的关于string的转换的问题
- 一个地图坐标转换成屏幕坐标
- 关于混排文本修改转换系列问题--ASCII & UniCode