openlayers自定义图层控制的实现
好久没写博文了,今天出来冒个泡。
最近一直在考虑一件事情,那就是openlayers中自定义wms的图层控制。用过openlayers的人都知道,在openlayers中有自带的图层控制的控件,调用方法也很简单:
map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true}));//图层控制
但是,不论是从操作的方便程度还是美观性方面考虑,自带的图层控制是无法满足需求的,考虑了一段时间,今天终于有时间实现了,下面就说说我的实现思路。
首先,说说难点,用过arcgis for javascript的人都知道,在arcgis for javascript API中的wmsLayer有setVisibleLayers(layers)的方法,可以很方便的实现WMS的图层控制,但是在openlayers的wms没有类似的实现方法,所以得自己考虑实现。
接着,说说实现的环境。地图服务我用的是geoserver,图层控制用jquery的zTree,下面详细说说我的实现步骤。
1、在geoserver中发布wms图层,发布的图层包括以下。
var zNodes =[
{ id:"base", pId:0, name:"行政区划图", open:true},
{ id:"china:capital", pId:"base", name:"省会城市"},
{ id:"china:pro_polygon", pId:"base", name:"省级行政区"},
{ id:"theme", pId:0, name:"专题图", open:true},
{ id:"china:lake", pId:"theme", name:"湖泊"}
];
2、地图发布好以后就定义地图与图层,并将图层添加到地图中。
map = new OpenLayers.Map('map');
wms=GetExtendWms('china:pro_polygon',"wms",false);
map.addLayer(wms);
GetExtendWms的方法代码如下:
var GetExtendWms = function(layer,layername,visibility){
var wms = new OpenLayers.Layer.WMS(
layername,
"http://localhost:8088/geoserver/china/wms",
{
LAYERS: layer,
transparent:true,
STYLES: '',
format: format
},
{
singleTile: false,
ratio: 1,
isBaseLayer: false,
visibility:visibility,
yx : {'EPSG:4326' : true}
}
);
return wms;
}
在图层初始化的时候不显示wms。
3、创建图层控制面板与树
var setting = {
check: {
enable: true
},
data: {
simpleData: {
enable: true
}
},
callback: {
onCheck: getCheckedNodes
}
};
$(document).ready(function(){
$.fn.zTree.init($("#tree"), setting, zNodes);
});
树创建完成后效果如下:
function getCheckedNodes(){
var checked="";
var zTree = $.fn.zTree.getZTreeObj("tree");
var checkedNodes = zTree.getCheckedNodes(true);
if(checkedNodes.length!=0){
for(var i=0;i<checkedNodes.length;i++){
if(!checkedNodes[i].isParent){
checked+=checkedNodes[i].id+",";
}
}
checked=checked.substring(0,checked.length-1);
map.removeLayer(wms);
wms=GetExtendWms(checked,"wms",true);
map.addLayer(wms);
}
else{
map.removeLayer(wms);
wms=GetExtendWms('china:pro_polygon',"wms",false);
map.addLayer(wms);
}
}
思路是:首先获取选中的子节点的图层的名称,如果有子节点被选中,在地图中将wms图层移除,再定义wms的图层为选中的子节点,并设置其可见为true,并将wms添加到地图中,这时选中的涂层就会在地图中显示;如果没有节点被选中,在地图中将wms图层移除,再定义wms的图层为任一图层,设置其可见为false,将wms添加到地图中,wms就不会在地图中显示。实现后的效果如下:
openlayers自定义图层控制的实现的更多相关文章
- OpenLayers 3 的 图层控制控件
openlayers3的control中没有提供默认的图层控制控件. 但是git上已经有造好的轮子,直接拿来用就可以了.地址 https://github.com/walkermatt/ol3-lay ...
- 【百度地图API】如何自定义地图图层?实例:制作麻点图(自定义图层+热区)
原文:[百度地图API]如何自定义地图图层?实例:制作麻点图(自定义图层+热区) 摘要:自定义地图图层的用途十分广泛.常见的应用,比如制作魔兽地图和清华校园地图(使用切图工具即可轻松实现).今天我们来 ...
- arcgis api for js入门开发系列七图层控制(含源代码)
上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...
- PHP之自定义会话控制---使用文件处理
前三篇简单的总结了下会话控制和文件操作,这一篇说说会话控制的自定义处理方式.既然知道了文件的基本读写,而且在会话控制中,也有人提到,session数据可以保存到缓存或数据库中,实际上当然不会是直接利用 ...
- arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现
图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...
- openlayers4 入门开发系列之图层控制(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- ios中自定义图层的2种方法
1:自定义图层,在图层中画图 #import <QuartzCore/QuartzCore.h> @interface MJLayer : CALayer @end #import &qu ...
- ios中自定义图层
图层和VIEW的区别 1:view不具备显示功能,是因view内部有一个图层,才能显示出来 2:图层不具备事件功能,VIEW继承UIRespone具有处理事件功能 3:自定义的图层有一个影式动画,VI ...
随机推荐
- Python HTML Resolution Demo - SGMLParser & PyQuery
1. SGMLParser: 这里定义了一个Parse类,继承SGMLParser里面的方法.使用一个变量is_h4做标记判定html文件中的h4标签,如果遇到h4标签,则将标签内的内容加入到Pars ...
- APP 自动化测试封装结构模式
原文出处http://www.toutiao.com/a6268089772108333314/ 做过UI自动化测试同学,都会深深体会几个痛点:维护量大.适配量大.编写代码巨大等.基于这些问题,大家都 ...
- Spring.Net+NHibernate+Castle学习网站
1.刘冬 http://www.cnblogs.com/GoodHelper/archive/2009/10/16/1584243.html 2.学习资料 http://www.cnblogs.co ...
- 安装三大浏览器驱动driver
1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list 2.Firefox的驱动geckodriver 下载 ...
- MapReduce:输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值,且整数不保留小数,小数保留两位小数点
有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔 200 314 3500 宇文玥 2000 332 ...
- 在react-native中使用redux
redux是什么? redux是一个用于管理js应用状态的容器.redux出现时间并不是很长,在它出现之前也有类似功能的模块出现,诸如flux等等.redux设计的理念很简单,似乎最初这个开发团队就有 ...
- [BZOJ2717]迷路的兔子[构造]
构造题…当然需要推(看)一推(看)规(题)律(解)啦... 其实是在Discuss那个CA的一句话题解里面翻到这个东西的... 用奇怪的姿势枚举一下...先贴代码 #include<bits/s ...
- Dijkstra算法 - 最短路径算法
2017-07-26 22:30:45 writer:pprp dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度, 选择路径长度最小的顶点加入到集合 ...
- PAT1037. Magic Coupon (25)
#include <iostream> #include <algorithm> #include <vector> using namespace std; in ...
- hibernate-Table 'XXX.XXX' doesn't exist
hibernate---Table 'XXX.XXX' doesn't exist 在设置自动生成数据表的策略中: <!-- 自动生成数据表的策略 --> <property nam ...