原文:【百度地图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,);

  

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

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

让标注可拖拽的方法是:

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

代码如下:

//创建两个可以拖动的标注
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();
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;},""); //打印总路程
}});

//测距按钮
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

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

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

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

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

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

  3. 百度地图API示例之设置级别setZoom与禁止拖拽disableDragging

    百度地图API示例之设置级别setZoom与禁止拖拽disableDragging 设置级别 <html> <head> <meta http-equiv="C ...

  4. 百度地图API 拖拽或点击地图位置获取坐标

    function setPlace(map,myValue,callback){ function getAddress(){ var pp = local.getResults().getPoi(0 ...

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

    原文:[百度地图API]如何制作班级地理通讯录?LBS通讯录 摘要:班级通讯录必备的功能,比如人员列表,人员地理位置标注,展示复杂信息窗口,公交和驾车等.一般班级人员都不会超过300个,因为可以高效地 ...

  6. 借助百度地图API制作企业百度地图

    做网站需要插入地图,可以借助百度地图API,具体步骤如下: 1.打开百度地图API的网址:   http://api.map.baidu.com/lbsapi/creatmap/ 2.设置中心点 3. ...

  7. 【百度地图API】如何利用PhoneGap制作地图APP

    原文:[百度地图API]如何利用PhoneGap制作地图APP 摘要:百度地图API是一套由javascript编写的地图程序接口,按说它应该运行在浏览器上.现在,只要利用PhoneGap,我们就能开 ...

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

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

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

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

随机推荐

  1. Spark 1.0.0版本发布

    前言 如今Spark终于迈出了里程碑一步,1.0.0标记的版本号出版物Spark1.0时代.1.0.0版本号不仅增加了非常多新特性.而且提供了更好的API支持.Spark SQL作为一个新的组件增加. ...

  2. Linux下一个Nginx安装步骤

    一个.下载pcre 官网下载:http://www.pcre.org/ # wget http://sourceforge.net/projects/pcre/files/pcre/8.35/pcre ...

  3. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...

  4. javascript 比量str今天的日期是,参数diff

    function isToday(str) { var d = new Date(str.replace(/-/g, "/")); var todaysDate = new Dat ...

  5. JGroups 入门实践(转)

    前言 JGroups是一个开源的纯java编写的可靠的群组通讯工具.其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展.其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈. JGroup ...

  6. mybatis以序列周期,同样处理的这个问题的价值

    原因猜测缓存,由于代码是肯定没问题,但无论怎么查都一样值 <select id="querySeq" resultType="java.lang.Long" ...

  7. 华丽的网上突出代码组件CodeMirror

    农民之间的代码懒惰性质:愚公绝不能过夜.一劳永逸永远不知疲倦!这是一个代码示例 动态配置,在不同的场景抽象为常见的配置逻辑加,这使得有可能"为一个全球性的代码.代码做搬运工",更糟 ...

  8. 解决android模块化升级方法

    有关本机android升级版本必须是全apk更新安装,我们无法实现的一些模块化升级的解决思路: 本地人+web混合动力APP~ 查询详情,我们必须实现模块化升级,无论使用方法,我这样做.首页写在每个功 ...

  9. 用命令行在github新建一个项目

    Github Repository API中说明了可以通过发送一个请求来认证,之后就能通过命令行自动新建远程仓库了. 认证 curl -u 'username' https://api.github. ...

  10. Linux内核分析(七)----并发与竞态

    原文:Linux内核分析(七)----并发与竞态 Linux内核分析(七) 这两天家里的事好多,我们今天继续接着上一次的内容学习,上次我们完善了字符设备控制方法,并深入分析了系统调用的实质,今天我们主 ...