原文:【百度地图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. C++基于该模型模板包括节目外实例

    一个."经典模式"失败 我们学过C++的人都知道.在C++中组织代码的经典模型是:将函数或类的声明和定义部分分开在不同的文件之中   , 即一般将声明放在一个.h的头文件里而定义在 ...

  2. 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)

    原文:[原创]构建高性能ASP.NET站点之二 优化HTTP请求(前端) 构建高性能ASP.NET站点之二 优化HTTP请求(前端) 前言: 这段时间比较的忙,文章写不是很勤,希望大家谅解. 上一篇文 ...

  3. java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章

    java注意事项演示 地图产生表 演示样本  来自thinking in java 4 20代码的章 thinking in java 4免费下载:http://download.csdn.net/d ...

  4. 如何获得 oracle RAC 11g asm spfile S档

     方法一: [root@vmrac1 ~]# su - grid [grid@vmrac1 ~]$ sqlplus / as sysasm SQL*Plus: Release 11.2.0.3.0 ...

  5. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  6. MPQ Storm库 源代码分析 一个

    MPQ什么? MPQ维基上说的非常明确. 简而言之,它是暴雪公司用于游戏数据打包的工具.星际争霸,魔兽争霸游戏中都有使用.该工具内含游戏资源加密和压缩等功能.         git下载地址:http ...

  7. Linux查看网卡流量(转)

    sar 这个工具RHEL5自带有,默认也安装. 一个强大的工具(好像这些工具都蛮强的),参数很多,有时间man一下. -n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD ...

  8. DirectX 11游戏编程学习笔记2: 文章1章Vector Algebra(向量代数)

    本文由哈里_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页.而实体书是800多页,所以我在提到相关概念的时候.会使用章节号而 ...

  9. JavaEE(12) - JPA规范及实现(TopLink和Hibernate)

    1. JPA规范与ORM框架之间的联系 JPA规范并不属于EJB3规范,它是一套完全独立的规范,不仅可以在基于EJB的JavaEE应用程序中使用,而且完全可以在普通JavaSE应用程序中使用. JPA ...

  10. UVA1232 - SKYLINE(段树部分的变化)

    UVA1232 - SKYLINE(线段树区间改动) 题目链接 题目大意:依照顺序盖楼.假设这个位置(当前要盖的楼覆盖范围内)要新建的楼的高度>=之前就有的最大高度,那么就+1.最后输出这个+1 ...