leaflet获取超图wms服务图层的要素信息

贴个群号

WebGIS学习交流群461555818,欢迎大家。

点击事件获取经纬度

  const self = this
  testLayer.on('click', function(e){
    if(self.map.hasLayer(testLayer)){
      self.getClickFeatrue(e.latlng,"你的图层名,一般是rest/maps后面的","你的服务地址")
    }
  })

获取要素信息

    /**
     * @desc 超图wms服务,获取点击要素信息
     * @param {object} latlng 鼠标点经纬度
     * @param {String} name - 图层名称
     * @param {String} serverUrl - 超图服务地址
     * @returns 返回数据 geoJson 格式结果数据
     */
    async getClickFeatrue(latlng,name,serverUrl){
      const _this = this
      var polygon = L.polygon([[latlng.lat-0.0001, latlng.lng-0.0001], [latlng.lat-0.0001, latlng.lng+0.0001], [latlng.lat+0.0001, latlng.lng+0.0001], [latlng.lat+0.0001, latlng.lng-0.0001]], {color: 'red'});
      //服务端数据坐标系为 3857,因此将查询数据转为与服务端对应坐标系:
      var geometry = L.supermap.Util.transform(polygon, L.CRS.EPSG4326, L.CRS.EPSG4326);
      var param = await new L.supermap.QueryByGeometryParameters({
        queryParams: {name: name},//zlc
        geometry: geometry
      });
      new L.supermap
        .QueryService(serverUrl)
        .queryByGeometry(param,async function (serviceResult) {
          if(serviceResult.result){
            //leaflet 绘制数据默认为 4326,服务器返回数据为 3857,因此在加载到地图前,先进行坐标系转换:
            var result =await L.supermap.Util.transform(serviceResult.result.recordsets[0].features, L.CRS.EPSG4326, L.CRS.EPSG4326);
            if(result.features.length>0){
              return result
            }
          }
        });
    },
虽然参考引用中未直接提及在Vue项目中使用Leaflet点击获取Geoserver服务图层属性信息的方法,但可以基于引用中的思路和常见的开发逻辑推测实现方法。 通常需要以下步骤: 1. **引入必要的库**:在Vue项目中引入Leaflet和axios(用于发送请求)。 2. **初始化地图**:创建Leaflet地图并添加Geoserver的图层。 3. **监听地图点击事件**:当用户点击地图时,获取点击位置的坐标。 4. **发送请求获取属性信息**:使用点击位置的坐标向Geoserver发送请求,获取该位置的图层属性信息。 以下是一个示例代码: ```vue <template> <div id="map"></div> </template> <script setup lang="ts"> import { ref, onMounted } from 'vue'; import L from 'leaflet'; import axios from 'axios'; // geoserverMap地图信息 const geoserverMap = ref({ id: 1, center: [0, 0], // 替换为实际的纬度和经度 crs: L.CRS.EPSG4326, url: 'xxxxxxxxx', // 影像分割地址 layerName: 'xxx', // 影像图层名 }); let map: L.Map | null = null; // 声明全局变量保存地图 // 加载地图 const loadWorldMap = async () => { // 确保地图已初始化 if (!map) { map = L.map('map', { crs: L.CRS.EPSG4326, center: geoserverMap.value.center, zoom: 12, zoomControl: true, attributionControl: false, preferCanvas: true, }); // 添加WMS图层,栅格图层 L.tileLayer.wms(geoserverMap.value.url, { layers: geoserverMap.value.layerName, // GeoServer 中发布的图层名称 transparent: true, }).addTo(map); // 监听地图点击事件 map.on('click', async (e) => { const { lat, lng } = e.latlng; const bbox = `${lng - 0.001},${lat - 0.001},${lng + 0.001},${lat + 0.001}`; // 构建一个小的边界框 const requestUrl = `${geoserverMap.value.url}?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&LAYERS=${geoserverMap.value.layerName}&QUERY_LAYERS=${geoserverMap.value.layerName}&STYLES=&BBOX=${bbox}&FEATURE_COUNT=10&HEIGHT=1&WIDTH=1&FORMAT=image/png&INFO_FORMAT=application/json&SRS=EPSG:4326&X=0&Y=0`; try { const response = await axios.get(requestUrl); console.log('图层属性信息:', response.data); } catch (error) { console.error('获取图层属性信息失败:', error); } }); } }; onMounted(async () => { // 调用加载地图的函数 await loadWorldMap(); }); </script> <style scoped> /* 地图容器 */ #map { width: 100%; height: 100%; } </style> ``` 在上述代码中,通过监听地图的点击事件,获取点击位置的经纬度,然后构建一个小的边界框,向Geoserver发送`GetFeatureInfo`请求,以获取该位置的图层属性信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值