GML converteren met FME

Goedemorgen,

Net een groep “Geo-specialisten” opgericht in de DSO Community, maar deze vraag lijkt me hier toch meer op zijn plek.

Een collega vraagt mij een GML, gedownload van Ruimtelijke Plannen, om te zetten naar een Esri-formaat, zodat hij het kan combineren met onze eigen data.

Liefst gebruik ik daarvoor ArcGIS Desktop (ArcMap, ArcGIS Pro) of FME.
(Aan Python begin ik niet meer, code kloppen is zó 2016…)

Ik kom een heel eind, maar het is me nog niet gelukt om een standaard FME-workspace te bouwen. Elke keer opnieuw zoek ik uit wat er in de GML zit en hoe dat met elkaar samenhangt. Dat is overigens ook een gebrek aan ervaring, maar ik krijg steeds meer vragen hierover.

Bij mijn laatste poging krijg ik bijvoorbeeld wel 14 polygonen en 14 punten uit de featureMember “Maatvoering”, maar in de FileGeodatabase waarin ik ze schrijf blijkt de feature class met punten dan toch leeg…

Heeft iemand hiervoor al een mooie oplossing in FME?

Groet,
Ferdinand.

Ik vind dat de documentatie/uitgigfte van data op dit gebied echt heel erg te kort schiet, maar ik zal die discussie niet weer starten.

Wat heb je nodig uit ruimtelijke plannen? Voor enkel en dubbelbestemmingen heb ik sowieso FME (2023) modellen klaar staan, die wil ik je best sturen.

ik heb altijd begrepen dat GML weliswaar leesbaar is, maar geen standaard-taal. De ontvangende applicatie kan maar moeilijk raden of het in het ‘nederlands’, ‘engels’ of ‘duits’ is geschreven om er chocola van te maken.
Op een of andere manier lukt het QGIS wel om GML bestanden in te laden en een kaart met gegevens te tonen. ArcGIS lukt het niet.
Ofwel, de workaround is om de bestanden eerst in QGIS inladen en dan als shape opslaan om in Arcgis in te laden.

@Hashtaggeodata voorziet je FME2023 model er ook in om alleen de bovenliggende, meest actuele, Enkelbestemming te tonen? Een ‘geconsolideerd bestemmingsplan’ noemen ze dat.

Ik heb me toch tot Python gewend om dat voor mekaar te krijgen (wist niet dat code kloppen zo 2016 was :slight_smile: ). Maar dat is alweer een tijdje terug en alleen voor een klein pilot-gebied. De bedoeling is dat ik in januari met een volgend gebied aan de slag ga. Mijn doel is dan om het script opnieuw onder de loep te nemen en zoveel mogelijk hard-coded variabelen geautomatiseerd te laten invullen. Als dat lukt kan ik de pythonscripts wellicht breder inzetten.

Hier zie je het resultaat (geconsolideerd bestemmingsplan) van mijn pythonscripts. Is dat wat je nodig hebt?

https://www.arcgis.com/apps/mapviewer/index.html?panel=gallery&suggestField=true&layers=87624c2458084cc88085c39fa9786018

Ja, daar voldoet het model in en dat was een aardige puzzel. Een puzzel die met goede documentatie voorkomen had kunnen worden :wink: Dat is helaas bestede tijd die je als ondernemer niet kan declareren.

(Qgis kan de GML inderdaad lezen, maar kan daar natuurlijk niet zelf de meest actuele bestemming uit halen)

Het is natuurlijk ook een beetje luiheid om geen code te willen kloppen, maar nu ik gewend ben aan “visueel programmeren” met FME zie ik niet waarom ik nog cryptische lappen platte tekst zou willen produceren. Een FME-workspace is zoveel “leesbaarder” voor een willekeurige collega!

Verder probeer ik te werken binnen de beperkingen die mijn ICT-organisatie stelt (niet cynisch bedoeld, daar zijn goede redenen voor). Dat betekent dat ik, om QGIS te kunnen gebruiken, buiten mijn organisatie moet gaan werken. En data heen en weer moet trekken (inderdaad een workaround). De Esri-suite en FME zijn hier de standaard, vooralsnog.

Tot zover de context. @Hashtaggeodata, wat ik nodig heb weet ik niet van tevoren. Mijn collega misschien wel, maar dat is steeds iemand anders. Het liefst heb ik een model dat elke GML die voldoet aan IMRO, of IMOP, IMOW volledig kan uitlezen. (Het mag best voor iedere standaard een apart model zijn.)

Als het goed is zorgt het schema-bestand waarnaar wordt verwezen (XSD) dat er chocola gemaakt kan worden van de GML. QGIS lukt dat vrij goed zonder hulp, heb ik al eens ervaren. Met FME moet ik het schema-bestand downloaden en aanwijzen, dan kom ik stap voor stap verder. Maar het uitvogelen van de relaties tussen de verschillende featureMembers blijft lastig.

De Enkelbestemming ziet er niet erg ingewikkeld uit; met FME is die wel snel om te zetten. Bij nadere bestudering zitten er wel attributen in die niet netjes vertaald zijn, zoals het veld “Identificatie” (veldnaam wel goed geraden door FME). Daar zit dit in als waarde:

imro:identificatie
imro:NEN3610ID
imro:namespaceNL.IMRO</imro:namespace>
imro:lokaalID90462390689a469f862be2164f1e9944</imro:lokaalID>
</imro:NEN3610ID>
</imro:identificatie>

Meer moeite kost de relatie tussen maatvoering, bestemmingsvlak, symboolInfo en symboolInfoPositie. Misschien dit maar eens bestuderen: Informatiemodel Ruimtelijke Ordening 2012 (geonovum.nl)

Maar als jij dat al eens uitgevogeld hebt, @Hashtaggeodata, dan maak ik graag gebruik van je model voor de Enkelbestemming, als voorbeeld.

Onder elk gml-bestand ligt een datamodel dat beschrijft hoe de data in elkaar zit.

Logischerwijs gebruiken we voor het uitwisselen van gegevens over ruimtelijke ordening een ander datamodel (IMRO) dan bij het uitwisselen van gegevens over grootschalige topografie (IMBGT).

Daarom is er niet 1 “catch all” omzetting die van gml bijvoorbeeld shapefiles maakt. Bij het goed omzetten van data is het belangrijk rekening te houden met de opbouw daarvan zoals beschreven in het datamodel. Zo’n datamodel is er meestal in computer-leesbare versie (xsd soms aangevuld met schematron) en een mesn leesbare versie (bijvoorbeeld de RO-standaarden documenten).

Bij QGIS (eigenlijk OGR de onderliggende bibliotheek die de data voor QGIS inleest) heeft men een ander, verrassend vruchtbaar, pad gekozen. Eerst wordt het bestand geheel doorgelezen en geanalyseerd (er ontstaat dan een .gfs bestand), en daarna pas ingelezen. Dit gaat vaak verrassend goed en levert een bruikbaar bestemmingsplan op.

In andere gevallen gaat dat minder goed (BGT) en is er een speciale plugin gemaakt die QGIS helpt de data goed in te lezen.

Dat alles laat onverlet dat er ook veel kennis over het datamodel (en vaak ook domeinkennis) nodig is om de data daadwerkelijk goed te kunnen gebruiken.

In de praktijk zie ik dat het met ESRI software vaak heel moeilijk (tot vrijwel onmogelijk) is om de open geodata die de overheid langs de verplichte standaarden (formum standaardisatie) naar buiten brengt op een goede manier in te lezen. Daarom heeft ESRI-Nederland een dataplatform waar zulke data in direct inleesbare vorm te verkrijgen is. Helaas komt het nogal eens voor dat er dan wat aan gewijzigd is. En verder haal je de data dan niet bij de bron, en persoonlijk vindt ik dat voor basisregistraties een zeer belangrijk punt.

Wat nu te doen met die bestemmingsplannen?

Ik adviseer om te focussen op de gegevens die je echt nodig hebt en de rest even te negeren. Vervolgens in het Informatiemodel RO 2012 opzoeken hoe dit gemodelleerd is en dat proberen terug te vinden in de data (gewoon kijken in de browser of een goede tekst editor maakt al heel veel duidelijk).
Daarna converteren, het liefst met een tool waarvan je weet dat ie het goed doet (een FME workbench van iemand anders, QGIS of OGR ofzo).

En dan de belangrijkste stap: controleren of er data is kwijtgeraakt of samengenomen op een manier die je op het verkeerde been zet.
En dan is er in het geval van bestemmingsplannen NOG een belangrijke stap: het lezen van het bestemmingsplan zelf. Niet alle relevante gegevens (denk aan bouwhoogtes, bebouwingspercentages, meetvoorschriften, etc) zijn in de .gml opgenomen. Grote delen kunnen geregeld zijn in de voorschriften (en welke delen dat zijn verschilt per bestemmingsplan).

Overigens kent QGIS de ruimtelijkeplannen plugin waarmee oa bestemmingsplannen direct uit de landelijke voorziening worden getoond op basis van WFS. Dan kun je veel van bovenstaande stappen overslaan (maar zeker niet het lezen van het bestemmingsplan).
Overigens zou zoiets ook heel gemakkelijk ook voor het ESRI platform gemaakt kunnen worden; de code is vrij beschikbaar, klein van omvang en niet ingewikkeld.

1 like

Ik heb er moeite me dat er zo veel energie gestoken moet worden in het uitlezen van 1 dataset. Veel van ons werk bestaat uit het combineren van meerdere datasets. Denk aan combinaties van CBS-data, de BAG, de BGT, satellietfoto’s, ruimtelijke plannen etc… Als je bijvoobeeld kijkt naar de BAG: Daar is gelukkig eindelijk een geopackage voor beschikbaar die voor 99% van het gebruik prima voldoet, pas daarmee is de BAG nu wat mij betreft echt open data zoals open data bedoeld is.

Wat de ruimtelijke plannen betreft zat voor ons (voor zover ik me kan herinneren, het is alweer even geleden) voor al niet goed te bepalen wat nu het actuele en geldende plan is (zoals het voor de BAG onduidelijk was (is) wat de huidige bebouwing is, de logica dat daar alleen de kolommen valid from en valid till voor gebruikt kunnen worden blijkt niet te kloppen. In de beschrijving is niet opgenomen welke logica dan wel gehanteerd moet worden. Hiervoor heb je diepgaande kennis van de BAG voor nodig), dat is niet uit het datamodel te halen. We hebben er daarom voor gekozen om de WMS ‘na te bouwen’, met als kanttekening dat ruimtelijke plannen niet wilde aangeven hoe de WMS is opgebouwd en ook niet wilde toezeggen dat de WMS de juiste plannen laat zien.

Mee eens. GML mag dan wel een heel open formaat zijn, elke registratie verzint toch telkens weer zijn/haar eigen smaakje. En dan krijg je dus dat GML != GML…

Voor mij geld tegenwoordig dat ik GML niet meer gebruik in FME, ik neem in dat soort gevallen altijd de meest basale XML Reader - maar vervolgens ben je inderdaad wel dagen kwijt aan het uitzoeken wat precies wat is…

En die dagen kan je, zeker als kleine partij, niet doorberekenen. De grote ingenieursbureaus hebben hier vast iemand die hierop zit om het voor iedereen te ontsluiten, idem voor de regionale overheden en eventueel gemeentes. Maar dan zitter er dus op bij tientallen (zo niet meer) partijen mensen hier per dataset meerdere dagen in te steken. het zou heel mooi zijn als dit centraal zou kunnen (voor de meest gebruikelijke doeleinden van de dataset) zoals ook uiteindelijk voor de BAG gedaan is. Daarmee wordt uiteindelijk ook een hoop publieksgeld bespaard.

Inderdaad! Da’s precies de bedoeling. Het is nu eenmaal iets anders om ruimtelijke ordening informatie goed uit te wisselen dan adresinformatie.
Dat kan niet in hetzelfde datamodel. Tenminste niet zonder het nog ingewikkelder te maken, en nog moeilijker beheerbaar.

Dat probleem zit hem vooral in de wetgeving. De Wro zit zo in elkaar, dat er een stapeling van regelingen ontstaat, waarbij de gebruiker alle regelingen moet lezen om te weten wat er geldend en van toepassing is.

In de website van ruimtelijkeplannen.nl is daarom een keuzehulp gemaakt die hierbij ongeloofelijk behulpzaam is. Een ook deze is via een API ontsloten (helaas wel slecht gedocumenteerd, maar niet heel moeilijk om uit te pluizen).

ruimtelijkeplannen hanteert een soort “meest recente plan boven” algoritme. Dat is helaas niet sluitend (om bovenbeschreven redenen) en wat mij betreft ook terecht dat dit niet vrijgegeven wordt. We willen niet nog meer plekken waar de verkeerde info wordt gegeven.

1 like

Klopt, helemaal mee eens. Maar: er zitten wel overeenkomsten tussen die data, namelijk dat het om een ruimtelijk object (al dan niet virtueel) met verschillende attributen gaat.
En daar gaat het al mis met GML. Als iedereen alles in GeoJson of in een GeoPackage zou leveren, zou al 95% schelen, want dat slaat veel meer plat - en is dus veel makkelijker te verwerken.

2 likes

Bedankt voor je toelichting. Dat is ook hoe we het in FME verwerkt hebben, maar daar hebben we proefondervindelijk achter moeten komen, erg hinderlijk werk (en door onnauwkeurigheden in geometriën ook niet feilloos toepasbaar). Voor ons was alleen het type bestemming (woon/aggrarisch etc…) voldoende en hoefden we in die fase niet meer informatie te hebben. De inspanning die daarvoor geleverd moet worden staat dan niet in verhouding.

Naast een goede api-documentatie ontbreekt bij het overgrote merendeel van de datasets een goede en complete beschrijving waarin in dit geval ook het door jou genoemde opgenomen zou moeten zijn. Ik ben van mening dat je data zonder geode databeschrijving niet zou moeten gebruiken, maar helaas is dat in de praktijk gewoon niet haalbaar.

Op basis van mijn beperkte kennis zou ik zeggen dat het bestandsformaat GML net zo iets is als het Excel-formaat. De inhoud (het datamodel) daarvan kan ook nogal variëren. De definitie van dat datamodel staat in het XSD-bestand. De manier waarop XSD en GML worden gedefinieerd is wel voor elke GML hetzelfde.

Wat ik ook schreef in een persoonlijk bericht: de filosofie achter de open (overheids-)data is volgens mij dat “de markt” oplossingen gaat bieden. Dat zou betekenen dat iemand FME-modellen gaat verkopen die IMRO-gml kunnen converteren, bijvoorbeeld. Dan hoeft niet iedereen zelf het wiel uit te vinden.

Platslaan is mooi, maar leidt vaak tot dataverlies.

In mijn beleving leest ogr of QGIS vrijwel elk gml-bestand dat platgeslagen kan worden zonder dataverlies probleemloos en correct in.

Waar het in mijn beleving misgaat is dat er veel datamodellen worden ontwikkeld waar (imho zonder hele goede redenen) fraaie constructie worden bedacht, waarvan je 100% zeker weet dat ze niet in een GIS ingelezen kunnen worden. Ik vind het openbare ruimtelabel uit de BGT daarvan een mooi voorbeeld.

Als het datamodel eenmaal zo is ontwikkeld maakt het niet meer uit in welk bestandsformaat je het gaat uitschrijven: er is een probleem!

Overigens is het kaartlaag georiënteerde datamodel zoals we dat uit klassiek GIS kennen ook niet zaligmakend. Als je daar de BGT in gaat ontsluiten krijg je 100-en kaartlagen, waarbij de vlak-, lijn- en puntinformatie die bij 1 object hoort over meerdere kaartlagen verspreid raakt.

1 like

Mooi verwoord weer Marco.

Volgens mij is het hele idee achter open data dat het voor iedereen toegankelijk moet zijn zonder super-specialistische kennis en zonder betaalde software. Voor dit soort datasets mag dat dan een utopie zijn, er zou wel gestreefd moeten worden naar het zo dicht mogelijk benaderen daarvan.

1 like

Niet noodzakelijkerwijs. Mijn opmerking over het platslaan sloeg meer hier

op. De “hele goede redenen” is vaak omdat men alles wil, zonder stil te staan bij praktisch gebruik, en omdat iedereen er altijd iets over te zeggen wil hebben, waarbij ook vaak vergeten word dat verschillende mensen op verschillende manieren naar 1 en hetzelfde object kijken. Dus in plaats van alleen de meest basic data vast te leggen en te delen, word geprobeerd om alles er in te proppen - met als gevolg zaken als openbare ruimte labels.

Helemaal mee eens: ik had het ook over ruimtelijke objecten, niet over kaartlagen :wink:
Ik word ook nog steeds moe van het feit dat veel GIS-sen nog steeds niet goed om kunnen gaan met verschillende soorten geometrieën in 1 object, of 1 object met meerdere geometrieën: dan word er maar een nieuwe ‘laag’ van gemaakt. Dat zou vandaag de dag toch beter moeten kunnen, lijkt mij…

OpenJump doet dit al heeeeel lang goed. In PostGIS gaat het ook prima.

QGIS kent een hybride model, waarbij je dezelfde dataset 2 kunt inladen, bijvoorbeeld 1 keer als lijnen en 1 keer als vlakken. Selecteren in de kaart levert dan een selectie op op beide (maar dat kun je dan weer niet zien).

Die ken ik niet…

Da’s een database, geen GIS op de manier waarop ik het bedoelde. Alle (grotere) RDBMS’sen kunnen gemakkelijk meerdere kolommen met als datatype geometrie aan.