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

简介: 原文:【百度地图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路”等公交车的信息,示例请看这里

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

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

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

目录
相关文章
|
1月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
104 0
|
1月前
|
自然语言处理 API 语音技术
Python加百度语音API实现文字转语音功能
Python加百度语音API实现文字转语音功能
52 0
|
3月前
|
JSON JavaScript 定位技术
Vue中使用echarts@4.x中国地图及AMap相关API的使用
Vue中使用echarts@4.x中国地图及AMap相关API的使用
161 0
Vue中使用echarts@4.x中国地图及AMap相关API的使用
|
4月前
|
SQL 存储 DataWorks
DataWorks中API、desc、数据地图,这3个怎么对起来?
DataWorks中API、desc、数据地图,这3个怎么对起来?
40 0
|
4月前
|
定位技术 API
百度地图API的使用教程以及案例(二)
百度地图API的使用教程以及案例
|
4月前
|
定位技术 API 容器
百度地图API的使用教程以及案例(一)
百度地图API的使用教程以及案例
|
5月前
|
定位技术 API 开发者
百度地图API的使用示例
百度地图API的使用示例
35 0
|
17天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
24天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
1月前
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。