Openlayers 获取图层组属性信息 并根据图层组配置地图图层

想像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'
                                                    }
                                                };
                                                //添加图层 巴拉巴拉
                                                )
                                            }

                                        }
                                   });

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值