百度地图API如何批量转换为百度经纬度

百度地图API的官网上提供了常用坐标转换的示例。但是,一次只能转换一个,真的非常麻烦!!这里结合了官
首页 新闻资讯 行业资讯 百度地图API如何批量转换为百度经纬度

  百度地图API的官网上提供了常用坐标转换的示例。但是,一次只能转换一个,真的非常麻烦!!这里结合了官方的示例,自制一个批量转换工具,供大家参考。

因为我没有GPS坐标,就拿谷歌坐标做个示例了。

  首先要注意的是,百度和谷歌的经纬度坐标顺序是相反的。

  比如,谷歌的经纬度是

  newgoogle.maps.LatLng(39.90762965106183, 116.3786889372559)

  传入坐标转换接口的百度经纬度应该是

  newBMap.Point(116.3786889372559,39.90762965106183)

  所以,我建立一个数组,存放转换前的经纬度。创建百度的坐标点,但是用谷歌的经纬度。

复制

  //注意:百度和谷歌的经纬度坐标顺序是相反的。    varpoints = [newBMap.Point(116.3786889372559,39.90762965106183),    newBMap.Point(116.38632786853032,39.90795884517671),    newBMap.Point(116.39534009082035,39.907432133833574),    newBMap.Point(116.40624058825688,39.90789300648029),    newBMap.Point(116.41413701159672,39.90795884517671)    ];
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  然后调用官方公布的接口

  BMap.Convertor.transMore(points,2,callback);

  自己对这个坐标转换接口做了修改,让它可以多次返回结果。注意看注释部分。

  据说,百度坐标转换接口,有50次/秒的限制。

复制

  functiontransMore(points,type,callback){    for(varindex inpoints){    if(index >50){return;}    varxyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type +    "&to=4&x=" + points[index].lng + //这里要循环读入数组points的lng数据,直到points.length完毕。    "&y=" + points[index].lat +    "&callback=callback";    //动态创建script标签    load_script(xyUrl);    }   }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  进过上一步,坐标就转换好了。成为百度坐标了。但这时的百度坐标是加密的。看不懂……

  好在,我们可以直接利用这些加密的编码创建出Marker标注点。获取到对象后,直接使用即可。

复制

  functioncallback(xyResult){    if(xyResult.error != 0){return;}//出错就直接返回;    varpoint = newBMap.Point(xyResult.x, xyResult.y);    varmarker = newBMap.Marker(point);    map.addOverlay(marker);    map.setCenter(point);//由于写了这句,可以每一个被转的点都是中心点的过程    }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  到这里,批量转换就讲完啦~~

  下面说说我自己添加的其他功能:如何获取地图上的坐标点。

  如何获取地图上的坐标点,经纬度?

  先说说谷歌的:给地图添加事件,点击地图后直接弹出。

复制

  google.maps.event.addListener(map, 'click', function(e) {    alert(e.latLng);    });
  • 1.

  • 2.

  • 3.

  在说说百度的,也是给地图添加事件。

复制

  map.addEventListener("click",function(e){    alert(e.point.lng + "," + e.point.lat);    });
  • 1.

  • 2.

  • 3.

  大家发现谷歌和百度有什么不同了没有?

  对了,谷歌的经纬度像是封装在一起了样。而百度的经纬度是分开地~~~

  全部源代码:

  有两个文件,一个是htm,另一个是修改后的官方坐标转换js。

  批量转换.htm

复制

  <!DOCTYPE html>   <html>   <head>   <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/>   <script type="text/javascript"src="changeMore.js"></script> <title>批量转换坐标</title>   </head>   <body>   <input onclick="magic();"value="批量转换"type="button"/>(据说有50次/秒的限制哦)<hr />   <div style="clear:both">   <div style="float:left;">   <h4>谷歌地图</h4>   <div style="width:520px;height:340px;border:1px solid gray"id="map_canvas"></div>   <p>鼠标点击的谷歌坐标是:<span id="info"></span></p>   <script type="text/javascript"src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> <script type="text/javascript">   functioninitialize() {varmyOptions ={    zoom: 14,    center: newgoogle.maps.LatLng(39.90861722866082, 116.39679921252446),    mapTypeId: google.maps.MapTypeId.ROADMAP    };varmap =newgoogle.maps.Map(document.getElementById('map_canvas'),myOptions);    google.maps.event.addListener(map, 'click', function(e) {    document.getElementById("info").innerHTML =e.latLng;    });varmarker1 =newgoogle.maps.Marker({    position: newgoogle.maps.LatLng(39.90762965106183, 116.3786889372559),    map: map    });varmarker2 =newgoogle.maps.Marker({    position: newgoogle.maps.LatLng(39.90795884517671, 116.38632786853032),    map: map    });varmarker3 =newgoogle.maps.Marker({    position: newgoogle.maps.LatLng(39.907432133833574, 116.39534009082035),    map: map    });varmarker4 =newgoogle.maps.Marker({    position: newgoogle.maps.LatLng(39.90789300648029, 116.40624058825688),    map: map    });varmarker5 =newgoogle.maps.Marker({    position: newgoogle.maps.LatLng(39.90795884517671, 116.41413701159672),    map: map    });    }    google.maps.event.addDomListener(window, 'load', initialize);</script>   </div>   <div style="float:left;">   <h4>百度地图</h4>   <div style="width:520px;height:340px;border:1px solid gray"id="container"></div>   <p>鼠标点击的百度坐标是:(<span id="info2"></span>)</p>   <script type="text/javascript"src="http://api.map.baidu.com/api?v=1.2"></script> <script type="text/javascript">   varmap =newBMap.Map("container");    map.centerAndZoom(newBMap.Point(116.404, 39.915), 15);vari;varmarkers =[];    map.addEventListener("click",function(e){    document.getElementById("info2").innerHTML =e.point.lng +","+e.point.lat;    });//注意:百度和谷歌的经纬度坐标顺序是相反的。    varpoints =[newBMap.Point(116.3786889372559,39.90762965106183),newBMap.Point(116.38632786853032,39.90795884517671),newBMap.Point(116.39534009082035,39.907432133833574),newBMap.Point(116.40624058825688,39.90789300648029),newBMap.Point(116.41413701159672,39.90795884517671)    ];functioncallback(xyResult){ if(xyResult.error !=0){return;}//出错就直接返回;varpoint =newBMap.Point(xyResult.x, xyResult.y);varmarker =newBMap.Marker(point);    map.addOverlay(marker);    map.setCenter(point);//由于写了这句,可以每一个被转的点都是中心点的过程    }functionmagic(){    BMap.Convertor.transMore(points,2,callback);    }</script>   </div>   </div>   </body>   </html>   changeMore.js    //2011-7-25 zhangying    (function(){    functionload_script(xyUrl, callback){    varhead = document.getElementsByTagName('head')[0];   varscript = document.createElement('script');    script.type = 'text/javascript';    script.src = xyUrl;    //借鉴了jQuery的script跨域方法    scriptscript.onload = script.onreadystatechange = function(){    if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){    callback &&callback();    //Handle memory leak in IE    scriptscript.onload = script.onreadystatechange = null;    if( head &&script.parentNode ) {    head.removeChild( script );    }    }    };    //Use insertBefore instead of appendChild to circumvent an IE6 bug.    head.insertBefore( script, head.firstChild );    }    functiontransMore(points,type,callback){    for(varindex inpoints){    if(index >50){return;}    varxyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type +    "&to=4&x=" + points[index].lng + //这里要循环读入数组points的lng数据,直到points.length完毕。    "&y=" + points[index].lat +    "&callbackcallback=callback";    //动态创建script标签    load_script(xyUrl);    }    }    windowwindow.BMap = window.BMap || {};    BMap.Convertor = {};    BMap.Convertor.transMore = transMore;    })();
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

  • 41.

  • 42.

  • 43.

  • 44.

  • 45.

  • 46.

  • 47.

  • 48.

  • 49.

  • 50.

  • 51.

  • 52.

  • 53.

  • 54.

  • 55.

  • 56.

  • 57.

  • 58.

  • 59.

  • 60.

  • 61.

  • 62.

  • 63.

  • 64.

  • 65.

  • 66.

  • 67.

  • 68.

  • 69.

  • 70.

  • 71.

  • 72.

  • 73.

  • 74.

  • 75.

  • 76.

  • 77.

  • 78.

  • 79.

  • 80.

  • 81.

  • 82.

  • 83.

  • 84.

  • 85.

  • 86.

  • 87.

  • 88.

  • 89.

  • 90.

  • 91.

  • 92.

  • 93.

  • 94.

  • 95.

  • 96.

  • 97.

  • 98.

  • 99.

  • 100.

  • 101.

原文链接:http://www.cnblogs.com/milkmap/archive/2011/09/29/2195780.html

【编辑推荐】

  1. 详解百度地图API之地图标注

  2. 百度地图API之如何制作驾车导航

  3. 详解百度地图API之地图操作

  4. 详解百度地图API之自定义地图类型

  5. 怎么成为一个软件架构师

21    2011-10-21 09:28:25    百度地图API