1

我需要在 Point 和 Polygon 类型的图层之间执行空间 INTERSECTS 查询,以查找与属性 fclass == park 的多边形相交的点。

CQL 查询:

INTERSECTS(geom, collectGeometries(queryCollection('namespace_new:gis.osm_landuse_a_free_1', 'geom','fclass =  park''')))";

我已经定义了一个 Vector 层并使用 WFS 协议从 Geoserver 获取数据:

 var layerDomainData = new OpenLayers.Layer.Vector("Tourist locations", {
           // minScale: 15000000,
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
                url: "http://localhost:8080/geoserver/wfs",
                featureType: "tour_data",
                featureNS: "http://localhost:8080/geoserver/namespace_new",
                geometryName: "geom",
                srsName: "EPSG:900913",
                version: "1.1.0"
            }),
                styleMap: new OpenLayers.StyleMap({
          'default' : domainStyle,
          'select' : selectedDomainStyle
        }),
            renderers: renderer            
        });

通常,我设置空间过滤器,如:

 layerDomainData.filter = new OpenLayers.Filter.Spatial({
    type: OpenLayers.Filter.Spatial.DWITHIN,
    property: "geom",
    value: lineString, //selected feature on the map
    distance: radius,
    distanceUnits: "kilometers",
    projection: "EPSG:4326"
});

但现在我必须使用 Geoservers collectGeometries 和 queryCollection 来选择“第二”层中的所有特征与我的“第一”层相交。如果它是 WMS 层,我只需将过滤器设置为参数 (layer.params['CQL_FILTER'] = "filter_string"),但我不知道在使用 WFS 层时在哪里设置所需的过滤器。没有找到任何将 OpenLayers WFS 与 Geoserver 跨层过滤器一起使用的示例。

任何的意见都将会有帮助。

4

0 回答 0