popup随鼠标移动,OpenLayers.Control.Measure测量距离

之前需要做一个测量距离的工具,于是查了OpenLayers.Control.Measure,量算过程通过调用事件处理器 Handler 实现在 vector 图层上的距离或面积的量算。

这里做的是距离量算,点击之后会弹出popup(OpenLayers.Popup),效果是点击之后出现增加popup计算出之前几个点之间的距离,并删掉前面的popup(并没有做出向百度那样随鼠标移动变化距离的效果)。

调用方法MeasurePath();就可以查看效果啦

 1 var measurePopup = null;
 2 var messagelast = null;
 3
 4 //距离测量
 5 var measureControl = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {
 6     persist: true,
 7     eventListeners: {
 8         ‘measure‘: measureDistance,
 9         ‘measurepartial‘: measurepartial
10     }
11 });
12
13
14 function MeasurePath() {
15     measureControl.updateHandler(OpenLayers.Handler.Path, { persist: true });
16     map.addControl(measureControl);
17     measureControl.activate();
18 }
19 function measureDistance(event) {
20     messagelast = parseFloat(event.measure).toFixed(2) + "" + event.units;
21     if (event.order > 1) {
22         messagelast += "2";
23     }
24     //获取鼠标点击处的经纬度
25     var points = event.geometry.components;
26     var point = points[points.length - 1];
27     if (measurePopup != null)
28         map.removePopup(measurePopup);
29     measurePopup = new OpenLayers.Popup("chicken",
30     //弹出框位置
31                    new OpenLayers.LonLat(point.x, point.y),
32     //new OpenLayers.LonLat(position.x, position.y),
33                    null,
34                    messagelast,
35                    true,
36                    closeBoxCallback
37                    );
38     measurePopup.autoSize = true;
39     measurePopup.backgroundColor = "#06a09f";
40     measurePopup.opacity = 0.8;
41     map.addPopup(measurePopup);
42 }
43
44 function measurepartial(event) {
45     var message = parseFloat(event.measure).toFixed(2) + "" + event.units;
46     var points = event.geometry.components;
47     var point = points[points.length - 1];
48     if (measurePopup != null)
49         map.removePopup(measurePopup);
50     measurePopup = new OpenLayers.Popup("chicken",
51     //弹出框位置
52                    new OpenLayers.LonLat(point.x, point.y),
53                    null,
54                    message,
55                    true,
56                    closeBoxCallback
57                    );
58     measurePopup.autoSize = true;
59     measurePopup.backgroundColor = "#06a09f";
60     measurePopup.opacity = 0.8;
61     if (points.length > 2)
62         map.addPopup(measurePopup);
63 }
64
65 //function changeHandler(checked){
66 //        measureClick();
67 //    }
68
69 function closeBoxCallback() {
70     map.removePopup(measurePopup);
71     measureControl.deactivate();
72     map.removeControl(measureControl);
73     messagelast = null;
74 }  

popup有点丑,哈哈。双击结束一次测量,点击popup的关闭按钮(右上角的红叉叉),结束测量事件。

时间: 2024-10-27 11:35:05

popup随鼠标移动,OpenLayers.Control.Measure测量距离的相关文章

OpenLayers测量距离和面积

<!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-s

React Native学习-measure测量view的宽高值

measure()测量是根据view标签中的ref属性,使用方法如下: measureWatermarkerImage(){ this.refs.watermarkerImage.measure((a, b, width, height, px, py) => this.setState({watermarkerImageWidth: width}) );} with:宽:height:高:px:x轴方向距离左边多少像素:py:y轴方向距离上边多少像素: 根据项目需要,如果需要在页面加载完成后进

关于wpf中popup跟随鼠标移动显示

最近在做一个画图工具,里面有一个功能是需要实现,当鼠标移动的时候在,鼠标的旁边显示坐标信息. 第一反应是想到了tooltip,但是tooltip有许多的限制,查询资料的过程中看到了popup,popup比tooltip更加灵活,下面讲讲tooltip跟popup的区别: 1.tooltip会自动显示,自动隐藏,而popup则需要设置IsOpen属性,并且在Popup.StaysOen属性为true时,Popup控件会一直显示,直到显式地将IsOpen属性设置为False.当Popup.Stays

长谈:关于 View Measure 测量机制,让我一次把话说完

<倚天屠龙记中>有这么一处:张三丰示范自创的太极剑演示给张无忌看,然后问他记住招式没有.张无忌说记住了一半.张三丰又慢吞吞使了一遍,问他记住多少,张无忌说只记得几招了.张三丰最后又示范了一遍,张无忌想了想说,这次全忘光了.张三丰很满意,于是放心让张无忌与八臂神剑去比试. 首先声明,这一篇篇幅很长很长很长的文章.目的就是为了把 Android 中关于 View 测量的机制一次性说清楚.算是自己对自己较真.写的时候花了好几天,几次想放弃,想放弃的原因不是我自己没有弄清楚,而是觉得自己叙事脉络已经紊

(转)Arcgis for Js之GeometryService实现测量距离和面积

http://blog.csdn.net/gisshixisheng/article/details/40540601 距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离.先看看实现后的效果:                                  距离                                                                                         面积

Arcgis for Js之GeometryService实现测量距离和面积

距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离.先看看实现后的效果:                                  距离                                                                                         面积 首先,进行配置: //identify proxy page to use if the toJson payload

计算openlayers两点之间的距离

distanceTo: function(point) { var distance = 0.0; if ((this.x != null) && (this.y != null) && (point != null) && (point.x != null) && (point.y != null)) { var dx2 = Math.pow(this.x - point.x, 2); var dy2 = Math.pow(this.y -

Geoserver基本使用、WMS服务发布与OpenLayers测试

1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Geoserver 环境:jdk 1.7,geoserver-2.5 配置:修改geoserver-2.5/ect/jetty.xml 的端口为8089,避免端口冲突. <Call name="addConnector"> <Arg> <New class=&qu

OpenLayers中长度测量和面积测量等功能的实现

功能要求如下:要求能在给定地图上测量长度和面积.此处实现主要是调用Openlayers接口实现. 一.界面设置 在HTML界面中设置好测量按钮的布局,代码如下图所示: <divclass="measureoptions"> <input type="button"id="measureButton" onClick="measureClick()" checked="false" valu