`

OpenLayers例子解析

阅读更多

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

<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数据文件或者是一些Coveragetiff/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对象中增加进入BasicLayerPoint LayerLine LayerPolygon 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对象的方法,分别增加在电子地图上,以便用户才可以使用这些方法。这里只有三个具体方法:1point2line3polygon。此段程序和上段程序配合,结构设计的很巧妙,利用的Prototype.js的程序设计优势(其实就是高级的JavaScript),为后期的方法扩展提供便利,如果你需要增加新方法,你只要在drawControls函数体内增加方法就行了,很方便,修改量也小。
for(var key in drawControls) {
map.addControl(drawControls[key]);
}

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

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

//
判断用户请求的函数,也就是用户选择的是那个IDRedio对象,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>

分享到:
评论

相关推荐

    WebGIS之OpenLayers全面解析

    花费了10个积分下载的WebGIS之OpenLayers全面解析.pdf 清晰度还不错 里面内容很充实 openlayers方面资料本来就比较少 这个pdf基本都涵盖了 里面也讲解了军标标绘,还有例子。对于里面的代码,在我另一个csdn资源里面...

    map map openlayers例子

    在"map map openlayers例子"中,我们主要探讨的是如何使用OpenLayers创建和操作地图。首先,我们需要引入OpenLayers库的JavaScript文件。通常,这可以通过CDN链接或者本地文件引用完成。例如: ```html ...

    openlayers 3 例子中文解析

    ### OpenLayers 3 示例中文解析 #### 1. 局部化OpenStreetMap与不同层级显示地图 - **知识点:** - **OpenStreetMap**:一个免费且开放的地图项目,用户可以贡献地理数据。 - **地图层级控制**:通过调整地图的...

    [WebGIS之OpenLayers全面解析][郭明强,黄颖,谢忠等][程序源代码].rar

    《WebGIS之OpenLayers全面解析》是一本深入探讨WebGIS技术与OpenLayers库的专业书籍,由郭明强、黄颖和谢忠等作者撰写。这本书提供了丰富的实例和源代码,旨在帮助开发者更好地理解和运用OpenLayers进行WebGIS应用的...

    OpenLayers_2.10_Beginners_Guide_Code

    《OpenLayers 2.10 初学者指南...每个例子都对应了OpenLayers API的一个或多个功能点,是学习和理解OpenLayers的绝佳素材。通过深入研究这些代码,你可以逐步掌握OpenLayers的使用,为自己的WebGIS项目打下坚实基础。

    openLayers geoserver常见问题

    解析XML在OpenLayers中通常使用JavaScript的内置DOM解析器,例如`document.createElement`, `getElementsByTagName`, `getAttribute`等方法,或者使用jQuery等库简化操作。 关于OpenLayers的popup(弹窗),可以...

    openlayers实现本地图片作为背景,添加marker标记

    在这个例子中,我们将讨论如何利用OpenLayers将本地图片作为地图背景,并添加marker标记。 首先,为了将本地图片用作背景,我们需要创建一个OpenLayers的图层实例。这通常通过`ol.source.ImageStatic`类来实现。你...

    使用openlayers展示对象的移动轨迹

    1. **数据准备**:首先,我们需要将"data"文件读取并解析成OpenLayers可以理解的格式。如果是GeoJSON,数据通常包含在`features`数组中,每个`feature`有一个`geometry`属性,包含了轨迹点的坐标。 2. **创建源...

    openlayers资料收集

    下面是一个使用 OpenLayers 加载 WMS 和 GML 文件的例子: ```javascript // 导入 OpenLayers.js &lt;script src="../lib/OpenLayers.js"&gt; var lon = 5; // x 轴坐标 var lat = 40; // y 轴坐标 var zoom = 5; //...

    scottcoder-openlayers-v6.5.0.zip

    《OpenLayers v6.5.0深度解析与实践指南》 OpenLayers是一个强大的JavaScript库,专为构建交互式地图应用程序而设计。它允许开发者在网页上轻松地展示地图,包括来自多个来源的数据,如WMS、WMTS、TMS等服务。在...

    webgis之openglayer全面解析教材源代码

    《WebGIS之OpenLayers全面解析教材源代码》是郭明强老师的一本深入探讨WebGIS技术的著作,其中重点讲解了OpenLayers库的使用。OpenLayers是一个强大的JavaScript库,专门用于构建基于Web的地图应用程序。本教材通过...

    Openlayers绘制地图标注

    这有助于用户更好地理解和解析地图上的数据。以下是对OpenLayers中绘制地图标注的详细说明: 1. **标注的简介** 标注是地图上的一个重要元素,它允许我们将额外的信息,如地点名称、描述或图标,添加到地图上。...

    Openlayer 4.2.0所有例子 js css

    6. **矢量数据操作**:通过`ol.format`模块,OpenLayers可以解析和写入多种矢量数据格式,如GeoJSON、GML、KML等。这使得在网页上展示和编辑地理数据变得简单。 7. **事件处理**:OpenLayers允许绑定各种地图和层...

    WebGIS完整功能例子

    这些数据需要转换为Web友好的格式,如GeoJSON或TileJSON,以便JavaScript可以解析和渲染。 8. **服务接口**:WebGIS可能与Web服务交互,如WMS(Web Map Service)和WFS(Web Feature Service)获取地图图层和地理...

    基于openlayers4实现点的扩散效果

    本文将详细解析如何使用OpenLayers 4实现这种效果,并提供一个基础的代码示例。 首先,OpenLayers是一个强大的JavaScript库,它允许开发者创建交互式地图,支持多种地图源和服务,如OpenStreetMap、WMS等。在本例中...

    SLDReader:在线地图库的SLD样式

    有关标准的更多信息:例子请参阅docs / examples文件夹,以在本地提供它们npm startapi文件对受支持的SLD功能的限制SLDReader库可以读取SLD v1.0和SLD v1.1文档,但是SLDReader和OpenLayers样式转换器(尚未)实现...

Global site tag (gtag.js) - Google Analytics