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

时间: 2024-10-16 21:28:33

OpenLayers中长度测量和面积测量等功能的实现的相关文章

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

本文演示用另一种方法实现测量功能. 先上结果图 功能实现: 1.      界面制作 在HTMLbody主体中添加相应代码为: <div id="map" class="smallmap"></div> <div id="options"> <divid="output"></div> <ulid="controlToggle"> &l

Python的Flask框架中实现简单的登录功能的教程

  Python的Flask框架中实现简单的登录功能的教程,登录是各个web框架中的基础功能,需要的朋友可以参考下 回顾 在前面的系列章节中,我们创建了一个数据库并且学着用用户和邮件来填充,但是到现在我们还没能够植入到我们的程序中. 两章之前,我们已经看到怎么去创建网络表单并且留下了一个实现完全的登陆表单. 在这篇文章中,我们将基于我门所学的网络表单和数据库来构建并实现我们自己的用户登录系统.教程的最后我们小程序会实现新用户注册,登陆和退出的功能. 为了能跟上这章节,你需要前一章节最后部分,我们

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

Dreamweaver CS5 中启用 WordPress 代码提示功能的图文方法

使用 Dreamweaver 这样的可视化的 IDE 工具进行编程的最大的一个好处是它的代码提示功能,只要输入几个字符,IDE 工具就会智能的给出一系列可选的函数或者变量让你输入. 代码提示功能的好处是非常明显的,比如你对某个函数记不清楚,就可以通过代码提示功能快速输入,而不用去搜索和查资料,即使非常清楚,也可以通过代码提示功能快速输入而无需输入每个字符,这样的对编程效率提高是非常明显的. Dreamweaver CS5 支持 WordPress 代码提示 我们知道 Dreamweaver 代码

在Eclipse中创建新的重构功能

创建 对重构的强大支持是软件开发人员喜爱Eclipse的一个最为重要的原因.而Eclipse还有一个至少和重构不相上下的优点,那就是其近乎无懈可击的可扩展性.这两者的结合意味着我们可以根据自己的需要来创建展新的重构功能. 介绍 重构在现代软件开发过程中扮演着重要的角色,它能够减轻软件开发人员的工作负担,提高软件开发的生产效率.为了阐明重构的重要性,我们在这里引用了developerWorks上David Carew提供的关于重构的教程中的一段话: 现在,一个开发者的工作大部分在于对现有的代码进行

J2ME中暂时无法完成的功能

J2ME中暂时无法完成的功能 作者:陈跃峰 出自:http://blog.csdn.net/mailbomb          列一些J2ME中暂时无法完成的功能,希望大家能积极补充: 1.  在手机中不更改代码实现移植,主要指游戏. 2.  动态修改按钮文字. 3.  在Canvas上接受中文输入. 4.  操作本地资源.例如地址本.已收短信息等. 5.  制作破坏性的手机病毒. 6.  其他等待大家来补充.

在JAVA应用程序中如何实现FTP的功能 (转)

程序 在JAVA应用程序中如何实现FTP的功能 大连捷通电脑技术有限公司 王 淼 ---- 在JAVA的编程中,您也许会遇到FTP方面的编程,本文就来演示如何实现它. ---- 本程序是由JBUILDER2.0来开发的,为了节约篇幅我只列出主要的三个部份.FtpList 部分是用来显示FTP服务器上的文件(附图略).GetButton部分为从FTP服务器下传一个文件.PutButton 部分为向FTP服务器上传一个文件.别忘了在程序中还要引入两个库文件(import sun.net.*,impo

ASP.NET Whidbey 中新的代码编译功能

asp.net|编译 ASP.NET Whidbey 中新的代码编译功能G. Andrew DuthieGraymad Enterprises, Inc. 2003 年 10 月 摘要:了解如何利用 ASP.NET Whidbey 更轻松地使用代码.Code 目录会自动为您的站点编译代码,而预编译会使部署工作更容易. 下载本文的源代码.(请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解.) 目录简介新的模块化代码模型\Code 目录利息计算器预编译支持在位预编

在webclass中使用文件上传功能

web|上传 在webclass中使用文件上传功能 webclass实例:http://www.shinco.com/jjx/wcnews/news.asp许多文件上传组件并不能在vb中正常使用,我测试了chinaasp fileup,aspSmartupload,aspupload enterprise,inotesupload等组件,均不能正常使用.其主要原因,是因为在vb中没有促发组件的OnStartPage过程.我们无法改写这些组件,所以要自己编码来解决这个问题,记得以前有网友谈过这个问