Filter op PDOK WMS bron

Totale n00b vraag. Ik heb een applicatie genaamd GBI desktop en ik wil hier een nieuwe laag/databron toevoegen met een specifieke gemeentegrens. Ik kan de gehele gemeentegrenzen bron toevoegen van PDOK door de onderstaande URL als databron op te geven.

https://service.pdok.nl/cbs/wijkenbuurten/2023/wms/v1_0?request=GetCapabilities&service=WMS

Ik zie dan echter alle gemeentegrenzen van Nederland. Ik ben op zoek naar één specifieke grens. Hoe filter ik nu precies deze data?

Hallo Hans,

Welkom op het Geoforum!

Een WMS serveert een voorgedefinieerd plaatje (png of jpeg, meestal) en die kun je dus niet aanpassen aan je wensen.
Kan je applicatie met de WFS-versie overweg? Want die serveert geometrie, en daar kan je wel filteren op attributen.

Beetje terzijde:
i.p.v. die CBS-versie zou ik de “bestuurlijke gebieden” gebruiken ((OGC) Webservices - PDOK).
De CBS-webservice is primair bedoeld als basis voor de achterliggende demografische data.

2 likes

Dag Stefan,
jazeker, mijn applicatie kan ook overweg met WFS.
Hoe ga ik dan te werk?

Hartelijk dank.

Ik ben een stukje verder. De volgende website legt één en ander helder uit aan de hand van een BAG voorbeeld.
https://friesewoudloper.wordpress.com/2015/05/17/het-bevragen-van-een-wfs-in-de-browser-voorbeelden-aan-de-hand-van-de-bag-service/

Ik heb dankzij de uitleg de volgende URL gecreëerd:

https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0?service=WFS&version=2.0.0&request=getFeature&typeName=bestuurlijkegebieden:gemeentegebied&propertyName=gemeentegebied:naam,gemeentegebied:code

Vervolgens voor mijn gemeentegrens, dmv de gemeentecode, de URL ge-queried als volgt:

https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0?service=WFS&version=2.0.0&request=getFeature&typeName=bestuurlijkegebieden:gemeentegebied&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Egemeentegebied:code%3C/PropertyName%3E%3CLiteral%3E0203%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E

Dit moet ik dus in de applicatie zien te krijgen. Dat lukt me nog niet.

Waarom niet? Krijg je een foutmelding? Zo ja, wat is die?
Je haalt nu GML op, misschien wil je applicatie liever Json hebben? In dat geval moet je de parameter outputFormat=json toevoegen, dus dan krijg je

https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0?service=WFS&version=2.0.0&request=getFeature&outputFormat=json&typeName=bestuurlijkegebieden:gemeentegebied&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Egemeentegebied:code%3C/PropertyName%3E%3CLiteral%3E0203%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E
1 like

Nee, ik kreeg geen foutmelding. Ik zat in eerste instantie te kijken in de fatcliient van de applicatie en daar werd niks getoond. De webapp echter toont wel de geladen gegevens. Json lijkt inderdaad de applicatie nodig te hebben. Er gaat echter nog iets niet goed in de filter; alle gemeenten worden namelijk ingeladen. Zie afbeelding hieronder.
Ik kan per gemeente wel de details ophalen. Ik moet dus de filter/query aanpassen op een of andere manier.

Hmmm… dat ligt dan misschien aan je applicatie. Het filter is goed, tenminste, als ik de url gebruik die ik eerder postte, dan krijg ik maar 1 feature terug:

{
  "type": "FeatureCollection",
  "numberMatched": 1,
  "name": "Gemeentegebied",
  "crs": {
    "type": "name",
    "properties": {
      "name": "urn:ogc:def:crs:EPSG::28992"
    }
  },
  "features": [
    {
      "type": "Feature",
      "id": "gemeentegebied.0ab6c6eb-306d-4676-845c-75efd548e626",
      "properties": {
        "identificatie": "GM0203",
        "naam": "Barneveld",
        "code": "0203",
        "ligtInProvincieCode": "25",
        "ligtInProvincieNaam": "Gelderland"
      },
      "bbox": [
        160831.625,
        456923.455,
        184046.497,
        472770.76
      ],
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
<snip>
  ],
  "bbox": [
    160831.625,
    456923.455,
    184046.497,
    472770.76
  ]
}

is het resultaat dat ik terug krijg…

Maar ik ken de applicatie niet, die kapt misschien de url af, haalt eerst de capabilities op, en daarna de gegevens in de achtergond - daardoor zou het kunnen dat de url parameters verdwijnen. En dan krijg je inderdaad alle features. Dat zou dan een applicatie-dingetje zijn.

Dat passeert ook mijn gedachten. Te meer omdat wanneer je de URL opvoert in de configuratie als bron, de url wordt afgebroken voor het vraagteken zodat je de extra parameters in moeten vullen in de tweede regel. Zie afbeelding.
Dit gedrag kan ik niet voorkomen. Zodra de focus van het vak “Adres:” verdwijnt, wordt de URL afgebroken.
2024-07-10 13_27_03-GBI - Projectconfiguratie

Ah, dan ligt het inderdaad daar aan, denk ik. Probeer eens het volgende:

Adres: https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0
Extra Parameter: filter=<Filter><PropertyIsEqualTo><PropertyName>gemeentegebied:code</PropertyName><Literal>0203</Literal></PropertyIsEqualTo></Filter>
Versie: 2.0.0

Vermoedelijk moet je ook nog ergens de typeName opgeven, maar die zie ik niet in je screenshot. Maar vul bij extra parameter alleen het filter in. Vermoedelijk vult de applicatie de overige parameters zelf in, waardoor je verzoek grotendeels overschreven word met een generiek verzoek.

1 like

Helaas, dit leidt tot hetzelfde resultaat; alle gemeenten worden op kaart getoond. Wat is dat jammer zeg.
2024-07-10 14_14_14-GBIonline - Kaart - Werk - Microsoft​ Edge

Tsja. Dan zou ik het ook niet weten. Je zou nog kunnen proberen om het filter url-encoded op te geven, dus zoals dit:

filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Egemeentegebied%3Acode%3C%2FPropertyName%3E%3CLiteral%3E0203%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E

maar als dat 't ook niet doet, kun je misschien aan de leverancier vragen of zij hier iets voor weten (of dit melden als bug - want als er een veld is waarmee je een extra parameter op kan geven, dan zou dit moeten werken IMHO…)

1 like

Het effect is ook via de escape-te versie van de filter, gelijk.
Bedankt voor alle hulp. Ik neem contact op met de leverancier.

Ik heb een vermoeden waarom het filteren niet werkt.
Het is een WFS v2.0.0 request, maar het filter is een OGC v1 filter (te zien aan het gebruik van PropertyName i.p.v. ValueReference).

Een correct filter voor WFS v2 requests moet ook een OGC v2 filter zijn:

<Filter xmlns="http://www.opengis.net/fes/2.0"><PropertyIsEqualTo><ValueReference>gemeentegebied:code</ValueReference><Literal>0203</Literal></PropertyIsEqualTo></Filter>

Dit request zou dus moeten werken:

https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bestuurlijkegebieden:Gemeentegebied&outputFormat=application/json&filter=%3CFilter%20xmlns%3D%22http%3A%2F%2Fwww.opengis.net%2Ffes%2F2.0%22%3E%3CPropertyIsEqualTo%3E%3CValueReference%3Egemeentegebied%3Acode%3C%2FValueReference%3E%3CLiteral%3E0203%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E
1 like

Dat ligt dan aan de applicatie, want de url die ik eerder postte levert gewoon netjes 1 enkele geometrie, als ik die in mijn browser uitvoer, net zoals de versie die jij post. Dus aan de serverzijde is dat geen probleem. Dit is die URL, waarbij in het filter PropertyName staat:

https://service.pdok.nl/kadaster/bestuurlijkegebieden/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bestuurlijkegebieden:Gemeentegebied&outputFormat=application/json&filter=<Filter xmlns="http://www.opengis.net/fes/2.0"><PropertyIsEqualTo><ValueReference>gemeentegebied:code</ValueReference><Literal>0203</Literal></PropertyIsEqualTo></Filter>
1 like

Bedankt voor je correctie/voorstel @ajkopinga. Ook naar deze vorm van filter luistert de applicatie GBI niet. Ik zie nog steeds hetzelfde, alle gemeenten van NL. Alsof er helemaal niet naar de extra parameters (de filter) wordt gekeken.

Parallel aan de vraag aan de leverancier. Is het ook mogelijk om de uitkomst van de filter niet als JSON maar als afbeelding/shape/raster oid op te slaan?

De gedachte is dat ik dan geautomatiseerd dit soort bestanden (van verschillende pdok endpoints en filters) periodiek kan aanmaken en koppelen met de applicatie.

@sbjager Verhip. Blijkbaar gaat de WFS-service relaxt om met de filterparameter.

@hans_gembar De WFS service levert alleen GML of GeoJSON als output. Ik zie geen shapefile als mogelijkheid staan. Voor afbeeldingen ben je aangewezen op de WMS service.

1 like

Afhankelijk van wat voor andere software je nog tot je beschikking hebt, zijn de meeste gegevens van PDOK ook te downloaden. Je zou dat dus kunnen doen met QGis bijvoorbeeld, maar FME zou ook kunnen. Of met behulp van Python en Gdal een scriptje schrijven, zou hier ook een oplossing voor zijn.
Maar dat is dus erg afhankelijk van wat je, naast die GBI applicatie (en wat die allemaal kan!) verder nog tot je beschikking hebt.

Misschien kun je het een beetje hacken door de geojson via je browser op te halen, op een website te zetten en dan in GBI naar die lokatie verwijzen alsof het een WFS-server is. Leuk om te proberen als je tijd hebt maar anders zou ik dit gewoon bij de helpdesk van leverancier van GBI leggen.

1 like

Als je GeoServer (of iets vergelijkbaars) hebt draaien, kun je daar de WFS inlezen en opnieuw aanbieden (bijvoorbeeld gefilterd op alleen je eigen gemeente, en desgewenst als WMS). Langs deze weg kun je ook zelf de styling (SLD) verzorgen.
Je benadert dan de externe WFS via je interne GeoServer (of iets vergelijkbaars), en kunt onderweg van alles aanpassen.
Natuurlijk vergt dit wel het nodige knutselwerk.

1 like