想像arcgis一样发布一个地图然后在前端分图层显示,但查了一堆资料都说是不可能的,查询图层组的属性信息只会把图层组当做一个普通图层来返回并不会把图层组中的图层分别显示出来,于是本人使用了两次ajax请求最终实现了该需求
第一步 获取图层组的图层描述解析typeName
$.ajax({
url: url + '?service=WMS&version=1.1.1&request=DescribeLayer&layers=' + layers,
dataType: 'xml',
timeout: 1000,
cache: false, //禁用缓存
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
error: function (xml) {
console.log("加载XML文档出错!")
},
success: function (layerGroupData) {
var modleLayersList = [];
$(layerGroupData).find("LayerDescription").each(function () {
var item = $(this);
modleLayersList.push(item.find("Query").attr("typeName"));
})
if (modleLayersList.length > 0) {
//第二步骤
}
}
})
第二步 根据解析出来的typename去逐个添加图层
var workSpace = modleLayersList[0].split(":")[0];
$.ajax({
url: url + '?service=wms&version=1.1.1&request=GetCapabilities',
type: 'POST',
dataType: 'text',
timeout: 1000,
cache: false, //禁用缓存
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
error: function (xml) {
console.log("加载XML文档出错!")
},
success: function (xmlResult) {
$(xmlResult).find("Layer").find("Layer").each(function () {
var item = $(this);
//缩放到当前层
if (item.find("Name").eq(0).text() == layers.split(":")[1]) {
mapHelper.map.getView().fit(ol.proj.transformExtent([Number(item.find("BoundingBox").attr("minx")), Number(item.find("BoundingBox").attr("miny")), Number(item.find("BoundingBox").attr("maxx")), Number(item.find("BoundingBox").attr("maxy"))], item.find("BoundingBox").attr("SRS"), item.find("BoundingBox").attr("SRS")), { duration: 300 })
mapHelper.options.fullMap = [Number(item.find("BoundingBox").attr("minx")), Number(item.find("BoundingBox").attr("miny")), Number(item.find("BoundingBox").attr("maxx")), Number(item.find("BoundingBox").attr("maxy"))];
}
//逐个添加图层
if (arguments[0] != 0 && item.attr("queryable") == "1") {
if (modleLayersList.indexOf(item.find("name").eq(0).text()) >= 0 || modleLayersList.indexOf(workSpace + ":" + item.find("name").eq(0).text()) >= 0) {
var singleSourceOption = {
url: url,
params: {
'FORMAT': 'image/png',
'VERSION': '1.1.1',
tiled: false,
"LAYERS": item.find("name").eq(0).text(),
"exceptions": 'application/vnd.ogc.se_inimage'
}
};
//添加图层 巴拉巴拉
)
}
}
});