Межослойный фильтр Geoserver в OpenLayers 2 для протокола WFS

Мне нужно выполнить пространственный запрос INTERSECTS между слоями типа Point и Polygon, чтобы найти точки, которые пересекаются с полигоном атрибута fclass == park.

CQL Query:

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

Я определил векторный слой и использую протокол 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.

Любые предложения будут полезны.

0 ответов

Другие вопросы по тегам