Ik ben de laatste tijd bezig geweest om de BGT voor te verwerken tot een dataset die importeerbaar is in OSM. Ik wil gewoon eens delen wat er allemaal bij komt kijken om de BGT voorverwerkt te krijgen. Mochten jullie vragen of feedback hebben dan hoor ik dat graag.
Misschien als eerste, Ik laat die voorverwerkte laag in JOSM in. Vervolgens controleer en kopieer ik ieder vlak handmatig voordat ik de geometrie overkopieer naar de OSM laag. Daar pas ik het waar nodig ook nog aan. Ik gebruik het nu dus om mijn mapwerk te ondersteunen en ik importeer niet blind zeg maar.
Nu naar de BGT. De BGT heeft verschillende lagen (zoals panden, begroeidterreindeel, waterdeel, ondersteunend waterdeel etc). Ik ben gewoon al die lagen een voor een gaan toevoegen aan het model. Een deel van de gegevens kunnen gewoon qua attributen gemapt worden. Bijv begroeidterreindeel grasland overig
→ landuse=grass + landcover=grass
. Bij de bossen geeft de BGT mooi aan of het naaldbomen, loofbomen of een mix zijn. Naar koppel ik dan bijv de tags natural=wood, landcover=trees, leaf_type=*, leaf_cycle=*
.
In onderstaande tabel heb ik een aantal van die simpele mappings gezet.
BGT laag | BGT fysiekvoorkomen | Plus fysiekvoorkomen | BGT Type | BGT plus type | OSM tags |
---|---|---|---|---|---|
Begroeidterreindeel | grasland overig | - | - | - | landuse=grass + landcover=grass |
Begroeidterreindeel | gemengd bos | - | - | - | natural=wood + leaf_type=mixed |
Begroeidterreindeel | loofbos | - | - | - | natural=wood + leaf_type=broadleaved + leaf_cycle=decidious |
Begroeidterreindeel | naaldbos | - | - | - | natural=wood + leaf_type=needleleaved + leaf_cycle=evergreen |
Begroeidterreindeel | groenvoorziening | bosplantsoen | - | - | natural=wood |
Begroeidterreindeel | fruitteelt | - | - | - | landuse=orchard |
Begroeidterreindeel | struiken | - | - | - | natural=scrub |
Begroeidterreindeel | groenvoorziening | heesters OF waardeOnbekend OF bodembedekkers | - | - | natural=shrubbery |
Begroeidterreindeel | boomteelt | - | - | - | landuse=plant_nursery |
Begroeidterreindeel | zand | - | - | - | natural=sand + landcover=sand |
Begroeidterreindeel | groenvoorziening | gras- en kruidachtigen | - | - | landuse=grass + landcover=grass |
Begroeidterreindeel | moeras | - | - | - | natural=wetland + wetland=swamp |
Waterdeel | - | - | alles | - | natural=water |
Waterdeel | - | - | waterloop | sloot | natural=water +water=ditch |
Waterdeel | - | - | waterloop | greppel, droge sloot | natural=water +water=ditch + intermittent=yes |
Wegdeel | - | - | parkeervlak | - | amenity=parking + parking=street_side |
Wegdeel | - | - | spoorbaan | - | landuse=railway |
Overige aandachtspunten
1. Landbouw
De landbouw vlakken zijn in de BGT vaak niet goed geclassificeerd. Daarom heb ik de BRP gewaspercelen gepakt en deze met de BGT landbouw vlakken gecombineerd. Ik hou dan de grens van de BGT aan (anders sluiten mijn andere vlakken niet meer aan) maar ik deel die landbouw vlakken dan op volgens de BRP.
2. Ondersteunend waterdeel
De BGT tekent overal oevers. Wat ik eerst doe ik kijken of een oever aan een stuk struikgewas of bos aansluit. Dan neem ik die landuse of natural waarde over. DIt om te voorkomen dat er een rare grasstrook naast waterlopen in bijvoorbeeld bossen komt. De rest classificeer ik als gras (voor nu)
3. Puntdichtheid BGT
De BGT heeft soms een erg dichte puntdichtheid in de BGT zitten. Ik gooi er een simplificeer algorithme overheen die de punten gaat uitdunnen met een minimale impact op de geometrie. Deze stap duurt net zo lang om uit te rekenen als alle voorgaande stappen omdat dit algorithme dit wel erg goed doet.
4. Niet geclassificeerde vlakken
De BGT is vlakdekkend. Er zijn dus ook vlakken die gewoon niet volgens het OSM model geclassificeerd kunnen worden, zeker niet als vlak (soms wel als lijn). Dit resulteert soms in gaten in je vlakken (met multipolygonen als gevolg). Bij mijn handmatige imports verwijder ik die weer. Maar dit automatisch oplossen is lastig goed te doen).
Sommige vlakken heb ik wel geclassificeerd maar die zijn twijfelachtige in sommige situaties. BIjvoorbeeld bij bgt_fysiekvoorkomen=groenvoorziening + Plus_fysiekvoorkomen=WaardeOnbekend OF bodembedekkers is me opgevallen dat ik dergelijke vlakken vaak als natural=shrubbery
of zelfs als natural=wood
zou mappen. Het model koppelt er nu natural=shrubbery
aan maar dit is dus een van de gevallen waar handmatige interpretatie nodig is.
5. BGT geometrie fouten
Daarnaast bevast de BGT geregeld geometrie fouten. Op onderstaande afbeelding gemaakt in JOSM zie je dat er tussen de grasvlakken kleine gaten zaten. Toen ik alle grasvlakken heb samengevoegd was deze multipolygoon het resultaat. In het script heb ik dit nu opgelost door vlakken met een oppervlakte < 0,5m2 te verwijderen. Maar goed, dat lost niet alles op
Daarnaast moet ik voor ik de BGT exporeer eerst een fix geometries er over heen gooien. Dan gaat die geometrie fouten zoals self intersects verwijderen.
6. BAG panden vs BGT panden
De BGT bevat ook panden alleen die matchen niet altijd met de BAG. Bij de imports die ik nu dus heb gedaan heb ik geregeld de geometrie van de BGT moeten aanpassen zodat die niet overlappen met de BAG panden die bij ons leidend zijn.
7. Residential landuse vlakken
Ik doe geregeld het landgebruik ook gedetailleerd mappen. Wat ik heb gedaan is de BGT onbegroeidterreindeel > erf + de BGT panden gepakt en die geometries samengevoegd. Dan krijg je bijvoorbeeld onderstaande. Bovenstaand punt 6 is van toepassing dus soms zijn aanpassingen maar dit geeft wel een mooie aanzet, zeker ook in buitengebieden. Ik heb nog niet de moeite genoemen om deze vlakken op te knippen naar gebruik (nu krijgen alle vlakken gewoon landuse=residential
.
8. Parkeervakken
De BGT slaat ook parkeerplaatsen op. Alleen, er is maar 1 optie voor de BGT om een parkeervlak aan te geven. Die optie wordt gebruikt gebruik, voor wat wij in OSM zouden taggen als grote parkeerplaatsen, street_side parking en parking_spaces. Voor nu heb ik gewoon gezegd, alle parkeervlakken zijn amenity=parking + parking=street_side
. Mogelijk dat ik in de toekomst obv grote van het vlak een ander voorstel kan doen of iets street_side parking is of een individuele parkeerplaats.
9. Importeren
Zoals al gezegd, ik gebruik dit bestand om mijn map werkzaamheden te ondersteunen. Er is ook wel vaker gesproken over grootschalige BGT imports. Ik moet zeggen, daar komt veel bij kijken. Het beste kun je dan een gebied (met 3dShapes) het beste leeggooien en de BGT importeren. Maar, met wat handmatige interpretatie kan het wel prima ondersteunen bij het updaten van een gebied.
Daarnaast, is het ook nog het principe van geschiedenis behouden. Als het 3dShapes zijn dan geef ik in dit geval niet om de geschiedenis. In andere gevallen probeer ik de geschiedenis te behouden.
Daarnaast kan het zijn dan een gegeven vlak al gedetaileerder is gemapt (qua attributen). Dan moet je ook handmatig dingen oplossen om het harde werk toch te behouden maar de geometrie te updaten.
10. Overig
Ik heb het model in QGIS gemaakt (met Python). Het zijn vooral een hoop tools achter elkaar plaatsen die velden berekenen, met uitzondering van bovenstaande punten.
Hieronder wat voorbeelden van changesets waar ik de BGT als importbron heb gebruikt:
- achavi - Augmented OSM Change Viewer [attic] Hier heb ik de geschiedenis behouden (waren 3dshapes of van me zelf).
- achavi - Augmented OSM Change Viewer [attic] Hier veel groendetaillering geimporteerd. Bij de parkeervakken moest ik soms al eerder aangevulde details even goed combineren
9 posts - 5 participants
Ce sujet de discussion accompagne la publication sur https://community.openstreetmap.org/t/voorverwerken-bgt-voor-import-in-osm/105109