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

简介:

功能要求如下:要求能在给定地图上测量长度和面积。此处实现主要是调用Openlayers接口实现。

一、界面设置

在HTML界面中设置好测量按钮的布局,代码如下图所示:

<divclass="measureoptions">
    <input type="button"id="measureButton" onClick="measureClick()"  checked="false" value="测量"></input>
         <input type="button"id="calcelMeasureButton" onClick="cancelClick()"  checked="false" value="取消"></input>
    <div class="section">
        <strong>测量</strong><br/>
        长度: <inputid="path" type="radio"onClick="changeHandler(this)" checked name="layer"/>
        面积: <inputid="polygon" type="radio"onClick="changeHandler(this)" name="layer"/>       
    </div>
    <div class="section">
        <strong>选择</strong><br/>
        球面: <inputid="geodesic" type="checkbox"onClick="changeGeodesic(this)" name="layer"/>
        实时: <inputid="immediate" type="checkbox"onClick="changeImmediate(this)" name="layer"/>
    </div>
    <div class="section">
        <strong>测量结果:</strong><span id="value"></span>
    </div>
</div>
<divid='map_element' style='width:1400px;height:500px;'>
         </div>


二、地图加载

地图加载主要在函数init()中实现,代码如下:

functioninit()
                   {
                            map = newOpenLayers.Map('map_element');                      
                                    
                            var wmsLayer= newOpenLayers.Layer.WMS(
                         "global",
                        "http://192.168.1.50:8080/geoserver/karl/wms",
                         {layers: "global"}
                     );
                                    
 
                            map.addLayer(wmsLayer);
                           
                           
                           
                            if(!map.getCenter())
                            {
                                     map.zoomToMaxExtent();
                                    
                            }
                            map.zoomToMaxExtent();
                           
                   }


三、测量相关函数实现

首先定义全局变量var measureControl

varmeasureControl = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {

                            persist: true,

                            eventListeners: {

                                     'measure':measure,

                                     'measurepartial':measurepartial

                            }

                   });

测量函数:

functionmeasureClick() {
        //var path =document.getElementById('path').get('checked');
                   var path =document.getElementById("path").checked;
        var polygon =document.getElementById('polygon').checked;
        //var regular =document.getElementById('regular').checked;
       
       if(document.getElementById("measureButton").checked){
            if(path) {
               measureControl.updateHandler(OpenLayers.Handler.Path, {persist: true});
            } else if(polygon) {
               measureControl.updateHandler(OpenLayers.Handler.Polygon, {persist:true});
            } else if(regular) {
               measureControl.updateHandler(OpenLayers.Handler.RegularPolygon,{persist: true});
            }
            map.addControl(measureControl);
            measureControl.activate();
        } else {
            measureControl.deactivate();
            map.removeControl(measureControl);
        }
       
       document.getElementById('value').innerHTML = "";
}


取消测量函数:

functioncancelClick()
         {
                   measureControl.deactivate();
        map.removeControl(measureControl);
}


相关事件:

functionmeasure(event) {
        var message = event.measure + "" + event.units;
        if(event.order>1) {
            message += "2";
        }
       document.getElementById('value').innerHTML = message;
    }
   
    function measurepartial(event) {
        var message = event.measure + "" + event.units;
       document.getElementById('value').innerHTML = message;
    }
   
    function changeHandler(checked){
        measureClick();
   }


额外功能,主要包括实时显示测量结果和球面测量

functionchangeImmediate(element) {
       measureControl.setImmediate(element.checked);
                  
                   if(measureControl.immediate)
                          {alert("True");}
                   else
                            {alert("False");}
    }
    function changeGeodesic(checked) {
        measureControl.geodesic = checked;
   }


四、运行结果


本文源码下载地址:http://download.csdn.net/detail/longshengguoji/7980655

相关文章
|
4天前
|
传感器 数据采集
LabVIEW利用线性压缩弹簧开发重量测量系统
LabVIEW利用线性压缩弹簧开发重量测量系统
|
4天前
|
编解码 索引
LabVIEW使用正交编码器进行角位置测量
LabVIEW使用正交编码器进行角位置测量
12 1
|
4天前
|
算法 计算机视觉
OpenCV(四十四):亚像素级别角点位置优化
OpenCV(四十四):亚像素级别角点位置优化
50 0
|
4天前
[Halcon&测量] 两线直线的角度测量
[Halcon&测量] 两线直线的角度测量
37 0
|
4天前
|
资源调度 算法
[Halcon&测量] 一维测量
[Halcon&测量] 一维测量
53 0
[Halcon&测量] 一维测量
|
4天前
Halcon&测量] 模糊测量
Halcon&测量] 模糊测量
49 0
|
8月前
|
传感器 数据采集 编解码
让传感器数据更直观之LCD曲线显示
让传感器数据更直观之LCD曲线显示
118 2
|
10月前
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
244 0
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
|
机器学习/深度学习 传感器 算法
【热力】基于matlab模拟矩形板上二维温度分布
【热力】基于matlab模拟矩形板上二维温度分布
|
数据采集 编解码 数据处理
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)