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

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

摘要:

地图测距,大家都会,不就map.getDistance麼。可是,这只能测任意两点的直线距离,用途不够实际啊。比如,我想测试北京天安门到北京后海的距离,怎么办呢?

显然“沿道路测距”就显得尤为重要了。那么如果制作“可拖拽”的沿道路测距呢?我们一起来看一看。

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

一、创建地图

只需要三步,即可创建一张地图。示例:http://dev.baidu.com/wiki/static/map/API/examples/index.html 

//初始化地图var map = new BMap.Map("container");var point = new BMap.Point(116.331398,39.897445);map.centerAndZoom(point,12);

  

二、创建两个可拖拽的标注

先创建点,再把标注创建在该点上。最后添加标注在地图上。

让标注可拖拽的方法是:

然后确定这两个标注可以拖拽。

代码如下:

//创建两个可以拖动的标注var p1 = new BMap.Point(116.388398,39.897445);var p2 = new BMap.Point(116.331398,39.836445);var m1 = new BMap.Marker(p1);var m2 = new BMap.Marker(p2);map.addOverlay(m1);map.addOverlay(m2);m1.enableDragging();    //标注可拖拽的设置m2.enableDragging();

  

三、沿道路测距

创建驾车导航,在回调函数里设置距离的输出。

写个函数用来打开测距功能。

注意:起点和终点,要从改变位置后的marker里取。类参考如下:

代码如下:

//驾车导航用来计算沿道路的距离var searchComplete = function (results){if (transit.getStatus() != BMAP_STATUS_SUCCESS){return ;    }  var plan = results.getPlan(0);        output = "<b style='color:red;'>" + plan.getDistance(true) +"</b>";             //获取距离}var transit = new BMap.DrivingRoute(map, {renderOptions: {map: map},    onSearchComplete: searchComplete,    onPolylinesSet: function(){                setTimeout(function(){document.getElementById("myDistance").innerHTML = output;},"100");    //打印总路程    }});

//测距按钮function myFigure(){    transit.search(m1.getPosition(), m2.getPosition());         //两个红色标注之间的沿道路测距}

  

四、清除结果

为了下一次的测距,我们需要清除这一次的导航结果,和测距结果。

代码如下:

//重新测距的按钮function myClear(){    transit.clearResults();         //清除导航结果    document.getElementById("myDistance").innerHTML = "";   //清除总路程的文字}

  

五、网页结构

需要写两个安妮,一个用来计算距离,另一个用来清除数据。

还有一个展示测距结果的容器。

<input type="button" value="重新开始" onclick="myClear();" /><input type="button" value="计算距离" onclick="myFigure();" /><p>总路程是:<span id="myDistance"></span></p><div style="width:520px;height:340px;border:1px solid gray" id="container"></div><p>使用说明:</p><ol><li>红色标注可拖拽</li><li>点击“计算距离”按钮,开始测距。结果用红色文字标出</li><li>点击“重新开始”按钮,清除测距结果</li></ol>

  

六、全部源代码

<!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><input type="button" value="重新开始" onclick="myClear();" /><input type="button" value="计算距离" onclick="myFigure();" /><p>总路程是:<span id="myDistance"></span></p><div style="width:520px;height:340px;border:1px solid gray" id="container"></div><p>使用说明:</p><ol><li>红色标注可拖拽</li><li>点击“计算距离”按钮,开始测距。结果用红色文字标出</li><li>点击“重新开始”按钮,清除测距结果</li></ol></body></html><script type="text/javascript">//初始化地图var map = new BMap.Map("container");var point = new BMap.Point(116.331398,39.897445);map.centerAndZoom(point,12);

//创建两个可以拖动的标注var p1 = new BMap.Point(116.388398,39.897445);var p2 = new BMap.Point(116.331398,39.836445);var m1 = new BMap.Marker(p1);var m2 = new BMap.Marker(p2);map.addOverlay(m1);map.addOverlay(m2);m1.enableDragging();    //标注可拖拽的设置m2.enableDragging();

//驾车导航用来计算沿道路的距离var searchComplete = function (results){if (transit.getStatus() != BMAP_STATUS_SUCCESS){return ;    }  var plan = results.getPlan(0);        output = "<b style='color:red;'>" + plan.getDistance(true) +"</b>";             //获取距离}var transit = new BMap.DrivingRoute(map, {renderOptions: {map: map},    onSearchComplete: searchComplete,    onPolylinesSet: function(){                setTimeout(function(){document.getElementById("myDistance").innerHTML = output;},"100");    //打印总路程    }});

//测距按钮function myFigure(){    transit.search(m1.getPosition(), m2.getPosition());         //两个红色标注之间的沿道路测距}

//重新测距的按钮function myClear(){    transit.clearResults();         //清除导航结果    document.getElementById("myDistance").innerHTML = "";   //清除总路程的文字}</script>

  

七、测两点的直线距离

百度地图API的官网上,有一个lib,是测试直线距离的。所以,这里就不多说了。

链接:http://dev.baidu.com/wiki/map/index.php?title=lib/DistanceTool

时间: 2024-09-13 06:12:59

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

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

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

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

原文:[百度地图API]如何制作班级地理通讯录?LBS通讯录 摘要:班级通讯录必备的功能,比如人员列表,人员地理位置标注,展示复杂信息窗口,公交和驾车等.一般班级人员都不会超过300个,因为可以高效地把全部人员的地理位置都显示在地图上. --------------------------------------------------------------------------- 预备知识1.为啥marker数量不能超过300个? 答:由于浏览器能支持的dom元素有限,所以建议不超过该数量

【百度地图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]如何制作"从这里出发""到这里去"--公交篇 摘要: 百度地图首页上的"从这里出发""到这里去",一直是开发者们很热衷的一个功能.那么,怎样结合百度的数据库,来制作这个功能呢?让我们一起来学习一下. -------------------------------------------------------------------------------------------------------

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

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