开发者社区> 杰克.陈> 正文

关于百度地图API的地图坐标转换问题

简介: 原文:关于百度地图API的地图坐标转换问题 我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准确度不怎么精确,偏差很大。
+关注继续查看
原文:关于百度地图API的地图坐标转换问题

我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准确度不怎么精确,偏差很大。这里我要更正下:

国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

由此可以看出小编之前冤枉了百度地图,所以如果对您有误导还请见谅。所以写了篇关于百度地图API坐标转换的文章,并且对之前的模型做了修正。

实现代码:

1 //在百度 map中显示地址
2     var map = new BMap.Map("map_canvas");
3     var point = new BMap.Point(longitudeP , latitudeP);  // 创建点坐标  
4     map.centerAndZoom(point, 15);// 初始化地图,设置中心点坐标和地图级别  
5     var marker = new BMap.Marker(point);    
6     map.addOverlay(marker); 
7     BMap.Convertor.translate(point,0,translateCallback);     //真实经纬度转成百度坐标

回调函数代码:

1 //坐标转换完之后的回调函数
2 function translateCallback(point1){
3     var marker1 = new BMap.Marker(point1);
4     map.addOverlay(marker1);
5     var label = new BMap.Label("转换后的百度坐标",{offset:new BMap.Size(20,-10)});
6     marker1.setLabel(label); //添加百度label
7     map.setCenter(point1);
8 }

这是新的效果图:

可以看出转换出的效果还是相当精确的,并且从我这里的demo来看要比谷歌地图精确的多!所以如果也有像我一样的用户发现调用baidu map坐标有偏差的话,很有可能就是没有进行坐标转换。

关于这个demo:

在线查看demo 

 

demo代码:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
 6 <title>GIS开发利用html5获取经纬度并在百度地图中查看</title>
 7 <!--加载百度 map api-->
 8 <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=8827ee39511568ac0705d037d67b2624"></script>  
 9 <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
10 </head>
11 
12 <body>
13 <span id="support">将下面的经纬度输入谷歌地图:</span>
14 <div id="show">
15 纬度:<span id="latitude"></span><br />
16 经度:<span id="longitude"></span><br />
17 准确度:<span id="accuracy"></span>
18 </div>
19 <div id="map_canvas" style="width:500px; height:500px;"></div>
20 <script type="text/javascript">
21 var doc = document,
22     latitude = doc.getElementById('latitude'),
23     longitude = doc.getElementById('longitude'),
24     accuracy = doc.getElementById('accuracy'),
25     support = doc.getElementById('support'),
26     showDiv = doc.getElementById('show');
27 var map = new BMap.Map("map_canvas");
28 function lodeSupport(){
29     if(navigator.geolocation){
30         support.innerHTML = '将下面的经纬度输入谷歌地图(纬度 经度)查看自己位置:';
31         showDiv.style.display = 'block';
32         navigator.geolocation.getCurrentPosition(updataPosition);
33     }else{
34         support.innerHTML = '对不起,浏览器不支持!';
35         showDiv.style.display = 'none';
36     }
37 }
38 function updataPosition(position){
39     var latitudeP = position.coords.latitude,
40         longitudeP = position.coords.longitude,
41         accuracyP = position.coords.accuracy;
42     latitude.innerHTML = latitudeP;
43     longitude.innerHTML = longitudeP;
44     accuracy.innerHTML = accuracyP;
45     //在百度 map中显示地址
46     
47     var point = new BMap.Point(longitudeP , latitudeP);  // 创建点坐标  
48     map.centerAndZoom(point, 15);// 初始化地图,设置中心点坐标和地图级别  
49     var marker = new BMap.Marker(point);    
50     map.addOverlay(marker); 
51     BMap.Convertor.translate(point,0,translateCallback);     //真实经纬度转成百度坐标
52     
53 }
54 //坐标转换完之后的回调函数
55 function translateCallback(point1){
56     var marker1 = new BMap.Marker(point1);
57     map.addOverlay(marker1);
58     var label = new BMap.Label("转换后的百度坐标",{offset:new BMap.Size(20,-10)});
59     marker1.setLabel(label); //添加百度label
60     map.setCenter(point1);
61 }
62 
63 window.addEventListener('load', lodeSupport , true);
64 </script>
65 </body>
66 </html>

 

 转载自:http://malagis.com/baidu-maps-api-map-coordinate-conversion.html

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【百度地图API】如何制作一张魔兽地图!!——CS地图也可以,哈哈哈
原文:【百度地图API】如何制作一张魔兽地图!!——CS地图也可以,哈哈哈 摘要:   你玩魔兽不?你知道如何做一张魔兽地图不?!   快来看此文吧! --------------------------------------------- 一、制作魔兽地图的准备工作   其实,你只需要准备一些地图的瓦片图,就可以了。
1859 0
【百度地图API】——如何让标注自动呈现在最佳视野内
原文:【百度地图API】——如何让标注自动呈现在最佳视野内 摘要:   “我有一堆标注,不规则的散落在地图的各个地方,我想把它们展示在一个最佳视野中,怎么办呢?”一位API爱好者咨询道。 ----------------------------------------------------------------------------------------------------------------- 我们在百度地图API的类参考里,找到这个一个类,setViewport 。
1206 0
【百度地图API】如何制作多途经点的线路导航——驾车篇
原文:【百度地图API】如何制作多途经点的线路导航——驾车篇 摘要:   休假结束,酸奶小妹要从重庆驾车去北京。可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ---------------------------------------------------...
1865 0
阿里云物联网平台调用云端api常见问题汇总
云端调用api时推荐使用openapi测试一下下发的api,参考对应参数修改
2868 0
【百度地图API】——如何用label制作简易的房产标签
原文:【百度地图API】——如何用label制作简易的房产标签 摘要:   最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义。有没有快速简易创建房产标签的方法呢?   答案当然是有的啦~   我们可以利用label嘛! ------------------------------------------------------------------------------- 一、创建地图 这是老生常谈的三句话,初始化地图的js。
2302 0
【百度地图API】如何制作可拖拽的沿道路测距
原文:【百度地图API】如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼。可是,这只能测任意两点的直线距离,用途不够实际啊。比如,我想测试北京天安门到北京后海的距离,怎么办呢? 显然“沿道路测距”就显得尤为重要了。
1080 0
【百度地图API】如何实现信息窗口轮询
原文:【百度地图API】如何实现信息窗口轮询 摘要:   很多微博或者SNS开发者,想结合地图展示用户的微博或者状态。这时,利用信息窗口就是最好的展示方式了。   在这里,我们使用信息窗口轮询的方式来实现这一功能。
1056 0
项目中使用百度地图遇见的问题
2016-5-30 我想做出的效果是,当我鼠标移到marker上去的时候,显示重要信息,当我点击marker的时候,显示全部信息。 结果当我鼠标移上去的时候,是显示了重要信息,但是下面的页面完全不能点击的。
743 0
GDB调试技巧:gdb at pid无法调试的问题
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net    本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
1084 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载