前段时间做的项目前端都是用Google地图,最近在一个地方需要用到百度地图,因为不同地图都有自己的处理,同一个经纬度在不同地图上显示的位置并不相同,因此,要把以前的数据直接拿过来用需要做一个转换。查阅百度地图的js API之后发现有直接从google到baidu的转换api,不错啊,于是自己做了两个实例来记录一下,以后再用到也可以看看。

首先,转换api大致有两种,一个是单点转换,一个是批量坐标转换(好像一次能转换20个点左右,具体没深入查看),这里写了两个js程序,详见下面两个实例的部分代码:先加上相应的js库,

  1. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=3140E164A92ec6884b61b080e7bd973a"></script>
  2. <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/changeMore.js"></script>

(1)单点转换

  1. /**
  2. *  从数据库中获取到一条路线上100个点的经纬度坐标(google地图下的数据),经过百度地图api转换之后,正常显示在百度地图上。
  3. */
  4. var result = new Array();
  5. var pointArray = new Array();
  6. var num =0;
  7. var sum=0;
  8. var map;
  9. $(document).ready(function(){
  10. $("#pref").click(function(){
  11. if(top.showRouteMapPageSource=="route"){
  12. location.href = "/VehicleManagement/pageController/getRoute";
  13. }
  14. else{
  15. location.href="/VehicleManagement/pageController/addRouteStep4";
  16. }
  17. });
  18. map = new BMap.Map("allmap");
  19. map.enableScrollWheelZoom();
  20. pointArray=[];
  21. result=[];
  22. num = 0;
  23. //parent.stopIdArray中包含了一条路线上所有点的集合
  24. for(var i = 0;i<parent.stopIdArray.length;i++){
  25. var point = new BMap.Point(parent.stopLngArray[i],parent.stopLatArray[i]);
  26. pointArray.push(point);
  27. }
  28. sum=pointArray.length;//一条路线上点的总数
  29. makeLine(map);
  30. });
  31. function makeLine() {
  32. var gpsPoint=new BMap.Point(pointArray[num].lng, pointArray[num].lat);
  33. // google转化为百度经纬度
  34. BMap.Convertor.translate(gpsPoint,2,function (point){
  35. result.push(point);
  36. var marker = new BMap.Marker(result[num]); //创建marker
  37. map.addOverlay(marker);
  38. //一个个点转换的过程中记录已转换点的个数
  39. num++;
  40. if(num==sum){
  41. makepoly();  //在最后一次画线
  42. }else{
  43. makeLine();  //循环坐标转换,并不画线
  44. }
  45. });
  46. }
  47. function makepoly(){
  48. if(parent.stopIdArray.length%2==0){
  49. map.centerAndZoom(result[parent.stopIdArray.length/2], 14);
  50. }
  51. else{
  52. map.centerAndZoom(result[(parent.stopIdArray.length-1)/2], 14);
  53. }
  54. var polyline = new BMap.Polyline(result, {
  55. strokeColor : "blue",
  56. strokeWeight : 6,
  57. strokeOpacity : 0.5
  58. });
  59. map.addOverlay(polyline);
  60. }

(2 )批量转换

    1. /**
    2. *  将一条路线的站点信息显示在地图上  批量转换google到baidu地图
    3. */
    4. var result = new Array();
    5. var pointArrays = new Array();
    6. var num =0;
    7. var sum=0;
    8. var map;
    9. $(document).ready(function(){
    10. $("#pref").click(function(){
    11. if(top.showRouteMapPageSource=="route"){
    12. location.href = "/VehicleManagement/pageController/getRoute";
    13. }
    14. else{
    15. location.href="/VehicleManagement/pageController/addRouteStep4";
    16. }
    17. });
    18. map = new BMap.Map("allmap");
    19. map.enableScrollWheelZoom();
    20. pointArrays=[];
    21. result=[];
    22. num = 0;
    23. var groupNum = 0;
    24. var pointArray = new Array();
    25. //parent.stopIdArray中包含了一条路线上所有点的集合,此处将点击分组,20个一组,批量坐标转换,提高效率
    26. for(var i = 0;i<parent.stopIdArray.length;i++){
    27. if(groupNum<20){
    28. var point = new BMap.Point(parent.stopLngArray[i],parent.stopLatArray[i]);
    29. pointArray.push(point);//分成20个一组
    30. groupNum++;
    31. }else{
    32. sum++;
    33. pointArrays.push(pointArray);// 一个小组作为一个元素加入pointArrays,并将容器置空
    34. groupNum=0;
    35. pointArray=[];
    36. }
    37. }
    38. if(groupNum!=0){
    39. sum++;
    40. pointArrays.push(pointArray);//最后一组可能不足20个
    41. }
    42. count();//循环纠偏,并显示到地图上
    43. });
    44. //分组转换,每一组转换后的数据都加入到result中
    45. function count() {
    46. var gpsPoints=pointArrays[num];
    47. // google转化为百度经纬度(参数2,表示是从GCJ-02坐标到百度坐标。参数0,表示是从GPS到百度坐标)
    48. BMap.Convertor.transMore(gpsPoints,2,callback);
    49. }
    50. callback= function (points){
    51. var xyResult = null;
    52. for(var index in points){
    53. xyResult = points[index];
    54. if(xyResult.error != 0){continue;}//出错就直接返回;
    55. var point = new BMap.Point(xyResult.x, xyResult.y);
    56. result.push(point);
    57. }
    58. num++;//表示一组
    59. //              alert(num);
    60. if(num==sum){ //最后的时候执行一次
    61. makepoly();
    62. }else{
    63. count(); //循环坐标转换,批量
    64. }
    65. }
    66. function makepoly(){
    67. //  alert(result.length);
    68. //图标
    69. for(var i=0;i<result.length;i++){
    70. var marker = new BMap.Marker(result[i]); //创建marker
    71. map.addOverlay(marker);
    72. }
    73. //地图居中,放大级别,不设置会出问题的。。
    74. if(parent.stopIdArray.length%2==0){
    75. map.centerAndZoom(result[parent.stopIdArray.length/2], 14);
    76. }
    77. else{
    78. map.centerAndZoom(result[(parent.stopIdArray.length-1)/2], 14);
    79. }
    80. //画线
    81. var polyline = new BMap.Polyline(result, {
    82. strokeColor : "blue",
    83. strokeWeight : 6,
    84. strokeOpacity : 0.5
    85. });
    86. map.addOverlay(polyline);
    87. }

百度API实例——google地图数据转化为百度地图数据的更多相关文章

  1. 【转】百度API获取城市名地名(附源码)

    在做一个软件时,用到了定位功能.网上有很多关于google 的GPS定位,但网上关于google定位都没有用, 搜索下原因:(这里建议大家在中国就尽量不使用系统自带的定位) 因为Google的服务器不 ...

  2. 百度地图api 实例 自动提示 并计算两地的行驶距离

    百度地图api 实例 自动提示 并计算两地的行驶距离 <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  3. 【百度地图API】百度API卫星图使用方法和卫星图对比工具

    原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...

  4. 百度地图热力图--批量地址转换应用(基于百度api)

    需求:把外卖订餐地址做个用户分布热力图 思路分析:第一步去百度地图api开放平台找例子 http://lbsyun.baidu.com/jsdemo.htm#c1_15 首先从百度API的demo例子 ...

  5. arcgis api for javascipt 加载天地图、百度地图

    写在前面的话: 1.百度地图是自己定义的坐标系统,wkid=102100.百度地图数据是加密的产物.下文将附上百度坐标与WGS84,谷歌等坐标系统转换方法(地理-地理),此方法并未亲测,据说准 2.百 ...

  6. 去百度API的百度地图准确叠加和坐标转换的解决方案研究

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百 ...

  7. C#+JQuery+.Ashx+百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计

    在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界 ...

  8. seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码

    seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...

  9. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

随机推荐

  1. Jquery 实现回车键触发功能

    keyup,上抬键盘 .$(function(){ 方法一: $(document).keyup(function(event){ if(event.keyCode ==13){ alert(&quo ...

  2. MySQL 5.7配置文件

    原文:http://www.voidcn.com/article/p-zrikccdi-hr.html # MySql5.7配置文件my.cnf设置[client]port = 3306socket ...

  3. PAT 1036 Boys vs Girls (25 分)

    1036 Boys vs Girls (25 分)   This time you are asked to tell the difference between the lowest grade ...

  4. IOS 创建目录/文件夹

    •IOS 应用目录简介 个文件夹:Documents, Library和 tmp.Library包含Caches.Preferences目录. Documents:应用中用户数据可以放在这里,iTun ...

  5. 使用js在页面上新建文件夹

    使用js在页面上新建文件夹 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  6. upc组队赛4 Go Latin

    Go Latin 题目描述 There are English words that you want to translate them into pseudo-Latin. To change a ...

  7. 开启MySQL远程访问权限 允许远程连接(阿里云服务器)、linux关闭防火墙

    1.登陆mysql:mysql -u root -p mysql> show databases; +--------------------+ | Database | +---------- ...

  8. android中的SQLite数据库

    SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...

  9. JQ实现仿淘宝条件筛选

    首先看下效果: Js代码: <script type="text/javascript"> $(".search_qxxx > ul > li & ...

  10. docker linux基本操作

    容器运行起来之后一些基本的工具还是要安装好: 这个工具的安装方式和linux是一样的,因为容器本身就是一个微linux系统 先安装 apt, 1 / apt-get update 安装了apt之后 可 ...