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

摘要:

  休假结束,酸奶小妹要从重庆驾车去北京。可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图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), );

  

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

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().getRoute().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>

  

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

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

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

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

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

  3. 百度地图API —— 制作多途经点的线路导航

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

  4. 【百度地图API】让用户选择起点和终点的驾车导航

    原文:[百度地图API]让用户选择起点和终点的驾车导航 摘要: 如果用户搜索“从机场到火车站”,使用驾车导航DrivingRoute会默认显示一条结果.但同一个城市可能有多个机场和火车站,那么,如何用 ...

  5. 【百度地图API】圣诞节里不会迷路的麋鹿——驾车导航

    原文:[百度地图API]圣诞节里不会迷路的麋鹿--驾车导航 任务描述: 可能大家还不知道,圣诞老人是爱迷路的老爷爷! 今年圣诞节又要到了,圣诞老人又要出来送礼物了.可是,他灰常的迷路呢! 还好,他有一 ...

  6. 【百度地图API】如何制作自定义样式的公交导航结果面板?

    原文:[百度地图API]如何制作自定义样式的公交导航结果面板? 摘要: 百度地图API有默认的公交导航结果面板,但样式比较单一:而百度地图上的结果面板就比较美观.如何利用百度地图API来制作一个比较美 ...

  7. 百度地图API和高德地图API资料集锦

    [高德地图API]从零开始学高德JS API(五)路线规划——驾车|公交|步行   [高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自 ...

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

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

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

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

随机推荐

  1. SNMP WINDOWS系统的命令行工具下载

    SNMP windows系统的命令行工具snmputil.exe下载链接:请点击

  2. Android - 和其他APP交互 - 把用户带到其他app

    Android的重要功能之一就是app可以根据要执行的操作让用户启动另外一个app.例如,app有一个商业地址然后想要在地图上显示,并不需要在app中加一个显示地图的activity,可以直接用Int ...

  3. TestNg显示器(一个)-----监听器,类型和配置使用---另外META-INF详细解释

    原创文章,版权所有所有.转载,归因:http://blog.csdn.net/wanghantong/article/details/40404939 TestNg提供了听众和拦截多种接口开发我们自己 ...

  4. UVA - 11637 Garbage Remembering Exam (组合+可能性)

    Little Tim is now a graduate,and is thinking about higher studies. However, he first needs to appear ...

  5. Redis于windows在安装

    下载的windows版本号是redis-2.0.2,解压到D盘下: D:\redis-2.0.2 进到该文件夹下,有下列文件: redis-server.exe:服务程序 redis-check-du ...

  6. maple 教程

    1 初识计算机代数系统Maple 1.1 Maple简说 1980年9月, 加拿大Waterloo大学的符号计算机研究小组成立, 開始了符号计算在计算机上实现的研究项目, 数学软件Maple是这个项目 ...

  7. secureCRT使用退格键(backspace)出现^H解决的方法

    刚新装了python-3.4.1,使用secureCRT连接上去,可是我在进入后,输入回格键时,屏幕显示的是^H,这个让人受不了.最终在网上找到了解决的方法,仅仅要改动一下secureCRT的配置就可 ...

  8. sgu128snack

    按我的理解大概说下题意: 有非常多个点,最多一万个,告诉你它们的坐标.如今须要构造一条闭合线.这个闭合线满足下面六点: 1必须是闭合的. 2必须用到全部的点. 3构造的线段之间若成角,则必须是90度. ...

  9. BZOJ 3589 动态树 树链拆分+纳入和排除定理

    标题效果:鉴于一棵树.每个节点有一个右值,所有节点正确启动值他们是0.有两种操作模式,0 x y代表x右所有点的子树的根值添加y. 1 k a1 b1 a2 b2 --ak bk代表质疑. 共同拥有者 ...

  10. WPF学习(1)WPF概述

    WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于NET Framework 3.0的一部分.它提供了统一的编程模型 ...