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

简介:

本文演示用另一种方法实现测量功能。

先上结果图


功能实现:

1.      界面制作

在HTMLbody主体中添加相应代码为:

<div id="map" class="smallmap"></div>
<div id="options">   
    <divid="output"></div>  
    <ulid="controlToggle">        
        <input type="button"name="type" value="长度"id="line" onClick="toggleControl(this);"checked="false"></input>              
        <input type="button"name="type" value="面积"id="polygon" onClick="toggleControl(this);"checked="false"></input>
        <input type="button"name="type" value="取消"id="cancel" onClick="cancel(this);"checked="false"></input>   
        <li>
            <input type="checkbox"name="geodesic" id="geodesicToggle"onclick="toggleGeodesic(this);" />
            <label for="geodesicToggle">球面测量</label>
        </li>         
    </ul>
    
</div>
<divid='map_element' style='width:1400px;height:800px;'></div>
  </body>


2.      CSS定义

<styletype="text/css">
        #controlToggle li {
            list-style: none;
        }
       
        #options {
            position: relative;
            width: 400px;
        }
        #output {
            float: right;
        }
 
        /* avoid pink tiles */
        .olImageLoadError {
            background-color: transparent !important;
        }
    </style>


3.      初始化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);
            map.addControl(newOpenLayers.Control.LayerSwitcher());
            map.addControl(new OpenLayers.Control.MousePosition());
           
            // style the sketch fancy
            var sketchSymbolizers = {
                "Point": {
                    pointRadius: 4,
                    graphicName:"square",
                    fillColor:"white",
                    fillOpacity: 1,
                    strokeWidth: 1,
                    strokeOpacity: 1,
                    strokeColor:"#333333"
                },
                "Line": {
                    strokeWidth: 3,
                    strokeOpacity: 1,
                    strokeColor:"#666666",
                    strokeDashstyle:"dash"
                },
                "Polygon": {
                    strokeWidth: 2,
                    strokeOpacity: 0.4,
                    strokeColor:"#666666",
                    fillColor: "red",
                    fillOpacity: 0.3
                }
            };
            var style = new OpenLayers.Style();
            style.addRules([
                new OpenLayers.Rule({symbolizer:sketchSymbolizers})
            ]);
            var styleMap = newOpenLayers.StyleMap({"default": style});
           
            // allow testing of specificrenderers via "?renderer=Canvas", etc
            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
            renderer = (renderer) ? [renderer]: OpenLayers.Layer.Vector.prototype.renderers;
 
            measureControls = {
                line: newOpenLayers.Control.Measure(
                    OpenLayers.Handler.Path, {
                        persist: true,
                        handlerOptions: {
                            layerOptions: {
                                renderers:renderer,
                                styleMap:styleMap
                            }
                        }
                    }
                ),
                polygon: newOpenLayers.Control.Measure(
                    OpenLayers.Handler.Polygon,{
                        persist: true,
                        handlerOptions: {
                            layerOptions: {
                                renderers:renderer,
                                styleMap:styleMap
                            }
                        }
                    }
                )
            };
           
            var control;
            for(var key in measureControls) {
                control = measureControls[key];
                control.events.on({
                    "measure":handleMeasurements,
                    "measurepartial":handleMeasurements
                });
                map.addControl(control);
            }
           
            map.zoomToMaxExtent();
           
           document.getElementById('noneToggle').checked = true;
        }


4.      测量功能实现

functionhandleMeasurements(event) {
            var geometry = event.geometry;
            var units = event.units;
            var order = event.order;
            var measure = event.measure;
            var element =document.getElementById('output');
            var out = "";
            if(order == 1) {
                out += "结果: " +measure.toFixed(3) + " " + units;
            } else {
                out += "结果: " +measure.toFixed(3) + " " + units + "<sup>2</" +"sup>";
            }
            element.innerHTML = out;
        }
 
        function toggleControl(element) {
                    //alert("Hello");
                    toggleImmediate(element);
            for(key in measureControls) {
                var control =measureControls[key];
                if(element.id == key &&element.checked) {
                    control.activate();
                } else {
                    control.deactivate();
                }
            }
        }
       
           function cancel(element)
           {
                    //measureControl.deactivate();
                    //map.removeControl(measureControl);
                    for(key in measureControls)
                    {
                var control =measureControls[key];
                             if(control != null)
                             {
                                       control.deactivate();
                                       map.removeControl(control);
                             }
                    }
           }
          
        function toggleGeodesic(element) {
            for(key in measureControls) {
                var control =measureControls[key];
                control.geodesic =element.checked;
            }
        }
       
        function toggleImmediate(element) {
            for(key in measureControls) {
                var control =measureControls[key];
               control.setImmediate(element.checked);
            }
        }


5.      功能展示



相关文章
|
8月前
|
机器学习/深度学习 传感器 数据可视化
【免费】以 3D 形式显示热图、高程或天线响应模式表面数据附matlab代码
【免费】以 3D 形式显示热图、高程或天线响应模式表面数据附matlab代码
|
2月前
|
算法 计算机视觉
OpenCV(四十四):亚像素级别角点位置优化
OpenCV(四十四):亚像素级别角点位置优化
46 0
|
5月前
|
资源调度 算法
[Halcon&测量] 一维测量
[Halcon&测量] 一维测量
41 0
[Halcon&测量] 一维测量
|
5月前
[Halcon&测量] 两线直线的角度测量
[Halcon&测量] 两线直线的角度测量
31 0
|
5月前
Halcon&测量] 模糊测量
Halcon&测量] 模糊测量
48 0
|
8月前
|
机器学习/深度学习 传感器 算法
【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)
【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)
|
8月前
|
传感器 数据采集 编解码
让传感器数据更直观之LCD曲线显示
让传感器数据更直观之LCD曲线显示
117 2
|
10月前
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
226 0
遥感原理与应用:常用波段及其特性、太阳辐射衰减原因、大气窗口及其分布是什么?
|
机器学习/深度学习 算法 知识图谱
几种距离的度量方式
几种距离的度量方式
291 0
几种距离的度量方式
|
机器学习/深度学习 传感器 算法
【热力】基于matlab模拟矩形板上二维温度分布
【热力】基于matlab模拟矩形板上二维温度分布