之前做了一个小项目用到了类似测距的功能
效果图:
这里分享出来希望可以帮助大家首先引入svg.js jQuery.js
MAP:
--index.html
|
--stone.gif
|
--js
--jquery.js
|
--svg.js
css:
<style type="text/css">
#maps{
width:500px;
height:300px;
background:#f9f9f9;
border:1px solid #c6c6c6;
margin:10px auto;
position:relative;
}
div.point{
position:absolute;
width:12px;
height:12px;
background:url(stone.gif) no-repeat;
}
div.svgCotainer{
position:absolute;
}
#mapPloy{
position:absolute;
}
#info{
position:absolute;
top:10px;
right:10px;
width:100px;
height:25px;
background:#ecf6fc;
border:1px solid #8ad0fd;
font-size:14px;
font-family:Arial, Helvetica, sans-serif;
color:#51a961;
text-align:center;
line-height:25px;
}
</style>
js:
<script type="text/javascript">
$(document).ready(function(){
$('#maps').click(function(e){
var left=e.pageX;
var top=e.pageY;
var o={
left:left,
top:top
}
//Ploy.addPoint(top,left);
//Ploy.makeSvgContainer();
var lengths=Ploy.makePoly('#maps',o);
lengths=(Math.round(lengths*100))/100;
$('#info').html(lengths+'Km');
})
});
//return array's max
Array.prototype.max = function(){
return Math.max.apply({}, this);
}
//return array's min
Array.prototype.min = function(){
return Math.min.apply({}, this);
}
var options={
cssClickClass:'point',//点击时生成点的类
svgCtnCls:'svgContainer',//svg容器的类
wapper:'#maps',
scale:'1'
};
var Ploy={
getData:function(){
var arrayTop=[];
var arrayLeft=[];
var el=$('div.'+options.cssClickClass);
$.each(el,function(i,n){
var pointTop=$(n).position().top;
var pointLeft=$(n).position().left;
arrayTop.push(pointTop);
arrayLeft.push(pointLeft);
});
var minTop=arrayTop.min();
var maxTop=arrayTop.max();
var minLeft=arrayLeft.min();
var maxLeft=arrayLeft.max();
var svgWidth=maxLeft-minLeft+el.width();
var svgHeight=maxTop-minTop+el.height();
return {
w:svgWidth,
h:svgHeight,
minTop:minTop,
minLeft:minLeft,
elWidth:el.width(),
elHeight:el.height()
}
},
makeSvgContainer:function(){
var s=this;
var datas=s.getData();
var div=$('#mapPloy').is('div');
if(!div){
var svgContainer=$('<div/>')
.attr('id','mapPloy')
.addClass(options.svgCtnCls)
.css({
width:datas.w,
height:datas.h,
top:datas.minTop+datas.elHeight/2,
left:datas.minLeft+datas.elWidth/2
}).prependTo($(options.wapper));
}else{
$('#mapPloy').css({
width:datas.w,
height:datas.h,
top:datas.minTop+datas.elHeight/2,
left:datas.minLeft+datas.elWidth/2
})
}
},
//添加点在地图区域中
addPoint:function(top,left){
var wapper=$(options.wapper);
var t=wapper.offset().top;
var l=wapper.offset().left;
var pt=top-t;
var pl=left-l;
var point=$('<div/>').addClass(options.cssClickClass)
.css({
top:pt,
left:pl,
poisiton:'absolute'
})
.appendTo(wapper);
},
makePoly:function(el,o){
var s=this;
s.addPoint(o.top,o.left);
s.makeSvgContainer();
//清空svg,重新画图
$(el).find('div.'+options.svgCtnCls).empty();
//遍历已经有的点,做出路线
var points=$('div.'+options.cssClickClass);
var datas=s.getData();
//生成路径
var path=""
$.each(points,function(i,n){
if(i==0){
path+="M";
}else{
path+="L";
}
var leftInSvg=$(n).position().left-datas.minLeft;
var TopInSvg=$(n).position().top-datas.minTop;
path += leftInSvg;
path += ",";
path += TopInSvg;
path += " ";
});
var ploy = Raphael('mapPloy', datas.w, datas.h);
var pathslength=ploy.path(path).attr({
stroke:'#1791fc',
'stroke-width':3,
opacity:.7,
fill:"none"});
//计算距离
return pathslength.getTotalLength()*options.scale;
}
}
</script>
HTML:index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/svg.js"></script>
</head>
<body>
<div id="maps">
<div id="info">
</div>
</div>
</body>
</html>
图片:stone.gif
- MAP.rar (65.6 KB)
- 描述: 完整的测距例子
- 下载次数: 12
- 大小: 11.2 KB
- 大小: 1.3 KB
分享到:
相关推荐
在实际应用中,开发者可以通过引入DistanceTool-min.js,并调用百度地图API的相关方法,轻松地在自己的网站或应用中集成测距功能。例如,可以设置起点和终点的图标样式,调整线条颜色和宽度,甚至添加自定义的测量...
本资料包提供了关于JSN-SR04T超声波测距模块的详细信息,包括原程序代码和单双头使用说明,帮助开发者更好地理解和使用该传感器。 **JSN-SR04T超声波测距原理** JSN-SR04T超声波传感器工作基于回声测距原理,通过...
在“leaflet 测距侧面.rar”这个压缩包中,我们可能找到了实现地图测距和测面功能的相关资源。测距功能允许用户测量地图上两点之间的直线距离,而测面功能则可以计算多边形区域的面积。这些功能对于地理信息系统...
ArcGIS JavaScript API(简称ArcGIS JS API)是Esri公司提供的一种强大的Web GIS开发工具,允许开发者创建交互式的地图应用程序。本主题将深入探讨如何利用ArcGIS JS API实现两种不同的距离和面积测量方法。 1. **...
本文实例为大家分享了openlayers实现地图测距测面的...[removed]./js/ol.js type=text/javascript>[removed] 这里地图为公共组件,方法写在公共组件的init方法里,kpst._this为地图对象 调用 //测距/面 var draw = me.
超声波测距技术因其简单易实现、成本低廉的特点,在自动化控制、机器人导航、工业检测等领域有着广泛的应用。通过对超声波测距模块的合理连接、编程控制以及适当的标定处理,可以有效提高测距的准确性和稳定性,满足...
【自定义谷歌地图测距工具】是一款实用的在线应用程序,它允许用户通过鼠标操作轻松地在谷歌地图上测量距离。这款工具充分利用了谷歌地图API的功能,使得非专业人员也能便捷地进行地理空间的测量工作。 首先,我们...
"JS Canvas实现2D之点线篇"这篇博客主要探讨了如何利用Canvas API来绘制点和线,并进行相关的计算。下面我们将深入探讨这个主题。 首先,Canvas API的核心是`<canvas>`元素,这是一个HTML元素,通过JavaScript与之...
在JavaScript和百度地图API的结合应用中,有时候我们需要实现一些高级功能,比如测量地图上的区域面积。虽然百度地图API提供了丰富的功能,但直接用于测量面积的API却并未包含在内。在这种情况下,开发者需要通过...
系统基于微信小程序平台,前端使用wxml语言编写,后端使用Javascript,借助微信平台提供的微信开发者工具进行开发调试,通过蓝牙信号强度测距和人脸识别比对实现了一套课堂考勤系统。 本系统以较高准确率实现了快捷...
微信小程序iBeacon测距技术是利用苹果公司推出的低功耗蓝牙技术——iBeacon,通过蓝牙设备发射信号,移动设备接收信号实现近场通信。微信小程序自2017年起支持iBeacon,其中“摇一摇附近”功能就是基于此技术。本文...
【项目介绍】:基于微信小程序平台,前端使用wxml语言编写,后端使用Javascript,借助微信平台提供的微信开发者工具进行开发调试,通过蓝牙信号强度测距和人脸识别比对实现了一套课堂考勤系统。 本系统以较高准确率...
在"JSN-SR04T-2.0超声波测距资料"中,您将找到关于如何连接和编程JSN-SR04T-2.0的详细信息。通常,我们需要设置一个GPIO引脚为高电平来触发超声波发射,然后切换为低电平等待回波。一旦接收到回波,相应的GPIO会再次...
本文将深入探讨如何使用ArcGIS JavaScript API 进行测量,主要涉及测距和测面工具的实现。 首先,我们需要理解ArcGIS JavaScript API的核心概念。它基于RESTful服务架构,提供了多种图层类型(如...
开发者通常会利用Google Maps JavaScript API中的路径计算服务来实现这一功能,结合前端界面设计,使用户能直观地看到测量结果。 "地理学习小游戏"则可能是一种寓教于乐的教育应用,通过游戏的形式教授地理知识。...
在本教程中,我们将深入探讨如何使用Leaflet和Turf.js这两个JavaScript库来计算离给定点最近的线上的点坐标。Leaflet是一个流行的开源库,用于创建交互式地图,而Turf.js则是一个地理空间分析库,提供了丰富的地理...
3. **控件集成**:提供了如缩放、平移、旋转、测距、定位等常用地图操作的控件,可以通过简单的配置启用或自定义。 4. **事件处理**:OpenLayers 提供了丰富的事件处理机制,允许开发者监听并响应用户的地图操作,...