【百度地图API】如何制作“从这里出发”“到这里去”——公交篇

原文:【百度地图API】如何制作“从这里出发”“到这里去”——公交篇

摘要:

百度地图首页上的“从这里出发”“到这里去”,一直是开发者们很热衷的一个功能。那么,怎样结合百度的数据库,来制作这个功能呢?让我们一起来学习一下。

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

成品图如下:

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

零、基础知识准备

首先,我们来看看公交方案的“从这里去”“到这里来”是怎么制作的。

需要创建一个公交方案,然后使用search功能。

细心的朋友们已经看到了,search接口的start和end参数,其实是可以输入point的。

那么,“从这里出发”到天安门,就应该是search(point,“天安门”)。

从天安门出发“到这里来”,就是search(“天安门”,point)了。

专业地说,这叫做“单边检索”。就是一个参数是string字符串类型,另一个是point经纬度类型。

而这个point,正是检索出来的结果。

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

一、如何检索出地图数据

首先,创建一个检索对象。

var local = new BMap.LocalSearch(map,{onSearchComplete: searchComplete});   //构造一个查询

  

然后使用检索方法,如下:

local.search("希尔顿逸林酒店");

  

下面,写回调函数。因为AJAX的异步机制,我们需要写回调函数,才能对检索成功后的数据进行操作。

我们写这样一个函数,当检索成功后,返回第一个点,并且利用这个点进行标注的添加。

注意:开发者可以返回多个点,使用循环即可。详见《如何更改百度信息窗口》,里面有返回所有第一页10个结果的代码。

var searchComplete = function (results){if (local.getStatus() != BMAP_STATUS_SUCCESS){return ;    }var point = results.getPoi(0);        addMarker(point);}

  

标注的添加函数应该包含以下几个要点:

1、marker,就是标注的位置。(用户可自定义marker的图片,更改icon属性即可。见文章《自定义标注和信息窗口》)

2、infowindow,信息窗口信息。可以书写任意的htm内容。我取了百度数据库里的名称、地址、电话和经纬度信息。还放入了“从这里出发”“到这里去”的输入框。

3、添加标注。

4、重新设置中心点和地图级别。

//查询完毕添加自定义标注function addMarker(point){var marker = new BMap.Marker(point.point);var infoWindow = new BMap.InfoWindow("<div style='line-height:1.8em;font-size:12px;'><b>名称:</b>"+point.title+"</br><b>地址:</b>"+point.address+"</br><b>电话:</b>"+point.phoneNumber+"<p style='border-top:1px dashed #44aa99'></p>从这里到<input type='text' id='point_start' value='天安门' style='border:1px solid #aaa;background:none;' /><input type='button' onclick='bus_start();' value='公交' /></br>从<input type='text' value='天安门' style='border:1px solid #aaa;background:none;' id='point_end' />到这里<input type='button' onclick='bus_end();' value='公交' /></div>");  // 创建信息窗口对象    map.addOverlay(marker);        setTimeout(function(){map.centerAndZoom(point.point,14);marker.openInfoWindow(infoWindow);},500);}

  

第一步完成以后,运行你的页面,就是这个样子啦:

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

二、公交查询语句“从这里出发”和“到这里来”

首先,创建一个公交导航的对象。

map:map  是说,把公交线路图展现在map地图上。

panel:results  是说,把结果面板,展示在results里面。注意,这里要加上引号。

var transit = new BMap.TransitRoute(map, {renderOptions: {map: map, panel : "results"}});

  

创建好之后,就开始做公交查询了。

把刚才取到的经纬度,做为起点或者终点,进行公交查询。

function bus_start(){    transit.search(thisPoint , document.getElementById("point_start").value);}function bus_end(){    transit.search(document.getElementById("point_end").value , thisPoint);}

  

公交查询的结果将会显示在results里面。如下图:

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

三、全部源代码

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=uft-8" /><title>公交方案的单边检索</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script></head><body><p><input type="text" id="myPOI" value="希尔顿逸林大酒店" /><input type="button" onclick="poi_search();" value="查询地点" /></p><div style="clear:both;"></div><div style="float:left;width:520px;height:340px;border:1px solid gray" id="container"></div><div style="float:left;width:520px;min-height:340px;border:1px solid gray" id="results"></div></body></html><script type="text/javascript">var thisPoint;//查询完毕添加自定义标注function addMarker(point){var marker = new BMap.Marker(point.point);var infoWindow = new BMap.InfoWindow("<div style='line-height:1.8em;font-size:12px;'><b>名称:</b>"+point.title+"</br><b>地址:</b>"+point.address+"</br><b>电话:</b>"+point.phoneNumber+"<p style='border-top:1px dashed #44aa99'></p>从这里到<input type='text' id='point_start' value='天安门' style='border:1px solid #aaa;background:none;' /><input type='button' onclick='bus_start();' value='公交' /></br>从<input type='text' value='天安门' style='border:1px solid #aaa;background:none;' id='point_end' />到这里<input type='button' onclick='bus_end();' value='公交' /></div>");  // 创建信息窗口对象    map.addOverlay(marker);        setTimeout(function(){map.centerAndZoom(point.point,14);marker.openInfoWindow(infoWindow);},500);}

//查询完毕的回调函数var searchComplete = function (results){if (local.getStatus() != BMAP_STATUS_SUCCESS){return ;    }var point = results.getPoi(0);        thisPoint = point;    addMarker(point);}

var map = new BMap.Map("container");    //创建地图容器map.centerAndZoom(new BMap.Point(116.404, 39.915), 10); //初始化地图map.enableScrollWheelZoom();  //启用滚轮缩放var local = new BMap.LocalSearch(map,{onSearchComplete: searchComplete});   //构造一个查询var transit = new BMap.TransitRoute(map, {renderOptions: {map: map, panel : "results"}});

//定义三个不同的查询function poi_search(){    map.clearOverlays();var POI = document.getElementById("myPOI").value;    local.search(POI);}function bus_start(){    transit.search(thisPoint , document.getElementById("point_start").value);}function bus_end(){    transit.search(document.getElementById("point_end").value , thisPoint);}</script>

  

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

四、公交时间与距离

百度地图API的官网上有示例,请点击这里

js大概是这样写的,如下:

 output += plan.getDuration(true) + "\n";             //获取时间 output += plan.getDistance(true) + "\n";             //获取距离

  

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

五、公交方案

有三种可选,较便捷、可换乘、少步行。请查看示例

类参考如下:

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

六、公交线路与公交站信息

查询例如,“104路电车”“975路”等公交车的信息,示例请看这里

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

七、不乘地铁的公交方案(新增)

做地铁是不是很贵啊?哈哈,查看示例,返回所有不乘地铁的公交方案。

时间: 2024-11-05 06:22:33

【百度地图API】如何制作“从这里出发”“到这里去”——公交篇的相关文章

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

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

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

原文:[百度地图API]--如何用label制作简易的房产标签 摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义.有没有快速简易创建房产标签的方法呢? 答案当然是有的啦~ 我们可以利用label嘛! ------------------------------------------------------------------------------- 一.创建地图 这是老生常谈的三句话,初始化地图的js. var map =

【百度地图API】如何制作一张魔兽地图!!——CS地图也可以,哈哈哈

原文:[百度地图API]如何制作一张魔兽地图!!--CS地图也可以,哈哈哈 摘要: 你玩魔兽不?你知道如何做一张魔兽地图不?! 快来看此文吧! --------------------------------------------- 一.制作魔兽地图的准备工作 其实,你只需要准备一些地图的瓦片图,就可以了. 用切片工具,把一张完整的图片(最好大一些,清楚一些),切成小片.(下周我贴这个工具的下载链接出来.留个悬念,哈哈.) 正式公布切图工具链接: http://openapi.baidu.co

如何利用【百度地图API】,制作房产酒店地图?(中)——使用右侧列表打开信息窗口

原文:如何利用[百度地图API],制作房产酒店地图?(中)--使用右侧列表打开信息窗口 摘要: 很多房产网.旅游酒店网上,都有一个列表,鼠标经过列表上的数据时,地图上就会打开相应的信息窗口. 如何实现这一功能呢? 快来学习吧. ----------------------------------------------------------------------------------------------- 一.制作列表 接着上一篇文章来讲,我们已经拥有了一张能显示自定义标注,和信息窗口

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

原文:[百度地图API]如何自定义地图图层?实例:制作麻点图(自定义图层+热区) 摘要:自定义地图图层的用途十分广泛.常见的应用,比如制作魔兽地图和清华校园地图(使用切图工具即可轻松实现).今天我们来学习,当地图上有大量标注,比如600万个的时候,我们如何用"麻点图"来实现标注的展示. -----------------------------------------------------------------------------------------------------

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

原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内的标注. -------------------------------------------------------------------------------------------------------------- 成品图:     工具描述: 移动地图时(或改变地图级别时),只显示

【百度地图API】如何制作可拖拽的沿道路测距

原文:[百度地图API]如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后海的距离,怎么办呢? 显然"沿道路测距"就显得尤为重要了.那么如果制作"可拖拽"的沿道路测距呢?我们一起来看一看. -----------------------------------------------------------------------------

【百度地图API】如何制作孪生姐妹地图?

原文:[百度地图API]如何制作孪生姐妹地图? 任务描述: 我想要两张一模一样的地图!我想要双子地图!我想要孪生姐妹地图! 好好好,统统满足大家! 在这里我不需要使用百度地图API提供的地图缩略图控件,而是自己动手做一对双胞胎地图!   如何实现? 创建两张地图,map1和map2,他俩的中心点和地图级别(放大倍数)不同. 当鼠标移动map1的中心点时,map2的中心点会随着一起变化,最终和map1的中心点一致. 同理,可以实现用鼠标滚轮放大缩小地图.   操作试试: 移动左边的地图,右边的地图

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

原文:[百度地图API]如何制作多途经点的线路导航--驾车篇 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ------------------------------------------------------------------------------------------------------------------------ 一.创建地图 首先要告诉大家的是,API1.2版本取消密钥,取消服务