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.      功能展示



目录
打赏
0
0
0
1
21
分享
相关文章
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
20098 2
WEB端在线CAD中实现测量圆、测量面积的方法
实现在线CAD中测量圆和测量面积的功能开发,用户点击目标圆对象将自动标记出这个圆的半径、面积值和周长值,同时可以自定义选择标注文字的位置,测量圆功能能够快速掌握目标圆对象的数据信息,方便统计工程量。
WEB端在线CAD中实现测量圆、测量面积的方法
LabVIEW使用正交编码器进行角位置测量
LabVIEW使用正交编码器进行角位置测量
141 1
|
11月前
|
LabVIEW计算测量路径输出端随机变量的概率分布密度
LabVIEW计算测量路径输出端随机变量的概率分布密度
49 0
[Halcon&测量] 一维测量
[Halcon&测量] 一维测量
330 0
[Halcon&测量] 一维测量
|
11月前
[Halcon&测量] 两线直线的角度测量
[Halcon&测量] 两线直线的角度测量
204 0
|
11月前
Halcon&测量] 模糊测量
Halcon&测量] 模糊测量
180 0
从测量平差开始的哲思
为何学习测量平差?是心里的一丝丝不甘?又或是无聊中的突发奇想。总之,我想在每天工作完娱乐的几个小时中断断续续的学完自己曾经没学好的科目。数学是很有趣的,我们的人生由感性与理性所主宰,感性有感性的自由,理性也有理性的美感,它们本质上是相通的,黄金比例0.618给我们特殊的和谐,几何让我们看到了设计元素与数学的交织,生活中处处是数学,这是我们从小就开始了解到的;再说回感性与理性,感性是我们主观上感觉是顺从激素的调节,感受着世界并对此作出反应,百度百科的解释是:感官知觉。
149 0
labview数值型数据实验输入显示时间滑动杆旋钮仪表相加相减相乘滚动条
LabVIEW是一种程序开发环境,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。