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

摘要:

  百度地图API有默认的公交导航结果面板,但样式比较单一;而百度地图上的结果面板就比较美观。如何利用百度地图API来制作一个比较美观的公交导航结果面板呢?一起来学习一下吧。

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

首先,看一下百度地图上的结果面板,如下图:

再来看看百度地图API默认的结果面板:

大家发现有什么不一样的了麽?

对啦,API默认的结果面板上,没有那些好看的图标哦~~

接下来,我们要一起制作如下图一样的自定义API结果面板

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

一、创建一个公交导航

(如何创建地图,我这里就不写了。大家记得用1.2版本就好。)

注意写上回调函数onSearchComplete,当查询成功后,调用该函数milkSearchFun。

var tansit = new BMap.TransitRoute(map, {renderOptions:{map: map, autoViewport: true}, onSearchComplete: milkSearchFun});
tansit.search("中央民族大学", "北京邮电大学");

二、判断有无换乘

判断有无换乘,可以使用判断步行路段的方法。如果步行路段为2,表示没有换乘。代码如下:

var milkRouteNum = milkPlan.getNumRoutes();   //提前判断一下,如果为2,即表示无换乘.

API逻辑分析:

以最简单的“不换乘”为例,任意公交导航包含以下三个部分:

1、步行:从起点到公交站上车车站;

2、公交:从上车车站到下车车站;

3、步行:从下车车站到终点。

粉色表示步行路段,蓝色表示公交路段。红色为起点,绿色为终点。

示意图如下:

三、使用数据接口获取公交导航数据

全部注释,我都写得很清楚了,大家可以对应类参考,仔细查看一下。

    var milkStartTitle = tansit.getResults().getStart().title;  //公交导航起点的名字
var milkEndTitle = tansit.getResults().getEnd().title; //公交导航终点的名字
var milkPlan = tansit.getResults().getPlan(0); //获取第一条公交导航
var milkDescription = milkPlan.getDescription(); //获取第一条公交导航的全部描述(带html)

var milkLine = milkPlan.getLine(0).title; //获取公交线路(比如331路)的名称
var milkLineGeton = milkPlan.getLine(0).getGetOnStop().title; //获取上车点站名
var milkLineGetoff = milkPlan.getLine(0).getGetOffStop().title; //获取下车点站名

var milkRouteStart = milkPlan.getRoute(0).getDistance(); //从起点到上车车站的距离
var milkRouteEnd = milkPlan.getRoute(1).getDistance(); //从下车车站到终点的距离

四、打印出自定义的结果面板

获取到全部数据后,就可以自己随意定制结果面板了。

首先,打印起点milkStartTitle 和终点milkEndTitle 。

然后,按照步骤打印步行-公交-步行,这三个结果。(因为无换乘,所以有3段路。)

  注意:如果有步行距离为0的,可以做个判断,不打印该路段。

最后,加上一些css样式。

document.getElementById("milkResult").innerHTML = 
"<p style='background:url(start.jpg) no-repeat 0 center;padding:0 0 0 30px'><b style='color:#fff;background:#ff55cc;padding:2px;'>" + milkStartTitle + "</b></p>" +
"<p style='background:url(walk.jpg) no-repeat 0 center;padding:0 0 0 30px'>步行<b>" + milkRouteStart + "</b>,至" + milkStartTitle + "</p>" +
"<p style='background:url(bus.jpg) no-repeat 0 center;padding:0 0 0 30px'>在<b>" + milkLineGeton + "</b>上车,乘坐<b>" + milkLine + "</b>,在<b>" + milkLineGetoff + "</b>下车</p>" +
"<p style='background:url(walk.jpg) no-repeat 0 center;padding:0 0 0 30px'>步行<b>" + milkRouteEnd + "</b>,至终点</p>" +
"<p style='background:url(end.jpg) no-repeat 0 center;padding:0 0 0 30px'><b style='color:#fff;background:#ff55cc;padding:2px;'>" + milkEndTitle + "</b></p>";

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

TIPS:

误区一、有直接的结果面板样式接口使用。

解释:只能通过数据接口来实现修改结果面板样式的目的哦~

误区二、通过控制API默认结果面板自动生成的html标签来修改样式。

解释:描述里只有<b>这样的html标签,并没有用<p>来区分公交和步行的描述,所以无法直接用css来控制哦。如下图:

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

全部源代码:

<!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>
<style>
body {font-size:14px;line-height:20px;}
</style>
</head>
<body>
<div style="width:500px;height:340px;border:1px solid gray;float:left;" id="container"></div>
<div style="width:400px;height:340px;border:1px solid gray;float:left;border-left:none;"id="milkResult"></div>
</body>
</html>
<script type="text/javascript">
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.404, 39.915), 14);

function milkSearchFun(){
var milkStartTitle = tansit.getResults().getStart().title; //公交导航起点的名字
var milkEndTitle = tansit.getResults().getEnd().title; //公交导航终点的名字
var milkPlan = tansit.getResults().getPlan(0); //获取第一条公交导航
var milkDescription = milkPlan.getDescription(); //获取第一条公交导航的全部描述(带html)

var milkLine = milkPlan.getLine(0).title; //获取公交线路(比如331路)的名称
var milkLineGeton = milkPlan.getLine(0).getGetOnStop().title; //获取上车点站名
var milkLineGetoff = milkPlan.getLine(0).getGetOffStop().title; //获取下车点站名

var milkRouteNum = milkPlan.getNumRoutes(); //提前判断一下,如果为2,即表示无换乘.
var milkRouteStart = milkPlan.getRoute(0).getDistance(); //从起点到上车车站的距离
var milkRouteEnd = milkPlan.getRoute(1).getDistance(); //从下车车站到终点的距离

document.getElementById("milkResult").innerHTML =
"<p style='background:url(start.jpg) no-repeat 0 center;padding:0 0 0 30px'><b style='color:#fff;background:#ff55cc;padding:2px;'>" + milkStartTitle + "</b></p>" +
"<p style='background:url(walk.jpg) no-repeat 0 center;padding:0 0 0 30px'>步行<b>" + milkRouteStart + "</b>,至" + milkStartTitle + "</p>" +
"<p style='background:url(bus.jpg) no-repeat 0 center;padding:0 0 0 30px'>在<b>" + milkLineGeton + "</b>上车,乘坐<b>" + milkLine + "</b>,在<b>" + milkLineGetoff + "</b>下车</p>" +
"<p style='background:url(walk.jpg) no-repeat 0 center;padding:0 0 0 30px'>步行<b>" + milkRouteEnd + "</b>,至终点</p>" +
"<p style='background:url(end.jpg) no-repeat 0 center;padding:0 0 0 30px'><b style='color:#fff;background:#ff55cc;padding:2px;'>" + milkEndTitle + "</b></p>";

}

var tansit = new BMap.TransitRoute(map, {renderOptions:{map: map, autoViewport: true}, onSearchComplete: milkSearchFun});
tansit.search("故宫", "颐和园");
</script>

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

备注:

如果有“换乘”怎么办?(包含2个步行和1个公交以上的情况)

比如结果描述为:“乘坐地铁1号线,经过1站,到达东单,乘坐地铁5号线,经过1站,到达灯市口,步行约200米,到达灯市东口,乘坐110,经过5站,到达神路街,步行约240米,到达终点”

得到步行的段数是4,那么有“有3个公交段,4个步行段”。如下所示:

起点

步行:0米(起点到1号线)

公交:乘坐地铁1号线,经过1站,到达东单

步行:0米(地铁换乘,距离为0)

公交:乘坐地铁5号线,经过1站,到达灯市口

步行:200米

公交:乘坐110,经过5站,到达神路街

步行:240米

终点

【百度地图API】如何制作自定义样式的公交导航结果面板?的更多相关文章

  1. 【百度地图API】如何自定义地图图层?实例:制作麻点图(自定义图层+热区)

    原文:[百度地图API]如何自定义地图图层?实例:制作麻点图(自定义图层+热区) 摘要:自定义地图图层的用途十分广泛.常见的应用,比如制作魔兽地图和清华校园地图(使用切图工具即可轻松实现).今天我们来 ...

  2. 百度地图API如何给自定义覆盖物添加事件

    摘要: 给marker.lable.circle等Overlay添加事件很简单,直接addEventListener即可.那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~ --------- ...

  3. 百度地图api之如何自定义标注图标

    在百度地图api中,默认的地图图标是一个红色的椭圆形.但是在项目中常常要求我们建立自己的图标,类似于我的这个 操作很简单,分如下几步进行 步骤一:先ps一个图标,大小要合适,如果要背景透明的,记得保存 ...

  4. 百度地图api窗口信息自定义

    百度地图加载完后,完全可以用dom方法操作,比较常用的就是点击mark的弹窗,利用jQuery可以很快的创建弹窗,需要注意的就是地图都是异步加载,所以绑定时间要用 jQuery 事件 - delega ...

  5. 百度地图API 海量点 自定义添加信息

    <!--添加百度地图--> <script type="text/javascript" src="http://api.map.baidu.com/a ...

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

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

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

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

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

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

  9. 【百度地图API】——如何用label制作简易的房产标签

    原文:[百度地图API]--如何用label制作简易的房产标签 摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义.有没有快速简易创建房产 ...

随机推荐

  1. LightOJ1010---Knights in Chessboard (规律题)

    Given an m x n chessboard where you want to place chess knights. You have to find the number of maxi ...

  2. Libgdx Box2D现实------这缓释微丸(一个:项目介绍)

    它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...

  3. 使用WSE实现Web Service安全----我的第一篇

    原文:使用WSE实现Web Service安全----我的第一篇 WSE(Web Services Enhancements)是微软为了使开发者通过.NET创建出更强大,更好用的Web Service ...

  4. 原生js判断css动画结束 css 动画结束的回调函数

    原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...

  5. 仿微沟道效应,主要actionbar有些知识

    仿微沟道效应,主要actionbar有些知识 1.新actionBar的menu <menu xmlns:android="http://schemas.android.com/apk ...

  6. 电商指尖---(6)solrconfig.xml配置具体解释

    solrconfig.xml配置文件主要定义SOLR理规则,包含索引数据的存放位置,更新,删除,查询的一些规则配置. 能够在tomcat的安装路径下找到这个文件C:\Program Files\Apa ...

  7. C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘

    章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加入放大镜的功 ...

  8. Windows PHone 8 获取硬件信息

    /// <summary> /// 获取系统信息 /// </summary> private string GetDeviceInfo() { StringBuilder s ...

  9. 端口扫描之王——nmap入门精讲(转)

    端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...

  10. 使用log4j日志-配置载入问题

    1.在eclipse中,把log4j.properties放在类路径下,在项目启动时就会自己主动载入. 2.在idea中.把log4j.properties放在类路径下,可是项目启动时不能直接载入(原 ...