摘要:

  休假结束,酸奶小妹要从重庆驾车去北京。可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢?

------------------------------------------------------------------------------------------------------------------------

一、创建地图

首先要告诉大家的是,API1.2版本取消密钥,取消服务设置,大家可以采用更加简短的方式引用API的JS啦~

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>

  

大家跟我一起来创建一张简单的地图:

var map = new BMap.Map("container");map.centerAndZoom(new BMap.Point(116.404, 39.915), 13);

  

然后为地图加上一些合适的控件:

map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件

  

我手工找到的重庆、西安、北京三个城市的坐标点,使用坐标拾取工具(请点击)可以轻松找到这三个经纬度。

当然,你也可以使用localsearch类的search方法。这个可以随意。

找到坐标点之后,创建三个点对象。

var myP1 = new BMap.Point(106.521436,29.532288);    //起点-重庆var myP2 = new BMap.Point(108.983569,34.285675);    //终点-西安var myP3 = new BMap.Point(116.404449,39.920423);    //终点-北京

  

二、创建一个驾车导航和两个驾车搜索

好啦,现在来创建一个驾车导航吧~

这句话是不是很简单?用这句话就可以创建驾车导航啦。

var driving = new BMap.DrivingRoute(map);    //创建驾车实例

  

然后写两个搜索方法:

第一个是搜索从重庆到西安的,第二个是从西安到北京的。

driving.search(myP1, myP2);                 //第一个驾车搜索driving.search(myP2, myP3);                 //第二个驾车搜索

  

三、自己绘制折线

接下来,我们在回调函数setSearchCompleteCallback中,把搜索完毕的路线绘制出来。

注意哦,这里是两个搜索的路线都绘制出来了哦~~

就这么简单的三句话,很简单吧。

第一句、获取数组

第二句、创建折线

第三句、添加折线覆盖物

    driving.setSearchCompleteCallback(function(){        var pts = driving.getResults().getPlan(0).getRoute(0).getPath();    //通过驾车实例,获得一系列点的数组

        var polyline = new BMap.Polyline(pts);             map.addOverlay(polyline);
}

  

这个时候,整个驾车导航就是这个样子滴,简直充满了喜感,像一条蚯蚓呢  O(∩_∩)O~

四、添加起点、终点、途经点marker

其实这个途经点,可以做成像百度地图首页的驾车导航那样,有红绿色的起点终点图标。如下图:

注意:这一点,大家随意,大家想加marker(可以更换任意的icon图片),或者想加label,甚至是别的什么覆盖物,都是OK的。

API技术咨询请先下载百度HI聊天工具JS版HI群:1357363移动版HI群:1363111

  

但是呢,我还是喜欢红色的标注啦,我还可以加上文字标注。

所以,我简单地用红色marker加label来表示了。如下图。

添加marker和label的代码如下:

        var m1 = new BMap.Marker(myP1);         //创建3个marker        var m2 = new BMap.Marker(myP2);        var m3 = new BMap.Marker(myP3);        map.addOverlay(m1);        map.addOverlay(m2);        map.addOverlay(m3);

        var lab1 = new BMap.Label("起点",{position:myP1});        //创建3个label        var lab2 = new BMap.Label("途径点",{position:myP2});        var lab3 = new BMap.Label("终点",{position:myP3});           map.addOverlay(lab1);        map.addOverlay(lab2);        map.addOverlay(lab3);

  

五、调整到最佳视野

个人认为setViewport是个非常有用的好东西。因为它可以把你的标注展示到一个最完美的视野内。

如果不加setViewport,你的地图可能只会出现一半的有效视野,而不是完整的3个标注都有。如下图:

代码很简单,先来看看类参考:

就是说,只要有点对象数组传进去,系统就会帮你完成最佳视野的展示!!

map.setViewport([myP1,myP2,myP3]);          //调整到最佳视野

小贴士:你可以做一个延时动画,让最佳视野的展示更漂亮! 

另外,marker也是可以有动画的,不要忽略了。详见:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&3_1#3&1 

六、完整代码

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>驾车途经点</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script></head><body><p><input type='button' value='开始' onclick='run();' /></p><div style="width:820px;height:500px;border:1px solid gray" id="container"></div>

</body></html><script type="text/javascript">var map = new BMap.Map("container");map.centerAndZoom(new BMap.Point(116.404, 39.915), 13);map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件

var myP1 = new BMap.Point(106.521436,29.532288);    //起点-重庆var myP2 = new BMap.Point(108.983569,34.285675);    //终点-西安var myP3 = new BMap.Point(116.404449,39.920423);    //终点-北京

window.run = function (){    map.clearOverlays();                        //清除地图上所有的覆盖物    var driving = new BMap.DrivingRoute(map);    //创建驾车实例    driving.search(myP1, myP2);                 //第一个驾车搜索    driving.search(myP2, myP3);                 //第二个驾车搜索    driving.setSearchCompleteCallback(function(){        var pts = driving.getResults().getPlan(0).getRoute(0).getPath();    //通过驾车实例,获得一系列点的数组

        var polyline = new BMap.Polyline(pts);             map.addOverlay(polyline);

        var m1 = new BMap.Marker(myP1);         //创建3个marker        var m2 = new BMap.Marker(myP2);        var m3 = new BMap.Marker(myP3);        map.addOverlay(m1);        map.addOverlay(m2);        map.addOverlay(m3);

        var lab1 = new BMap.Label("起点",{position:myP1});        //创建3个label        var lab2 = new BMap.Label("途径点",{position:myP2});        var lab3 = new BMap.Label("终点",{position:myP3});           map.addOverlay(lab1);        map.addOverlay(lab2);        map.addOverlay(lab3);

        setTimeout(function(){            map.setViewport([myP1,myP2,myP3]);          //调整到最佳视野        },1000);

    });}</script>

百度地图多途经点的线路导航——驾车篇相关推荐

  1. 【百度地图API】如何制作多途经点的线路导航——驾车篇

    摘要: 休假结束,酸奶×××要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ----------------------------------- ...

  2. 如何制作多途经点的线路导航——驾车篇

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 【腾讯地图API】制作多途经点的线路导航——路线坐标规划

    面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>>    最近百度地图转腾讯地图以前用过百度地图实现路线坐标规划,不过搜索了一些没有搜索到腾讯地图的路线坐标规划,于是参数 ...

  4. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  5. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  6. HTML5页面调用百度地图API,获取当前位置并导航到目的地

    微信也可用, <!DOCTYPE html> <html lang="zh-cmn-Hans"><meta charset="UTF-8&q ...

  7. 【百度地图】制作多途经点的线路导航,模拟运动 (vue,typescript)

    网上有从起点到终点的模拟线路和运动,途经点的比较少. 结合网上demo,再进行了一下修改. VUE (Typescript),先在index.html里引用 <!DOCTYPE html> ...

  8. 【百度地图API】制作多途经点的线路导航——路线坐标规划

    一.创建地图 大家跟我一起来创建一张简单的地图: var map = new BMap.Map("container"); map.centerAndZoom(new BMap.P ...

  9. 【百度地图API】制作多途经点的线路导航

    先创建一张地图的容器: <div class="pos-a" id="allmap"style="width: 100%; height: 95 ...

最新文章

  1. c语言aba字母塔,打印字母金字塔,昨晚看到某个帖子的题目
  2. 增加 oracle服务名,oracle本地服务名配置说明
  3. android保持数据库,android – 保持Firebase实时数据库中的数据始终保持同步
  4. 左神算法:反转单向和双向链表(Java版)
  5. Java web登录拦截器_SpringMVC拦截器(实现登录验证拦截器)
  6. 动手学CV-目标检测入门教程3:锚框(anchor)
  7. Ubuntu安装指定版本clang-format
  8. JBPM开发入门指南(3)
  9. PyQt5环境搭建及cx_freeze打包exe
  10. Xceed WPF 3D显示控件Xceed 3D Views for WPF控件详细介绍使用及下载
  11. 京东支付逻辑存在不安全因素
  12. 关于网站速度优化的一点建议
  13. Apache Flink®极简教程: 架构及原理 Stateful Computations over Data Streams
  14. 非常火的斗图表情包小程序源码
  15. 如何完美卸载Mysql
  16. 北京立交桥---- “迷桥”经历和不方便后悔
  17. btrfs管理及应用
  18. C语言编程>第二十周 ② 下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调、次最大数和b[1]中的数对调。
  19. 非法终端接入管控的三部曲:控、查、导
  20. MID:为3G而生,因3G引爆流行

热门文章

  1. 光标出现了方块是怎么回事
  2. 2020年中国纽扣产业链、进出口现状及企业经营状况分析,我国是全球纽扣出口大国「图」
  3. 数学分析教程史济怀练习17.3
  4. Hive User: root is not allowed to impersonate xxx问题
  5. AES CBC加密/解密
  6. Linux之文件共享服务
  7. 易语言python识别图片验证码_TensorFlow实战:验证码识别 (少样本高精度)
  8. 一键清除maven仓库中下载失败的jar包
  9. CPUFriend.kext 黑苹果 CPU睿频日志
  10. 凯越新手开手动档的问题