WMS filteren met OR en propertyisnull werkt niet in BAG v1.1

Ik wil graag kunnen filteren op lege of NULL waarden voor b.v. gebruiksdoel.
Bij WFS werkt dat prima maar niet bij de WMS.

Deze request filtert niets uit en laat alles zien:

https://geodata.nationaalgeoregister.nl/bag/wms/v1_1?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=pand&TILED=false&STYLES=bag%3Apand_gefilterd&tilesorigin=134096.51153754673%2C443558.49233636656&FILTER=<Filter><Or><PropertyIsNull><PropertyName>gebruiksdoel</PropertyName></PropertyIsNull><PropertyIsEqualTo><PropertyName>gebruiksdoel</PropertyName><Literal></Literal></PropertyIsEqualTo></Or></Filter>&WIDTH=256&HEIGHT=256&CRS=EPSG%3A28992&BBOX=134073.92000000004%2C443552.32%2C134087.36000000004%2C443565.76

Deze request filter wel:

https://geodata.nationaalgeoregister.nl/bag/wms/v1_1?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=pand&TILED=false&STYLES=bag%3Apand_gefilterd&tilesorigin=134096.51153754673%2C443558.49233636656&FILTER=<Filter><PropertyIsEqualTo><PropertyName>gebruiksdoel</PropertyName><Literal></Literal></PropertyIsEqualTo></Filter>&WIDTH=256&HEIGHT=256&CRS=EPSG%3A28992&BBOX=134073.92000000004%2C443552.32%2C134087.36000000004%2C443565.76

M.a.w. dit filter werkt niet:

<Filter>
  <Or>
    <PropertyIsNull>
       <PropertyName>gebruiksdoel</PropertyName>
    </PropertyIsNull>
    <PropertyIsEqualTo>
     <PropertyName>gebruiksdoel</PropertyName>
        <Literal></Literal>
     </PropertyIsEqualTo>
  </Or>
</Filter>

En deze wel:

<Filter>
  <PropertyIsEqualTo>
    <PropertyName>gebruiksdoel</PropertyName>
    <Literal></Literal>
  </PropertyIsEqualTo>
</Filter>

Hoi @rli

Een paar dingen die hierbij naar boven komen:

  1. Zoals je weet zijn we WMS en WFS van elkaar aan het afsplitsten, wat mogelijk dit “gedrag” veroorzaakt…

  2. Punt is wel dat FILTER= geen WMS parameter is maar een WFS parameter, dus dat dit überhaupt werkt is natuurlijk iets wat niet zou moeten werken.
    Maar wij weten (net zo als ‘jullie’) dat dit door zowel Geoserver and Mapserver wel toegelaten wordt… maar om op deze functionaliteit te leunen voor productie systemen… zou ik niet doen
    Zover ik weet zijn de OGC filters ook niet “officieel” supported door Geoserver/Mapserver, maar hebben ze ‘vendor’ specifieke implementaties hiervoor (iets waar we vanaf willen, dus garantie tot de deur…)

  1. Iets meer data inhoudelijk… de vraag waarom beide varianten?
    Ik zou verwachten als er geen gebruiksdoel is dat ‘t NULL is en niet een combinatie van NULL en text/string met een lengte van 0. Is dit wat jullie wel zien (data inhoudelijk)? Dan lijkt het mij een vraag richting de LV-BAG om daar misschien een ‘officiele’ uitspraak over te doen NULL of length(’’) == 0. Zodat wij het ‘correct’/uniform naarbuiten kunnen ontsluiten.

Dag Wouter,

  1. Ai, ik dacht dat dat Filter-parameter ook met WMS gebruikt kon worden.
    Dit heb je zelf ook aangegeven in topic Cql_filters op https://geodata.nationaalgeoregister.nl/kadastralekaartv3/wms? lijken genegeerd te worden - BRK - Geoforum

Ik (en ik denk veel anderen ook) zouden dat wel willen. Zie de topic.

Als je het via de WFS moet doen dan creeert dat performance problemen omdat je potentieel duizenden features moet binnenhalen om te renderen (bv als je filter op woonfunctie). Dat kan veel sneller aan de serverkant.

  1. Ik gebruik de OR-operator en niet de AND. Ik test dus niet op de combinatie maar op 1 van de 2.
    In Oracle database is er geen verschil tussen een lege string en een NULL waarde maar in Postgresql wel!
    Omdat we generieke code maken testen we dus op allebei.

Ook ik leer nieuwe dingen

Dus kort door de bocht: “je maakt van jouw probleem, ons probleem door dit naar ons toe te schuiven?” :smiley:
Want dat het sneller gaat aan de serverkant is natuurlijk een aannamen… gezien jullie niet weten wat er aan servers draaien en wat mogelijk de limit is.

Dat is dus mijn punt, dergelijk technische ‘aspecten’ zouden niet door een koppelvlak (als WFS/WMS/… ) mogen doorlekken. En dat ‘partijen’ zoals jullie hier ‘omheen’ werken vind ik (persoonlijk) jammer van de inspanning. M.a.w. dit zou niet op technisch niveau moeten op worden gelost maar in het datamodel van de betreffende registratie/dataset. Daar zou ‘naar’ mijn mening ‘iedereen’ beter van worden in plaats dat iedere gebruiker nu hier specifieke puntoplossingen voor zou moeten bouwen.