首页 / 浏览问题 / WebGIS / 问题详情
icilent for leaflet调用数据查询服务无法查询到结果
30EXP 2023年04月07日

使用产品:iserver 11i、icilent 11i for leaflet

问题详细描述:icilent for leaflet调用数据查询服务前端收到的查询结果为空

发布的rest查询服务是没问题的,在iserver页面里测试正常

使用鼠标点击事件传入坐标查询则产生问题,返回的结果为空?

我怀疑是坐标系的问题,数据和地图都是3857坐标系。是哪里设置错了么?

代码:

初始化map

this.map = L.map("map", {
        crs: L.supermap.CRS.TianDiTu_Mercator,
        //center: [42.01, 128.1],//矢量中心
        center: [42.5458, 129.206],
        maxZoom: 18,
        zoom: 12,
        //layers: [this.data[1].children[0].layer, this.data[1].children[1].layer, imgTDT],
        layers: [imgTDT],
        attributionControl: false,
        //全屏组件控制
        fullscreenControl: {
          pseudoFullscreen: false,
        },
        //绘图组件控制 默认填写成false
        drawControl: false
      });

鼠标点击查询事件:按照官网的例子写的

//开启点击事件监听

        this.map.on('click', function (e) {
          var url = 'http://localhost:8090/iserver/services/data-KJDB/rest/data'
        
          var circleMarker = new L.circleMarker([ e.latlng.lat,e.latlng.lng])
          var bufferParam = new L.supermap.GetFeaturesByBufferParameters({
            datasetNames: ["KJDBCG:BJD_1"],
            bufferDistance: 10,
            geometry: circleMarker
        });
        new L.supermap
            .FeatureService(url)
            .getFeaturesByBuffer(bufferParam, function (serviceResult) {
              var result =   serviceResult.result
              })
      })

数据服务:

查询返回结果:

1个回答

您好,您这边是用点做缓冲区查询,您的底图是EPSG:3857的地图,是投影坐标系地图,它的单位是米,您设置的缓冲区范围是10米,距离太小,很难查到数据。可以增大缓冲距离,也可以增大circleMarker的半径。
451EXP 2023年04月07日

您好,谢谢你的回答增大缓冲区范围之后成功了。

但是后续在官网例子中

new L.supermap
            .FeatureService(url)
            .getFeaturesByBuffer(bufferParam, function (serviceResult) {
                resultLayer = L.geoJSON(serviceResult.result.features, {
                    onEachFeature: function (feature, layer) {
                        layer.bindPopup(resources.text_capital+":" + feature.properties.CAPITAL);
                    }
                }).addTo(map);

提示
       Uncaught (in promise) TypeError: layer.bindPopup is not a function

无法添加bindPopup

您好,您可以在onEachFeature中加一个输出,输出layer,是否是layer为undefined。
...