`
eric_hwp
  • 浏览: 125939 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用OpenLayers API和类来画点、线、面

 
阅读更多

看好多人都写OpenLayers的一些说明,但总感觉没有具体事例解释,不太爽。抽点时间从OpenLayers官方网站上找些例子具体解释一下Map、Vector、Feature类的简单用法。有些东西是自己工作经验的理解,没完全按英文解释来理解,希望不会对大家造成误解。工作太忙,以后又时间和精力就不断地解释点,目前有100多个例子呢。
以下程序拷到本机应该就能直接应用,我是在Geoserver中运转地。

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>创建不同的Feature类实例 ———— 在电子地图上绘制Feature对象实例的方式有两种,一种是使用默认方式(但在相应的CSS表中也可以更换图片),另一种是自己做图片,并根据用户选择来响应在电子地图上创建的不同Feature类实例请求</title>
        <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
        <!--本页中的样式表-->
        <style type="text/css">
                <!--显示电子地图DIV的样式控制-->
            #map {width: 512px;height: 512px;border: 1px solid gray;}
            <!--Rediod对象的样式表,是用来判断用户请求状态的Readio-->
            #controlToggle li {list-style: none;}
            p {width: 512px;}
        </style>
        <!--引入OpenLayers.js文件的路径地址,就像使用Portotype.js一样-->
        <script src="OpenLayers.js"></script>
        <script type="text/javascript">
            var map, drawControls;
            OpenLayers.Util.onImageLoadErrorColor = "transparent";
           
            //自动加载的函数开始
            function init(){
                map = new OpenLayers.Map('map');//必须实例化的Map对象,是电子地图成图和其它一切用户请求和服务器相应的前提。
                               
                                //实例化的Layer.WMS对象,一个必要的基本电子地图数据图层
                var wmsLayer = new OpenLayers.Layer.WMS(
                    "BasicLayer",//图层名称,将显示在图层控制器(我自己起的名字)中的图层名称。程序员自己根据业务需求定义。
                  "http://labs.metacarta.com/wms/vmap0?",//指向解析用户请求的电子地图服务器地址和文件,绝大部分情况下是一个.xml或者是.jsp文件,如果你用自己的Geoserver服务器来解析用户请求的话,应该是“/geoserver/wms”地址,并在”geoserver\WEB-INF\pages“和“geoserver\WEB-INF\pages\wms”文件夹中看到一些相应的文件。
                  {layers: 'basic'}//被调用的电子地图数据库或者相关数据文件的ID。如果是通过GeoServer来运行电子地图服务,那么比较简单的方式是在Geoserver的管理系统中进行配置,由于配置出文件都会写在“catalog.xml”文件中,其中你可以找到数据源的具体地址,当然,如果我们能直接写“catalog.xml”文件的话,效果会更好、更快、更安全。一般都用Shape数据文件或者是一些Coverage的tiff/gis/png/jpg图,因为比较简单,但是效率比较低。也可以是PostSQL/GIS数据,等等。
                );

                var pointLayer = new OpenLayers.Layer.Vector("Point Layer");//实例化的Layer.Vector对象,用来画点(Point)。当然,如果可以根据你的业务需要,把点、线、面都画在一个Layer.Vector对象上面。
                var lineLayer = new OpenLayers.Layer.Vector("Line Layer");//实例化的Layer.Vector对象,用来线(Line)当然。如果可以根据你的业务需要,把点、线、面都画在一个Layer.Vector对象上面。
                var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer");//实例化的Layer.Vector对象,用来多边形(Polygon)。当然,如果可以根据你的业务需要,把点、线、面都画在一个Layer.Vector对象上面。

                map.addLayers([wmsLayer, pointLayer, lineLayer, polygonLayer]);//在实例化的Map对象中增加进入BasicLayer、Point Layer、Line Layer、Polygon Layer图层。
                map.addControl(new OpenLayers.Control.LayerSwitcher());//在实例化的Map对象中增加进入Control.LayerSwitcher控制器,用来控制电子地图的放大、缩小等等。当然,控制电子地图还有别的方法,你可以自己尝试尝试。
                map.addControl(new OpenLayers.Control.MousePosition());//在实例化的Map对象中增加进入Control.MousePosition控制器,用来在地图右下角显示鼠标所在电子地图上面的经度、纬度坐标。

                var options = {handlerOptions: {freehand: true}};
               
                //在电子地图Layer.Vector层上绘制各种Feature对象。
                drawControls = {
                    point: new OpenLayers.Control.DrawFeature(pointLayer,
                                OpenLayers.Handler.Point),//绘制点的方法
                    line: new OpenLayers.Control.DrawFeature(lineLayer,
                                OpenLayers.Handler.Path, options),//绘制面的方法
                    polygon: new OpenLayers.Control.DrawFeature(polygonLayer,
                                OpenLayers.Handler.Polygon, options)//绘制多边形的方法
                };

                //把程序员写的(不是自己开发的,也是利用OpenLayer API)绘制各种Feature对象的方法,分别增加在电子地图上,以便用户才可以使用这些方法。这里只有三个具体方法:1、point,2、line,3、polygon。此段程序和上段程序配合,结构设计的很巧妙,利用的Prototype.js的程序设计优势(其实就是高级的JavaScript),为后期的方法扩展提供便利,如果你需要增加新方法,你只要在drawControls函数体内增加方法就行了,很方便,修改量也小。
                for(var key in drawControls) {
                    map.addControl(drawControls[key]);
                }

                map.setCenter(new OpenLayers.LonLat(0, 0), 3);//设定电子地图显示时,默然电子地图中心点。

                document.getElementByIdx('noneToggle').checked = true;
            }
            //自动加载的函数结束

            //判断用户请求的函数,也就是用户选择的是那个ID的Redio对象,element参数其实就是Redio ID
            function toggleControl(element) {
                for(key in drawControls) {
                    var control = drawControls[key];
                    if(element.value == key && element.checked) {
                        control.activate();//activate()是OpenLayers中的一个方法,返回一个布尔值,用来激活方法。与else中的deactivate()配合,如果被激化的状态下则请求保持不变。
                    } else {
                        control.deactivate();//activate()是OpenLayers中的一个方法,返回一个布尔值,用来关闭方法。与if中的activate()配合,如果转变了别的请求,则上一个请求被关闭。
                    }
                }
            }
        </script>
    </head>
    <body onload="init()">
        <h1 id="title">OpenLayers Draw Feature Example</h1>
        <div id="tags"></div>
        <p id="shortdesc">
                        在电子地图上创建点(Point)、线(line,在OpenLayers中的具体方法是OpenLayers.Handler.Path中的Path内置方法,Path方法实际上执行一个函数),面(Ploygon多面形)的例子。
        </p>
        <div id="map"></div>
        <ul id="controlToggle">
            <li>
                <input type="radio" name="type" value="none" id="noneToggle" onclick="toggleControl(this);" checked="checked" />
                <label for="noneToggle">navigate</label>
            </li>
            <li>
                <input type="radio" name="type" value="point" id="pointToggle" onclick="toggleControl(this);" />
                <label for="pointToggle">draw point</label>
            </li>
            <li>
                <input type="radio" name="type" value="line" id="lineToggle" onclick="toggleControl(this);" />
                <label for="lineToggle">draw line</label>
            </li>
            <li>
                <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);" />
                <label for="polygonToggle">draw polygon</label>
            </li>
        </ul>
    </body>
</html

分享到:
评论

相关推荐

    openLayers-中文版API.zip

    10. **功能(Features)**:`ol.Feature`对象表示地图上的地理实体,通常与几何对象(如点、线、面)关联。你可以添加、删除、修改这些特征。 以上只是OpenLayers API的一部分内容,实际应用中还会涉及更多的高级...

    openlayers动态线

    在这个场景中,"openlayers动态线"指的是使用OpenLayers库通过Canvas API来动态绘制一条线路,模拟从起点到终点的动态移动过程。这个功能在地理信息系统(GIS)应用中非常常见,例如追踪车辆轨迹、展示路径动画等。 ...

    openlayersAPI实例

    3. 点、线、面样式:可以自定义矢量要素的样式,如颜色、线宽、填充等,使用`ol.style`对象来实现。 五、地图服务 1. WMS服务:通过`ol.source.WMS`可以接入WMS服务,获取特定图层的切片图片。 2. WFS服务:`ol....

    等值线等值面功能实现.使用技术包括Java+Geotools+WContour+Openlayers

    等值线等值面功能的实现是...总的来说,Java、Geotools、WContour和OpenLayers的结合,为开发高效、灵活且用户友好的等值线等值面应用提供了强大支持。开发者可以通过熟练掌握这些工具,提高GIS项目开发的效率和质量。

    基于openlayers和canvas绘制海量数据的实现

    CanvasLayer允许开发者利用Canvas的高性能特性来绘制大量点、线、面等几何对象,这对于实时更新或动态可视化大规模地理数据非常有用。 4. **处理海量数据的策略** - **分块渲染**:由于浏览器内存有限,不能一次性...

    openLayers geoserver常见问题

    OpenLayers API和类用于画点、线、面,如`OpenLayers.Geometry.Point`, `OpenLayers.Geometry.LineString`, `OpenLayers.Geometry.Polygon`。 了解OGC标准的WMS(Web Map Service)、WFS(Web Feature Service)和...

    动态标绘演示系统1.0(for OpenLayers3)

    1. **基本设置**:如何引入OpenLayers3库和动态标绘API,创建地图容器,并设置地图的基本属性(如中心点、缩放级别等)。 2. **图层管理**:如何添加、移除图层,以及配置图层的显示属性。 3. **标绘工具**:展示...

    openLayers3源码+api+example

    OpenLayers 3 提供的API文档详细解释了每个类、方法和属性的功能,是开发者理解和使用OpenLayers 3 的关键参考资料。主要包含以下内容: 1. **类和对象**:详述了OpenLayers 3 中各种类的构造函数、属性和方法。 2...

    Openlayers 3 v3.16.0

    - **几何对象(Geometries)**:支持点、线、面等多种几何类型,方便在地图上绘制和操作地理对象。 - **测量(Measurement)**:提供测量工具,允许用户在地图上进行距离、面积的计算。 - **地理编码(Geocoding...

    openlayers demo.zip

    4. **标记与图形**:学习如何在地图上添加点、线、面等几何对象,以及自定义样式和事件处理。 5. **控制与面板**:了解如何添加缩放控件、比例尺控件,以及其他自定义控件到地图界面。 6. **地理编码**:学习如何...

    openlayers_echarts开发实例

    - **功能(Features)**: 用于表示地图上的地理对象,可以是点、线或面。 2. **ECharts核心特性**: - **丰富的图表类型**:包括折线图、柱状图、饼图、散点图等多种图表。 - **交互性**:支持鼠标悬停、点击...

    java实现的等值线画法

    Java作为一种广泛使用的编程语言,也提供了多种方式来实现等值线的绘制。以下是对"java实现的等值线画法"的详细解释: 1. **基本概念**: - **等值线**:等值线是连接数值相等的点的曲线,它将具有相同数值的区域...

    The class diagram of Openlayers

    ### OpenLayers类图解析 #### 一、概述 OpenLayers是一个开源...对于开发者来说,掌握OpenLayers的关键类和方法是十分重要的,它不仅能帮助我们更好地理解OpenLayers的工作原理,还能提高开发效率和应用程序的质量。

    Openlayers实现图形绘制

    这里通过`addInteraction`函数实现,根据用户从下拉菜单选择的类型(如点、线或面)添加不同的绘图交互。OpenLayers提供了`ol.interaction.Draw`类,用于实现这一功能。例如,如果我们选择绘制圆形,可以使用`...

    基于openlayer扩展封装的信息窗口弹出控件

    这个项目“基于OpenLayer扩展封装的信息窗口弹出控件”旨在提供一个自定义化的信息窗口,用于展示地图上的点、线、面等地理元素的详细信息。下面我们将深入探讨这个主题,包括OpenLayers的基础知识、信息窗口的重要...

    JavaScript地图

    例如,底图图层可能来自卫星图像或地形图,而标注图层则可能包含自定义的点、线、面数据。开发者需要知道如何添加和管理这些图层,以及如何从各种数据格式(如GeoJSON、KML)加载数据。 4. **标记与注解**:在地图...

    空间数据库实习-基于SQL

    如JavaScript库Leaflet或OpenLayers,它们能捕捉用户的交互,将绘制的点、线、面转换为WKT(Well-Known Text)或WKB(Well-Known Binary)格式,然后通过API接口发送到后端服务器,服务器端再使用SQL语句将这些数据...

    全国,各省地图js,json数据.zip

    1. **地图js**: 在网页中,地图js通常指的是利用JavaScript库如Leaflet、OpenLayers或D3.js来处理和展示地图的代码。这些库提供了丰富的API和工具,使得开发者可以轻松地加载地图瓦片、添加标记、绘制路径、实现缩放...

    基于JS的WebGIS的开发

    6. **交互式地图元素**:包括点、线、面的绘制,标记(marker)的添加,以及拖放、缩放、平移等交互功能的实现。 7. **异步数据获取**:利用Ajax或Fetch API进行异步请求,从服务器获取地图数据或更新地图状态。 8...

Global site tag (gtag.js) - Google Analytics