`
海上明月共潮生--风铃
  • 浏览: 59851 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

js简单地测距实现

阅读更多
之前做了一个小项目用到了类似测距的功能
效果图:




这里分享出来希望可以帮助大家首先引入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


  • svg.rar (20.5 KB)
  • 下载次数: 16
  • MAP.rar (65.6 KB)
  • 描述: 完整的测距例子
  • 下载次数: 12
  • 大小: 11.2 KB
  • 大小: 1.3 KB
分享到:
评论

相关推荐

    百度地图测距工具:DistanceTool-min.js

    在实际应用中,开发者可以通过引入DistanceTool-min.js,并调用百度地图API的相关方法,轻松地在自己的网站或应用中集成测距功能。例如,可以设置起点和终点的图标样式,调整线条颜色和宽度,甚至添加自定义的测量...

    JSN-SR04T超声波测距资料

    本资料包提供了关于JSN-SR04T超声波测距模块的详细信息,包括原程序代码和单双头使用说明,帮助开发者更好地理解和使用该传感器。 **JSN-SR04T超声波测距原理** JSN-SR04T超声波传感器工作基于回声测距原理,通过...

    leaflet 测距侧面.rar

    在“leaflet 测距侧面.rar”这个压缩包中,我们可能找到了实现地图测距和测面功能的相关资源。测距功能允许用户测量地图上两点之间的直线距离,而测面功能则可以计算多边形区域的面积。这些功能对于地理信息系统...

    基于ArcGIS JS API实现的两种距离和面积测量方式

    ArcGIS JavaScript API(简称ArcGIS JS API)是Esri公司提供的一种强大的Web GIS开发工具,允许开发者创建交互式的地图应用程序。本主题将深入探讨如何利用ArcGIS JS API实现两种不同的距离和面积测量方法。 1. **...

    openlayers实现地图测距测面

    本文实例为大家分享了openlayers实现地图测距测面的...[removed]./js/ol.js type=text/javascript&gt;[removed] 这里地图为公共组件,方法写在公共组件的init方法里,kpst._this为地图对象 调用 //测距/面 var draw = me.

    超声波测距原理及调试程序

    超声波测距技术因其简单易实现、成本低廉的特点,在自动化控制、机器人导航、工业检测等领域有着广泛的应用。通过对超声波测距模块的合理连接、编程控制以及适当的标定处理,可以有效提高测距的准确性和稳定性,满足...

    自定义谷歌地图测距工具(利用鼠标左右键进行测距)

    【自定义谷歌地图测距工具】是一款实用的在线应用程序,它允许用户通过鼠标操作轻松地在谷歌地图上测量距离。这款工具充分利用了谷歌地图API的功能,使得非专业人员也能便捷地进行地理空间的测量工作。 首先,我们...

    JS Canvas实现2D之点线篇

    "JS Canvas实现2D之点线篇"这篇博客主要探讨了如何利用Canvas API来绘制点和线,并进行相关的计算。下面我们将深入探讨这个主题。 首先,Canvas API的核心是`&lt;canvas&gt;`元素,这是一个HTML元素,通过JavaScript与之...

    js+百度地图api测量面积

    在JavaScript和百度地图API的结合应用中,有时候我们需要实现一些高级功能,比如测量地图上的区域面积。虽然百度地图API提供了丰富的功能,但直接用于测量面积的API却并未包含在内。在这种情况下,开发者需要通过...

    Java课程大作业-基于JavaScript实现微信小程序课堂考勤系统源码(附项目说明).7z

    系统基于微信小程序平台,前端使用wxml语言编写,后端使用Javascript,借助微信平台提供的微信开发者工具进行开发调试,通过蓝牙信号强度测距和人脸识别比对实现了一套课堂考勤系统。 本系统以较高准确率实现了快捷...

    微信小程序iBeacon测距及稳定程序的实现解析

    微信小程序iBeacon测距技术是利用苹果公司推出的低功耗蓝牙技术——iBeacon,通过蓝牙设备发射信号,移动设备接收信号实现近场通信。微信小程序自2017年起支持iBeacon,其中“摇一摇附近”功能就是基于此技术。本文...

    基于原生微信小程序实现的课堂考勤系统的设计与实现

    【项目介绍】:基于微信小程序平台,前端使用wxml语言编写,后端使用Javascript,借助微信平台提供的微信开发者工具进行开发调试,通过蓝牙信号强度测距和人脸识别比对实现了一套课堂考勤系统。 本系统以较高准确率...

    JSN-SR04T-2.0(超声波材料)_SR04T_thecode_jsn-sr04t_

    在"JSN-SR04T-2.0超声波测距资料"中,您将找到关于如何连接和编程JSN-SR04T-2.0的详细信息。通常,我们需要设置一个GPIO引脚为高电平来触发超声波发射,然后切换为低电平等待回波。一旦接收到回波,相应的GPIO会再次...

    arcgis js 测量代码

    本文将深入探讨如何使用ArcGIS JavaScript API 进行测量,主要涉及测距和测面工具的实现。 首先,我们需要理解ArcGIS JavaScript API的核心概念。它基于RESTful服务架构,提供了多种图层类型(如...

    网页 google地图 插件

    开发者通常会利用Google Maps JavaScript API中的路径计算服务来实现这一功能,结合前端界面设计,使用户能直观地看到测量结果。 "地理学习小游戏"则可能是一种寓教于乐的教育应用,通过游戏的形式教授地理知识。...

    35.(leaflet篇)leaflet+turf计算离点距离最近线上的点坐标.zip

    在本教程中,我们将深入探讨如何使用Leaflet和Turf.js这两个JavaScript库来计算离给定点最近的线上的点坐标。Leaflet是一个流行的开源库,用于创建交互式地图,而Turf.js则是一个地理空间分析库,提供了丰富的地理...

    OpenLayers-2.13.1API+JS

    3. **控件集成**:提供了如缩放、平移、旋转、测距、定位等常用地图操作的控件,可以通过简单的配置启用或自定义。 4. **事件处理**:OpenLayers 提供了丰富的事件处理机制,允许开发者监听并响应用户的地图操作,...

Global site tag (gtag.js) - Google Analytics