我需要在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图层我只是将过滤器设置为param(layer.params ['CQL_FILTER'] =“filter_string”),但我不知道在使用WFS图层时在哪里设置所需的过滤器。没有找到任何使用OpenLayers WFS和Geoserver跨层flters的示例。
任何建议都会有所帮助。