超图 openlayers 图层点击事件 多图层时查询图层要素

原理:给当前所使用到的图层添加点击事件,根据点击的图层的位置,去查询每一个图层该位置的信息,(打通我思路最重要的就是) 每个图层的点位不可能都在同一个经纬度,所以,不管他叠加还是不叠加,都不影响我获取该位置的信息,不要纠结图层是否叠在一起,(高亮不好使,是错的,忘记删除了)

  map.getLayers().getArray().forEach(layer => {

            // 已显示图层   添加事件

            if (layer.getVisible())

              // 需要查询数据的图层   添加事件

              if (layer.get('params').datasetNames)

                // 底图外的其他图层 添加事件

                if (!['bzdt', 'ztt', 'bjjx', 'xzjx', 'cjjx'].includes(layer.get('params').id))

                  //  遍历

                  map.forEachLayerAtPixel(event.pixel, (feature) => {

                    feature.style = new style.Style({

                      stroke: new style.Stroke({

                        color: "#3e84cf", //高亮区域的边界线颜色

                        width: 5

                      }),

                      fill: new Fill({

                        color: 'rgba(123,32,31, 0.2)',

                      })

                    });

                    let Param = new GetFeaturesByBufferParameters({

                      geometry: new Point(event.coordinate),

                      datasetNames: layer.get('params').datasetNames,

                      bufferDistance: map.getView().getZoom() >= 14 ? 0.001 : 0.05,//根据缩放程度进行缓冲区大小设置

                    });

                    new FeatureService(host + layer.get('params').dataUrl).getFeaturesByBuffer(Param, (serviceResult) => {

                      let res = ''

                      if (serviceResult.result.features && serviceResult.result.features.features.length > 0) {

                        res = serviceResult.result.features.features[0]

                      }

                      if (res)

                        this.$store.commit("SET_CLICK_ITEM", { event, data: { ...res, layerId: layer.get('params').id, layerName: layer.get('params').name } })

                    });

                  }, {

                    layerFilter: (item) => item.get('params').name == layer.get('params').name

                  })


 

          });

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要添加超图发布的 EPSG 4545 图层OpenLayers 地图上,您可以按照以下步骤进行操作: 1. 首先,确保您已经引入了 OpenLayers 库。您可以从官方网站(https://openlayers.org/)下载最新版本的 OpenLayers,并将其引入到您的页面中。 2. 创建一个地图容器 div 元素,以便在其中显示地图。例如: ```html <div id="map" style="width: 100%; height: 400px;"></div> ``` 3. 在 JavaScript 中,使用 OpenLayers 创建地图并设置视图。例如: ```javascript var map = new ol.Map({ target: 'map', view: new ol.View({ center: ol.proj.fromLonLat([0, 0]), // 设置地图中心点 zoom: 10 // 设置初始缩放级别 }) }); ``` 4. 添加 EPSG 4545 投影定义和转换函数。您可以使用 Proj4js 库来处理投影转换。请确保您已经在页面中引入了 Proj4js 库。例如: ```javascript proj4.defs('EPSG:4545', '+proj=...'); // 替换 ... 为 EPSG 4545 的 proj4 定义 ol.proj.proj4.register(proj4); ol.proj.get('EPSG:4545').setExtent([...]); // 设置投影的范围 ``` 请注意,上述代码中的 "+proj=..." 部分应该替换为 EPSG 4545 投影的 proj4 定义。您可以从超图发布的文档或其他来源获取正确的定义。 5. 创建一个图层并将其添加到地图上。例如: ```javascript var layer = new ol.layer.Tile({ source: new ol.source.TileSuperMapRest({ url: 'http://example.com/iserver/services/map-name/rest/maps/map', // 替换为您超图发布服务的 URL wrapX: false, projection: 'EPSG:4545' // 设置投影坐标系为 EPSG 4545 }) }); map.addLayer(layer); // 将图层添加到地图上 ``` 请将代码中的示例 URL 和图层名称替换为您实际使用的值。 通过以上步骤,您应该能够成功将超图发布的 EPSG 4545 图层添加到 OpenLayers 地图中。请根据您的具体需求进行适当的修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值