码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-27 11:49:09      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:geoserver   opengis   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;
   }


四、运行结果

bubuko.com,布布扣

bubuko.com,布布扣

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

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

标签:geoserver   opengis   openlayers   测量   

原文地址:http://blog.csdn.net/longshengguoji/article/details/39609171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!