Filter toepassen op WFS

Het opvragen van een subset van de gegevens ontsloten via een dienst is een fundamentele mogelijkheid op een Web Feature Service (WFS). Bij het toepassen van een filter op een WFS wordt enkel die informatie verkregen die aan de opgegeven zoekcriteria voldoet.

Aan de hand van specifieke voorbeelden worden in dit artikel verschillende mogelijkheden aangetoond. Uiteraard is deze lijst niet exhaustief, meer informatie over ‘WFS’ en ‘Filter Encoding’ kan gevonden worden op de desbetreffende OGC-webpagina’s (WFS en Filter Encoding). Alle gegeven voorbeelden zijn uitgewerkt met versie 2.0.0.

Vooraleer bepaalde queries in productie te implementeren, raden wij aan om de nodige testen uit te voeren op onze bèta WFSs, vandaar dat alle onderstaande voorbeelden uitgewerkt zijn aan de hand van de bèta-versies.

Filter toepassen op WFS Voorlopig referentiebestand gemeentegrenzen

Alle gemeenten binnen één provincie (in dit voorbeeld Oost-Vlaanderen) opvragen
De NISCODE van gemeenten behorend tot eenzelfde provincie, begint telkens met hetzelfde cijfer. Voor Oost-Vlaanderen is dat ‘4’.

  • Een eerste voorbeeld is een POST-request met OpenGIS filter encoding (OGC):
<wfs:GetFeature service="WFS" version="2.0.0" outputFormat="GML2" xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
	<wfs:Query typeNames="VRBG:Refgem">
		<fes:Filter>
			<fes:PropertyIsLike wildCard="*" singleChar="." escapeChar="\">
				<fes:ValueReference>NISCODE</fes:ValueReference>
				<fes:Literal>4*</fes:Literal>
			</fes:PropertyIsLike>
		</fes:Filter>
	</wfs:Query>
</wfs:GetFeature>

Bij het uitvoeren van beide opties zal het antwoord de 60 gemeenten van Oost-Vlaanderen bevatten.


Filter toepassen op WFS Bedrijventerreinen

Onbebouwde en aangeboden bedrijventerreinpercelen <= 2 500 m² opvragen

  • Een eerste voorbeeld is een POST-request met OpenGIS filter encoding (OGC):
<wfs:GetFeature service="WFS" version="2.0.0" outputFormat="GML2" xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd" xmlns:gml="http://www.opengis.net/gml/3.2">
	<wfs:Query typeNames="Bedrijventerreinen:Bedrperc">
		<fes:Filter>
            <fes:And>
                <fes:PropertyIsLike wildCard="*" singleChar="." escapeChar="\">
                    <fes:ValueReference>AANGEBODEN</fes:ValueReference>
                    <fes:Literal>Aangeboden</fes:Literal>
                </fes:PropertyIsLike>
                <fes:PropertyIsLike wildCard="*" singleChar="." escapeChar="\">
                    <fes:ValueReference>BEBOUWING</fes:ValueReference>
                    <fes:Literal>Onbebouwd</fes:Literal>
                </fes:PropertyIsLike>
                <fes:PropertyIsLessThanOrEqualTo>
                    <fes:Function name="Area">
                        <fes:ValueReference>SHAPE</fes:ValueReference>
                    </fes:Function>
                    <fes:Literal>2500</fes:Literal>
                </fes:PropertyIsLessThanOrEqualTo>
            </fes:And>
		</fes:Filter>
	</wfs:Query>
</wfs:GetFeature>

Filter toepassen op WFS GRB

Gebouw aan de grond (GBG) intersect met een polygoon

  • Een eerste voorbeeld is een POST-request met OpenGIS filter encoding (OGC):
<wfs:GetFeature service="WFS" version="2.0.0" outputFormat="GML2" xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd" xmlns:gml="http://www.opengis.net/gml/3.2">
	<wfs:Query typeNames="GRB:GBG">
		<fes:Filter>
            <fes:Intersects>
                <fes:ValueReference>SHAPE</fes:ValueReference>
                <gml:Polygon srsName="EPSG:31370" srsDimension="2">
                    <gml:exterior>
                        <gml:LinearRing>
                            <gml:posList>56452 199198 56452 199531 57028 199531 57028 199198 56452 199198</gml:posList>
                        </gml:LinearRing>
                    </gml:exterior>
                </gml:Polygon>
            </fes:Intersects>
        </fes:Filter>
    </wfs:Query>
</wfs:GetFeature>

Bij het uitvoeren van beide opties zal het antwoord enkel die gebouwen aan de grond (groen) bevatten die, al dan niet volledig, met de opgegeven polygoon (paars) overlappen:


Interessante, gerelateerde topics: