Issues met integratie WMS kadastrale kaart v4

Aangezien v3 van de kadastralekaart WMS uitgefaseerd gaat worden, zijn wij alvast begonnen aan de integratie van v4 van de WMS in ons platform.

Voor een specifiek deel van onze functionaliteit (een filter op de grootte van een perceel) maken wij gebruik van een filter in combinatie met een sld_body om percelen van een bepaalde grootte in een bepaalde kleur weer te geven. Een voorbeeld van het request dat wij uitvoeren in v3 van de wms is als volgt:

https://geodata.nationaalgeoregister.nl/kadastralekaartv3/wms?styles=&filter=<Filter><And><PropertyIsGreaterThanOrEqualTo><Function name="area"><PropertyName>begrenzingperceel</PropertyName></Function><Literal>1</Literal></PropertyIsGreaterThanOrEqualTo><PropertyIsLessThanOrEqualTo><Function name="area"><PropertyName>begrenzingperceel</PropertyName></Function><Literal>500</Literal></PropertyIsLessThanOrEqualTo></And></Filter>&sld_body=<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><NamedLayer><Name>kadastralekaartv3:perceel</Name><UserStyle><IsDefault>1</IsDefault><Name>perceelgeogap</Name><Title>perceelgeogap</Title><FeatureTypeStyle><Rule><PolygonSymbolizer><Fill><CssParameter name="fill">5232245</CssParameter><CssParameter name="fill-opacity">0.5</CssParameter></Fill><Stroke><CssParameter name="stroke">666377</CssParameter><CssParameter name="stroke-width">1</CssParameter></Stroke></PolygonSymbolizer></Rule></FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>&service=WMS&request=GetMap&layers=perceel&styles=&format=image/png&transparent=true&version=1.3.0&width=256&height=256&crs=EPSG:3857&bbox=546983.3744087213,6815889.812189168,547136.2484652917,6816042.6862457385

Bij de implementatie van deze filter in v4 van de wms lopen we tegen de volgende problemen aan:

  • waar we in v3 van de wms enkel de perceel-polygonen op konden vragen (layers=perceel), lijkt dit in v4 van de wms niet langer mogelijk. Zien we dit juist?
  • de enige manier om enkel de percelen (en dus niet de labels en bebouwing) te bevragen lijkt via de laag ‘kadastralegrens’. Bij het uitvoeren van ons request op deze laag, treedt echter het volgende probleem op:

request:

https://geodata.nationaalgeoregister.nl/kadastralekaart/wms/v4_0?styles=&filter=<Filter><And><PropertyIsGreaterThanOrEqualTo><Function name="area"><PropertyName>begrenzingperceel</PropertyName></Function><Literal>1</Literal></PropertyIsGreaterThanOrEqualTo><PropertyIsLessThanOrEqualTo><Function name="area"><PropertyName>begrenzingperceel</PropertyName></Function><Literal>500</Literal></PropertyIsLessThanOrEqualTo></And></Filter>&sld_body=<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><NamedLayer><Name>kadastralegrens</Name><UserStyle><IsDefault>1</IsDefault><Name>perceelgeogap</Name><Title>perceelgeogap</Title><FeatureTypeStyle><Rule><PolygonSymbolizer><Fill><CssParameter name="fill">5232245</CssParameter><CssParameter name="fill-opacity">0.5</CssParameter></Fill><Stroke><CssParameter name="stroke">666377</CssParameter><CssParameter name="stroke-width">1</CssParameter></Stroke></PolygonSymbolizer></Rule></FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>&service=WMS&request=GetMap&layers=kadastralegrens&styles=&format=image/png&transparent=true&version=1.3.0&width=256&height=256&crs=EPSG:3857&bbox=546983.3744087213,6815889.812189168,547136.2484652917,6816042.6862457385

error:

msWMSApplyFilter(): WMS server error. Invalid or Unsupported FILTER : <Filter><And><PropertyIsGreaterThanOrEqualTo><Function name=“area”><PropertyName>begrenzingperceel</PropertyName></Function><Literal>1</Literal></PropertyIsGreaterThanOrEqualTo><PropertyIsLessThanOrEqualTo><Function name=“area”><PropertyName>begrenzingperceel</PropertyName></Function><Literal>500</Literal></PropertyIsLessThanOrEqualTo></And></Filter>

Het lijkt erop dat de ruimtelijke filter die we toepassen niet wordt ondersteund voor deze laag. Vermoedelijk komt dit doordat de laag bestaat uit lijn-geometrieën en de area-functie hierop niet werkt.

Bij het bevragen van de laag ‘Perceel’ krijgen we echter niet enkel de percelen, maar ook de labels en treedt de volgende foutmelding op:

msWMSApplyFilter: WMS server error. Wrong number of filter elements, one filter must be specified for each requested layer.

Deze foutmelding treedt onafhankelijk van het aantal filters dat we (volgens de Mapserver documentatie) meesturen in het format (filter),(),(),etc… op. We vermoeden dat dit komt door de laag Perceel binnen de group-layer Perceel dezelfde naam hebben en wij dus hierdoor niet de daadwerkelijke Perceel-laag kunnen bevragen/ bereiken. Kan dit kloppen?

Kortom: hoe kunnen wij onze filter-functionaliteit realiseren binnen de mogelijkheden van de nieuwe wms (v4)?

Bij voorbaat dank!

Het enkel renderen van de perceel polygonen is op dit moment inderdaad niet mogelijk. We zullen deze wens voorleggen aan de opdrachtgever en komen hier op terug.

Wat betreft het filteren: dit is wellicht ook opgelost zodra de percelen zonder labels opvraagbaar zijn. Dit zullen we tzt uitzoeken.

Hartelijk bedankt!

Het opvragen van enkel de perceel polygonen is inmiddels mogelijk middels de laag perceelvlak.

Hartelijk bedankt voor het toevoegen van de perceelvlak laag! Hiermee is inderdaad een groot deel van onze problemen met de integratie verholpen.

Helaas hebben we toch nog een vervolg-issue:

Voor het toepassen van een filter op perceelgrootte in onze WMS-request maken we in v3 van de dienst gebruik van de function-parameter “area” (<Function name="area">...</Function>). Deze (en alle andere “Function”-parameters) lijken in v4 van de dienst niet te zijn toegestaan.

Klopt dit? En zou dit wellicht wel mogelijk zijn?