百度API实例——google地图数据转化为百度地图数据
前段时间做的项目前端都是用Google地图,最近在一个地方需要用到百度地图,因为不同地图都有自己的处理,同一个经纬度在不同地图上显示的位置并不相同,因此,要把以前的数据直接拿过来用需要做一个转换。查阅百度地图的js API之后发现有直接从google到baidu的转换api,不错啊,于是自己做了两个实例来记录一下,以后再用到也可以看看。
首先,转换api大致有两种,一个是单点转换,一个是批量坐标转换(好像一次能转换20个点左右,具体没深入查看),这里写了两个js程序,详见下面两个实例的部分代码:先加上相应的js库,
- <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=3140E164A92ec6884b61b080e7bd973a"></script>
- <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/changeMore.js"></script>
(1)单点转换
- /**
- * 从数据库中获取到一条路线上100个点的经纬度坐标(google地图下的数据),经过百度地图api转换之后,正常显示在百度地图上。
- */
- var result = new Array();
- var pointArray = new Array();
- var num =0;
- var sum=0;
- var map;
- $(document).ready(function(){
- $("#pref").click(function(){
- if(top.showRouteMapPageSource=="route"){
- location.href = "/VehicleManagement/pageController/getRoute";
- }
- else{
- location.href="/VehicleManagement/pageController/addRouteStep4";
- }
- });
- map = new BMap.Map("allmap");
- map.enableScrollWheelZoom();
- pointArray=[];
- result=[];
- num = 0;
- //parent.stopIdArray中包含了一条路线上所有点的集合
- for(var i = 0;i<parent.stopIdArray.length;i++){
- var point = new BMap.Point(parent.stopLngArray[i],parent.stopLatArray[i]);
- pointArray.push(point);
- }
- sum=pointArray.length;//一条路线上点的总数
- makeLine(map);
- });
- function makeLine() {
- var gpsPoint=new BMap.Point(pointArray[num].lng, pointArray[num].lat);
- // google转化为百度经纬度
- BMap.Convertor.translate(gpsPoint,2,function (point){
- result.push(point);
- var marker = new BMap.Marker(result[num]); //创建marker
- map.addOverlay(marker);
- //一个个点转换的过程中记录已转换点的个数
- num++;
- if(num==sum){
- makepoly(); //在最后一次画线
- }else{
- makeLine(); //循环坐标转换,并不画线
- }
- });
- }
- function makepoly(){
- if(parent.stopIdArray.length%2==0){
- map.centerAndZoom(result[parent.stopIdArray.length/2], 14);
- }
- else{
- map.centerAndZoom(result[(parent.stopIdArray.length-1)/2], 14);
- }
- var polyline = new BMap.Polyline(result, {
- strokeColor : "blue",
- strokeWeight : 6,
- strokeOpacity : 0.5
- });
- map.addOverlay(polyline);
- }
(2 )批量转换
- /**
- * 将一条路线的站点信息显示在地图上 批量转换google到baidu地图
- */
- var result = new Array();
- var pointArrays = new Array();
- var num =0;
- var sum=0;
- var map;
- $(document).ready(function(){
- $("#pref").click(function(){
- if(top.showRouteMapPageSource=="route"){
- location.href = "/VehicleManagement/pageController/getRoute";
- }
- else{
- location.href="/VehicleManagement/pageController/addRouteStep4";
- }
- });
- map = new BMap.Map("allmap");
- map.enableScrollWheelZoom();
- pointArrays=[];
- result=[];
- num = 0;
- var groupNum = 0;
- var pointArray = new Array();
- //parent.stopIdArray中包含了一条路线上所有点的集合,此处将点击分组,20个一组,批量坐标转换,提高效率
- for(var i = 0;i<parent.stopIdArray.length;i++){
- if(groupNum<20){
- var point = new BMap.Point(parent.stopLngArray[i],parent.stopLatArray[i]);
- pointArray.push(point);//分成20个一组
- groupNum++;
- }else{
- sum++;
- pointArrays.push(pointArray);// 一个小组作为一个元素加入pointArrays,并将容器置空
- groupNum=0;
- pointArray=[];
- }
- }
- if(groupNum!=0){
- sum++;
- pointArrays.push(pointArray);//最后一组可能不足20个
- }
- count();//循环纠偏,并显示到地图上
- });
- //分组转换,每一组转换后的数据都加入到result中
- function count() {
- var gpsPoints=pointArrays[num];
- // google转化为百度经纬度(参数2,表示是从GCJ-02坐标到百度坐标。参数0,表示是从GPS到百度坐标)
- BMap.Convertor.transMore(gpsPoints,2,callback);
- }
- callback= function (points){
- var xyResult = null;
- for(var index in points){
- xyResult = points[index];
- if(xyResult.error != 0){continue;}//出错就直接返回;
- var point = new BMap.Point(xyResult.x, xyResult.y);
- result.push(point);
- }
- num++;//表示一组
- // alert(num);
- if(num==sum){ //最后的时候执行一次
- makepoly();
- }else{
- count(); //循环坐标转换,批量
- }
- }
- function makepoly(){
- // alert(result.length);
- //图标
- for(var i=0;i<result.length;i++){
- var marker = new BMap.Marker(result[i]); //创建marker
- map.addOverlay(marker);
- }
- //地图居中,放大级别,不设置会出问题的。。
- if(parent.stopIdArray.length%2==0){
- map.centerAndZoom(result[parent.stopIdArray.length/2], 14);
- }
- else{
- map.centerAndZoom(result[(parent.stopIdArray.length-1)/2], 14);
- }
- //画线
- var polyline = new BMap.Polyline(result, {
- strokeColor : "blue",
- strokeWeight : 6,
- strokeOpacity : 0.5
- });
- map.addOverlay(polyline);
- }
百度API实例——google地图数据转化为百度地图数据的更多相关文章
- 【转】百度API获取城市名地名(附源码)
在做一个软件时,用到了定位功能.网上有很多关于google 的GPS定位,但网上关于google定位都没有用, 搜索下原因:(这里建议大家在中国就尽量不使用系统自带的定位) 因为Google的服务器不 ...
- 百度地图api 实例 自动提示 并计算两地的行驶距离
百度地图api 实例 自动提示 并计算两地的行驶距离 <!DOCTYPE html> <html> <head> <meta http-equiv=" ...
- 【百度地图API】百度API卫星图使用方法和卫星图对比工具
原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...
- 百度地图热力图--批量地址转换应用(基于百度api)
需求:把外卖订餐地址做个用户分布热力图 思路分析:第一步去百度地图api开放平台找例子 http://lbsyun.baidu.com/jsdemo.htm#c1_15 首先从百度API的demo例子 ...
- arcgis api for javascipt 加载天地图、百度地图
写在前面的话: 1.百度地图是自己定义的坐标系统,wkid=102100.百度地图数据是加密的产物.下文将附上百度坐标与WGS84,谷歌等坐标系统转换方法(地理-地理),此方法并未亲测,据说准 2.百 ...
- 去百度API的百度地图准确叠加和坐标转换的解决方案研究
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百 ...
- C#+JQuery+.Ashx+百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计
在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界 ...
- seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码
seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
随机推荐
- OC学习篇之---类的三大特性(封装,继承,多态)
之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...
- html相关操作点
$( "#members li a" ).bind( "click", function( e ) {} ); $( document ).live( &quo ...
- PHP定时任务实现(计划任务 vs node.js)
PHP自动任务(单线程) 一.计划任务实现 :最终需要在服务器(windows)上 设置计划任务 1.写好php任务文件 auto.php:链接数据库 判断条件操作数据库 2.创建bat文件 例:ru ...
- PAT甲级——A1141 PATRankingofInstitution【25】
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...
- 数据库(一)—— MySQL介绍
目录 MySQL介绍 一.MySQL版本 1.mysql主流版本 2.版本选择 二.MySQL连接与实例 1.MySQL的C/S结构 2.MySQL实例 三.mysql三层结构 1.连接层(连接上数据 ...
- 调用WPF程序时传入参数
http://blog.csdn.net/martin_cheng/article/details/41351013 http://blog.csdn.net/libby1984/article/de ...
- overflow:hidden失效
overflow:hidden失效 为了页面的健壮性,我们常常需要使用overflow:hidden.有时候是为了防止布局被撑开,有时候是为了配合其它规则实现文字截断,还有时候纯粹是为了创建块级上下文 ...
- python之模块导入方法总结
模块在python编程中的地位举足轻重,熟练运用模块可以大大减少代码量,以最少的代码实现复杂的功能. 下面介绍一下在python编程中如何导入模块: (1)import 模块名:直接导入,这里导入模块 ...
- docker--build base image
通过dockerfile build一个base image,在上面运行一个c程序 首先 1.创建一个目录. 2.然后创建一个c写的小程序,并且gcc编译好. 3.创建一个Dockerfile FRO ...
- javafx将数据库内容输出到tableview表格
一 .创建Fxml文件,用Javafx Scene Builder 编辑页面,创建tableview(表格)和tablecolum(表格中的列),并为其设置fxid: 二.生成fxml文件的控制类: ...