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

 

摘要:

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

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

一、创建地图

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

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

  

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

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

  

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

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

  

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

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

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

  1. 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); //终点-北京

  

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

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

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

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

  

然后写两个搜索方法:

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

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

  

三、自己绘制折线

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

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

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

第一句、获取数组

第二句、创建折线

第三句、添加折线覆盖物

  1. driving.setSearchCompleteCallback(function(){
    var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通过驾车实例,获得一系列点的数组
  2.  
  3. var polyline = new BMap.Polyline(pts);
    map.addOverlay(polyline);
  1. }

  

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

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

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

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

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

  

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

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

添加marker和label的代码如下:

  1. 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);
  2.  
  3. 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个标注都有。如下图:

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

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

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

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

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

六、完整代码

  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>
  2.  
  3. </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()); //添加缩略地图控件
  4.  
  5. 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); //终点-北京
  6.  
  7. 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(); //通过驾车实例,获得一系列点的数组
  8.  
  9. var polyline = new BMap.Polyline(pts);
    map.addOverlay(polyline);
  10.  
  11. 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);
  12.  
  13. 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);
  14.  
  15. setTimeout(function(){
    map.setViewport([myP1,myP2,myP3]); //调整到最佳视野
    },1000);
  16.  
  17. });
    }
    </script>

  

百度地图API —— 制作多途经点的线路导航的更多相关文章

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

    原文:[百度地图API]如何制作多途经点的线路导航--驾车篇 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ----- ...

  2. 【百度地图API】怎样制作多途经点的线路导航——驾车篇

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

  3. 借助百度地图API制作企业百度地图

    做网站需要插入地图,可以借助百度地图API,具体步骤如下: 1.打开百度地图API的网址:   http://api.map.baidu.com/lbsapi/creatmap/ 2.设置中心点 3. ...

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

    一.创建地图 首先要告诉大家的是,API1.2版本取消密钥,取消服务设置,大家可以采用更加简短的方式引用API的JS啦~ <script type="text/javascript&q ...

  5. 利用百度地图API制作房产酒店地图

    摘要: 想亲手制作一张酷讯.去哪儿.安居客.链接地产那样的房产.酒店地图麼?那赶快来学习吧.(以酷讯为例,如下图) 更多成功案例请点击:http://dev.baidu.com/wiki/map/in ...

  6. [工具向]__申请,下载,使用百度地图api

    前言 api即应用程序接口,在我们的日常开发中,我们不仅可以在开源代码仓库(,github,码云)中获得很大的帮助,在日常开发中占重要地位的另一个东西就是api,我们可以使用众多的第三方编写的优秀的a ...

  7. 【百度地图API】如何制作班级地理通讯录?LBS通讯录

    原文:[百度地图API]如何制作班级地理通讯录?LBS通讯录 摘要:班级通讯录必备的功能,比如人员列表,人员地理位置标注,展示复杂信息窗口,公交和驾车等.一般班级人员都不会超过300个,因为可以高效地 ...

  8. 【百度地图API】如何利用PhoneGap制作地图APP

    原文:[百度地图API]如何利用PhoneGap制作地图APP 摘要:百度地图API是一套由javascript编写的地图程序接口,按说它应该运行在浏览器上.现在,只要利用PhoneGap,我们就能开 ...

  9. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

随机推荐

  1. linux: cat more less tail head查看文件内容

  2. 钉钉开发笔记(三)MySQL的配置

    最近在编写web的过程中,经常需要与后台工作人员互动.由于比较麻烦.没有效率. 就果断的请教了,公司的后台大牛,学习下数据库的一些简单操作,现在就把利用MySQL连接服务器, 进行可视化操作的简单步骤 ...

  3. web.xml配置详解[转]

    引文: 对于一个J2EE领域的程序员而言,基本上每天都会和web应用打交道. 什么是web应用?最简单的web应用什么样?给你一个web应用你该从何入手? 1.什么是web应用? web应用是一种可以 ...

  4. Jedis连接Redis三种模式

    这里说的三种工作模式是指: 1.单机模式 2.分片模式 3.集群模式(since 3.0) 说明图详见以下: 使用单机模式连接: private String addr="192.168.1 ...

  5. jquery设置select选中的文本

    <select id="prov">  <option value="1">北京市</option>  <option ...

  6. Redhat9.0+Apache1.3.29+Mysql3.23.58+PHP4.3.4

    Redhat9.0+Apache1.3.29+Mysql3.23.58+PHP4.3.4 TAG标签: 摘要:红帽创建于1993年,是目前世界上最资深的Linux和开放源代码提供商,同时也是最获认可的 ...

  7. Memcached在Windows下的配置和使用(转)

    出处:http://www.cnblogs.com/sunniest/p/4154209.html Memcached学习笔记---- 安装和配置 首先,下载Memcached相关文件. 打开控制台, ...

  8. Mysql设计索引的原则

    内容来自书籍<深入浅出MySQL++数据库开发.优化与管理维护+第2版+唐汉明> 设计索引的原则1. 搜索的索引列,不一定是所要选择的列.换句话说,最适合索引的列是出现在 WHERE 子句 ...

  9. CodeForces 339B Xenia and Ringroad(水题模拟)

    题意:给定 n 个地方,然后再给 m 个任务,每个任务必须在规定的地方完成,并且必须按顺序完成,问你最少时间. 析:没什么可说的,就是模拟,记录当前的位置,然后去找和下一个位置相差多长时间,然后更新当 ...

  10. 在Arch gnome中安装一些软件

    一. 在Arch gnome中添加ibus中文输入法 1. 安装ibus-libpinyin. sudo pacman -S ibus-libpinyin 如果系统之前没有安装ibus,则先通过pac ...