Functioneel landgebruik produceren
Het productiepakket bevat scripts/functioneel_landgebruik.py voor het maken
van een landelijk raster met functionele landgebruiksklassen. De betekenis van
de klassen, bronnen en bewerkingen staat bij
Functioneel landgebruik.
Vooraf
De productie haalt alle standaardbronnen op: BAG, BGT, BRP, TOP10NL, LIWO,
HYDAMO, Waterketen DAMO en de beoordeelde OSM-drinkwaterlocaties. BGT-vlakken en
de LIWO-selectie worden automatisch voorbereid. Bestaande bronnen worden
hergebruikt; zie de gedeelde opties voor vernieuwen en offline gebruik.
Een expliciete --bgt-path gebruikt het opgegeven voorbereide bestand.
Alle meldingen, inclusief worker-details en bronvoorbereiding, staan in
productie.log van de hoofdproductie. De terminal toont de hoofdvoortgang.
Losse Python-bewerkingen blijven hun expliciete sources-object ondersteunen;
een ontbrekende optionele bron in zo'n object kan bewust worden overgeslagen.
Voor de BAG-koppeling maakt de verwerking eenmalig bag-light.pand_vbo.sqlite
naast bag-light.gpkg. Dit is een afgeleid zoekbestand; de oorspronkelijke BAG
blijft ongewijzigd. De bronmap moet hiervoor schrijfbaar zijn. Bij landelijke
productie wordt dit bestand vóór het starten van de workers opgebouwd, met
voortgang in de log. Daarna hergebruiken alle workers dezelfde index.
Een gewijzigde bestandsgrootte of wijzigingsdatum van de BAG leidt tot opnieuw
opbouwen. Bij handmatige vervanging met behoud van beide kenmerken moet je
het zoekbestand verwijderen. Het mag opnieuw worden gemaakt en hoort niet in Git.
De index versnelt het vinden van verblijfsobjecten per pand. De functiekeuze, oppervlakteberekening en omgang met gedeelde verblijfsobjecten blijven gelijk.
Volg Installatie en controleer het productiepakket met
pixi run --locked controleer. Gegevens komen standaard onder ./data in de
projectfolder; zie Opslag van gegevens voor een andere locatie.
Dit voorbeeld verwerkt een landelijk tegelrooster. Downloads en berekeningen
kunnen veel schijfruimte en tijd vragen. Controleer de opties met --help en de functionele beschrijving voordat u de productie start.
Starten
Nieuwe scriptproducties schrijven naast de klassen en broncodes ook
tiles/<tile_id>/gebouw_ids.tif, tiles/<tile_id>/gebouwen.gpkg,
gebouw_index.sqlite in de runmap en
functioneel_landgebruik_gebouw_ids.vrt. Dit zijn inputs voor
DEM-productie. De library-optie write_building_ids=True schakelt
dezelfde uitvoer in bij een eigen tegelworkflow. Oudere tegels zonder deze
companions worden daarvoor niet stilzwijgend hergebruikt.
building_context_m bepaalt de extra voorbereide gebouwomgeving voor
donoruitsluiting (standaard 5 m). Deze moet minstens zo groot zijn als de
maximale gebouwzoekafstand van de DEM-bewerking.
De productie gebruikt het gezamenlijke BGT-vlakkenbestand. Ontbrekende voorbereiding wordt automatisch uitgevoerd.
Open PowerShell in uw projectfolder en voer uit:
pixi run --locked functioneel_landgebruik
Met --area alkmaar produceert dezelfde workflow uitsluitend vier Alkmaar-tegels:
pixi run functioneel_landgebruik --area alkmaar --workers 2
Alle gedeelde gebieden zijn beschikbaar, ook --area 38. De standaard is --area nederland. Uitvoer staat onder
processed_data/functioneel_landgebruik/<area>/<run-id>/, op hetzelfde nationale
grid. --building-context-m bepaalt de voorbereide buurcontext (standaard 5 m).
DEM-productie kan dezelfde workflow starten als geschikte tegels ontbreken.
De taak voert het meegeleverde script uit. Rechtstreeks starten kan ook:
pixi run --locked python ./scripts/functioneel_landgebruik.py
De gedeelde productie gebruikt de volgende instellingen:
| Instelling | Huidige waarde |
|---|---|
| Workers | 4; instelbaar via FUNCTIONEEL_LANDGEBRUIK_WORKERS of --workers |
RESOLUTION_M |
0,5 meter |
TEGELGROOTTE_M |
5.000 meter |
BGT_BESTAND |
bgt.gpkg |
CONTROLE_OPSLAAN |
True: NoData-controle schrijven |
Stel het aantal workers desgewenst in via .env in de map van waaruit u het
script start (normaal de repositoryhoofdmap):
FUNCTIONEEL_LANDGEBRUIK_WORKERS=8
Zonder instelling worden 4 workers gebruikt. --workers heeft voorrang.
Er worden nooit meer workers gestart dan te verwerken tegels. De waarde moet een geheel getal
van minstens 1 zijn. Een omgevingsvariabele met dezelfde naam heeft voorrang
op .env. Start het script opnieuw na een wijziging.
Het script hergebruikt de voorbereide actuele BGT. De BGT moet de vijf gebruikte lagen en de einddatumvelden bevatten. De gebruikte CSV wordt in de uitvoermap bewaard; bij een afwijkende CSV moet u een nieuwe uitvoermap kiezen.
Bij conversie van BGT-wegdelen en terreindelen wordt tijdelijk één GML-laag
naast het doelbestand uitgepakt. Houd ruimte vrij voor de grootste uitgepakte
laag, naast het nieuwe GeoPackage. Dit is nodig om alle attributen te behouden
en expliciet geometrie2d te gebruiken in plaats van een kruinlijn. De bestaande
ZIP kan worden hergebruikt. Alleen het script opnieuw starten herstelt een
eerder verkeerd omgezet GeoPackage niet: dat bronbestand wordt hergebruikt.
Standaard ontstaat een nieuwe runmap. Met --run-id NAAM --resume hervat u
een compatibele run en worden aanwezige resultaten hergebruikt.
--run-id NAAM --overwrite vernieuwt zowel het tegelrooster, de rastertegels
als de landelijke TIFF. Er zijn geen afzonderlijke overschrijfopties meer voor
tegels en TIFF. Zie productiemappen voor de
gedeelde naamgeving en controles.
Bij het hervatten van een compatibele run wordt de legenda van het samengestelde
raster opnieuw geschreven. Als de labels afwijken van de ingebedde
rasterattribuuttabel, wordt de COG opnieuw opgebouwd vanuit het bestaande VRT.
Daarvoor hoeven de landgebruiksklassen niet opnieuw berekend te worden, maar
het schrijven van de COG kost wel tijd en schijfruimte. De QGIS-stijl en de
compatibiliteitskopie .tif.aux.xml krijgen dezelfde labels. Losse tegelrasters
en hun stijlen blijven bij hergebruik ongewijzigd.
Resultaten
Onder processed_data/functioneel_landgebruik/nederland/<run-id> in uw datastore vindt u:
tiles/<tile_id>/: per tegelfunctioneel_landgebruik.tif,functioneel_landgebruik_bronnen.tif,gebouw_ids.tif,gebouwen.gpkg,nodata.gpkgenstatus.json;<tile_id>bevatxmin_ymin_xmax_ymax;functioneel_landgebruik.vrt: de tegels samengevoegd als virtueel raster;functioneel_landgebruik.tif: het samengestelde Cloud Optimized GeoTIFF-raster.functioneel_landgebruik.tif.aux.xml: compatibiliteitskopie van de in de TIFF ingebedde rasterattribuuttabel met pixelcode, omschrijving en kleur;functioneel_landgebruik_bronnen.tif: bronlaag per cel, met een JSON-legenda;functioneel_landgebruik.qml: legenda voor het landelijke raster in QGIS;nodata.gpkg: NoData-vlakken met bron en reden;status.json: voortgang en eventuele foutmelding;run.json: rekeninstellingen, bronidentiteit, pakketversie en runstatus;landgebruik_met_code.csv: de gebruikte codetabel.
Het logbestand is productie.log in dezelfde uitvoermap. Open het resultaat
in QGIS en controleer de dekking en klassen voor uw toepassing.
De QML bevat unieke pixelcodes met hun labels en kleuren. De landelijke TIFF
krijgt dezelfde klassen in een ingebedde rasterattribuuttabel en een identieke
.tif.aux.xml-bijlage. Beide tabellen worden uit hetzelfde kleurenpalet gemaakt.
Moderne lezers kunnen de TIFF zelfstandig lezen; de bijlage ondersteunt oudere
GDAL-versies. Bewaar voor brede compatibiliteit de .tif, .tif.aux.xml en .qml
bij elkaar. Productie vereist GDAL 3.12 of nieuwer en controleert dit vooraf.
De ingebedde tabel wordt tijdens COG-creatie geschreven, zodat de geoptimaliseerde
bestandsindeling behouden blijft.
Voeg de TIFF opnieuw toe aan QGIS om de legenda te laden. Bij een al geopende laag kunt u via Laageigenschappen ? Symbologie ? Stijl ? Stijl laden het QML-bestand kiezen. Bij hergebruik worden QML en de compatibiliteitstabel bijgewerkt. Een geldige TIFF met passende ingebedde tabel blijft ongewijzigd. Heeft een oudere TIFF alleen een externe tabel, dan wordt de COG opnieuw gemaakt vanuit het bestaande VRT; geldige rastertegels worden hergebruikt. Een ontbrekende of verouderde bijlage wordt afzonderlijk hersteld.
NoData controleren
Voeg bij bouw_functioneel_landgebruik_tiles(...) of
bouw_functioneel_landgebruik(...) deze instelling toe:
diagnostics_path=data_dir / "nodata.gpkg",
Open nodata.gpkg in QGIS. Het bestand bevat uitsluitend:
- laag nodata: vlakken die precies de lege cellen van het eindraster volgen;
- kolom bron: de betrokken bron, bijvoorbeeld BAG of BGT;
- kolom reden: een korte uitleg waarom hier geen landgebruik staat.
Gevulde rastercellen en afzonderlijke bronobjecten staan niet in deze laag. Ook een punt zonder klasse verschijnt alleen als zijn rastercel leeg blijft. Zonder NoData is de laag leeg.
Bij een open BAG-keuze staat de concrete reden, bijvoorbeeld een onbekend gebruiksdoel of een ontbrekende oppervlakte. Bij andere gaten worden de gevonden bronuitsluitingen vermeld, zoals uitgefilterde BGT-historie of een ontbrekende CSV-koppeling. Meerdere aanwijzingen op dezelfde plek staan samen in de reden. Dit bewijst niet dat een uitgesloten bronobject die plek in de actuele situatie had moeten vullen. Zonder specifieke aanwijzing staat er: Geen bron vult deze plek. De bron is dan Niet vastgesteld. Als daar wel TOP10NL-terrein ligt, vermeldt de controle de bronwaarde, bijvoorbeeld: grasland aanwezig; TOP10NL-terreinlaag niet verwerkt. De bron is dan TOP10NL. Dit verklaart alleen het gat; het voegt geen landgebruiksklasse toe.
De controle verandert het raster niet. Grenzende vlakken kunnen gescheiden blijven bij tegel- en verwerkingsgrenzen. De vlakoppervlakken overlappen niet binnen de berekende tegel.
Workers schrijven tiles/<tile_id>/nodata.gpkg. Deze controles blijven na
succesvol samenvoegen bewaard, naast het centrale nodata.gpkg. Bij een fout
blijven de voltooide tegelcontroles beschikbaar voor hervatten. Een bestaand
eindbestand kan ontbrekende controles voor ongewijzigde rastertegels leveren.
Zonder diagnostics_path wordt geen controle gemaakt. Bestaande rasters zonder
passende controle worden niet achteraf verklaard: bereken ze opnieuw met
overwrite=True. Het oudere controleformaat met objecten, punten en een
tegeloverzicht wordt niet als nieuwe NoData-controle hergebruikt. Voor hergebruik
worden rasterpad, bestandsgrootte en wijzigingsdatum gecontroleerd; deze
technische gegevens staan buiten de attributentabel.
BAG controleren: brongegevens en statusselectie
Start vanuit de repository:
from waterlagen.functioneel_landgebruik.controle import main
main(overwrite=True)
De functie maakt één bestand voor Flik-Flak en Vughterstraat:
processed_data/functioneel_landgebruik/controle/bag_controle.gpkg,
laag bag_controle. De kolom uitsnede geeft aan welk voorbeeld je bekijkt.
Vanaf stap 6 bevat hetzelfde bestand ook gemalen_controle als een gemalenbron
beschikbaar is. Dat is een puntlaag; de panden blijven in bag_controle staan.
Gebruik identificatie om een pand terug te vinden; QGIS-fid kan bij een nieuwe
uitvoer veranderen.
Lees eerst toelichting_resultaat: die vermeldt waarom het pand is ingedeeld,
uitgesloten of nog geen klasse heeft. Bij open functiecombinaties staan de
aantallen verblijfsobjecten en de niet-toepasbare regels concreet beschreven.
De grens van drie betreft verblijfsobjecten, niet het aantal verschillende functies.
Per pand staan alle stappen naast elkaar:
| Stap | Belangrijkste kolommen |
|---|---|
| 1. Bron | status, gebruiksdoel, bron_aantal_vbo, bron_vbo_overzicht |
| 2. Selectie | meegenomen_stap2, reden_statusselectie |
| 3. Functie | gekozen_pandfunctie, functiekeuze_status, reden_functiekeuze |
| 4. Bouwlagen | oppervlaktesom, pandoppervlakte, verhouding, bouwlagen en uitleg |
| 5. Klasse | omschrijving, beide codes, klasse_status, reden_klasse |
| 6. Bijzondere gebouwen | oorspronkelijke basis_...-klasse, bronkoppelingen, gemaalcapaciteit en uiteindelijke reden_klasse |
Het VBO-overzicht toont per verblijfsobject het ID, alle doelen en de gezamenlijke
oppervlakte. Het bronveld gebruiksdoel is niet de gekozen pandfunctie.
Uitgesloten panden blijven in de laag staan. Hun latere stappen zijn gemarkeerd
als niet uitgevoerd en krijgen geen klasse.
Standaard worden alle zes stappen uitgevoerd. Met stap=5 bekijk je alleen
de gewone BAG-indeling. De losse berekeningsfuncties
blijven behouden, maar worden niet meer naar aparte bestanden of lagen geschreven.
De functiekeuze volgt de
beslisboom voor de gebouwfunctie,
inclusief de regels voor NULL, overige gebruiksfunctie en appartementencomplexen.
Wonen blijft buiten de functieoppervlaktevergelijking, maar telt wel mee bij
de bouwlagen.
Bij meerdere doelen in een verblijfsobject wordt eerst één functie geselecteerd volgens de prioriteit in de functionele beschrijving hierboven. De diagnostiek vermeldt deze keuze; het volledige VBO-oppervlak telt eenmaal mee bij die functie.
Bij gelijke grootste totale oppervlakten geldt dezelfde prioriteit als bij
meerdere doelen binnen één VBO. De diagnostiek vermeldt de gekozen functie.
Ongeldige benodigde oppervlakten en niet-opgeloste combinaties krijgen
nog te beoordelen. Bij een oppervlaktevergelijking geldt dit ook voor een
verblijfsobject dat aan meerdere panden is gekoppeld: de verdeling is onbekend.
Er wordt geen oppervlakte tussen panden verdeeld. Panden zonder
gekoppeld verblijfsobject krijgen geen gebruiksdoel, nog zonder klassecode.
Voor het verblijfsobject van Flik-Flak met onderwijs en sport wordt onderwijsfunctie gekozen; de volledige 9.345 m² telt daarbij mee. De bronwaarden blijven behouden. Het winkel/woning-pand krijgt winkelfunctie ondanks het grotere woonoppervlak. De BAG-voorbereiding gebruikt dezelfde indelingsfuncties als deze controle.
Stap 4 voegt de volgende kolommen toe aan dezelfde laag:
som_vbo_oppervlakte_m2: som van alle gekoppelde VBO-oppervlakten;pandoppervlakte_m2: oppervlakte van de volledige pandgeometrie;verhouding_vbo_pand: VBO-som gedeeld door pandoppervlakte;berekend_aantal_bouwlagen: verhouding naar boven afgerond;bouwlagen_statusenreden_bouwlagen: berekend of nog te beoordelen, met uitleg.
Dit volgt de berekening uit de notitie (p. 4-5). Ook woonoppervlakte telt mee als de gekozen functie winkel is. Een VBO met meerdere doelen telt eenmaal mee met zijn gezamenlijke oppervlakte. De functiekeuze uit stap 3 verandert hierdoor niet. Het aantal bouwlagen is een schatting uit oppervlakten.
Zonder VBO, bij ontbrekende of ongeldige oppervlakten of bij een VBO dat aan meerdere panden is gekoppeld, blijft de berekening open. Er wordt geen oppervlakteverdeling aangenomen. Stap 4 kent nog geen woning/appartementklasse of landgebruikscode toe. Controle en productie gebruiken dezelfde berekening.
Stap 5 voegt de volgende kolommen toe aan dezelfde laag:
lgb_omschrijving: gebouwklasse op basis van functie en bouwlagen;lgb_code_binnendijksenlgb_code_buitendijks: respectievelijk de standaardcode en de buitendijkse code;klasse_statusenreden_klasse: ingedeeld of nog te beoordelen, met uitleg.
De codes volgen tabel 1 uit de notitie van 17 september 2025 (p. 3-5). Voor de tien reguliere functies gelden 1, 2 of 3-plus bouwlagen. Een gekozen woonfunctie met maximaal 3 VBO's is een woning; vanaf 4 VBO's een appartementencomplex (code 4/132), onafhankelijk van de bouwlagen. Een openstaande functiekeuze blijft zonder klasse, ook als bouwlagen bekend zijn. De winkel/woning krijgt met 4 berekende bouwlagen de winkelklasse met 3 of meer bouwlagen (31/159).
Als overige gebruiksfunctie de leidende functie is, telt alleen de oppervlakte van VBO's met die gekozen functie mee voor de grens van 100 m²: meer dan 100 m² geeft 32/160, maximaal 100 m² geeft 33/161. Dit geldt ook bij gemengde functies. Ontbrekende oppervlakten van deze VBO's worden niet als nul meegeteld. Geen gebruiksdoel in stap 3 geeft de aparte categorie 34/162, niet dezelfde categorie als een onopgeloste combinatie.
Deze stap controleert nog niet op buitendijkse ligging. Er wordt geen
definitieve rastercode gekozen. TOP10NL-aanvullingen zoals kassen zijn hier
nog niet toegepast. Stap 5 leest codes en omschrijvingen uit de CSV;
lgb_koppeling_id laat zien welke rij is gebruikt. De landelijke verwerking
gebruikt dezelfde tabel en BAG-beslisregels.
Stap 6 controleren
Maak desgewenst eerst de OSM-vlakken voor drinkwaterproductielocaties:
from waterlagen.functioneel_landgebruik.osm_drinkwater import download_osm_drinkwater
download_osm_drinkwater()
De functie schrijft standaard
source_data/osm/drinkwaterlocaties.gpkg binnen de geconfigureerde
opslaglocatie. Daarna gebruiken BAG-controle en
rasterproductie het bestand automatisch. Bestaande uitvoer wordt hergebruikt;
gebruik overwrite=True om OSM opnieuw op te halen. Met
cache_dir=Path("map") wordt het Overpass-antwoord bewaard en met
offline=True, cache_dir=Path("map") opnieuw gebruikt. De bronselectie en de
beperkingen staan bij OSM-drinkwaterlocaties.
De meegeleverde broncontrole bepaalt welke 54 locaties worden opgehaald;
gebruik reviews_path=Path("bestand.json") voor een aangepaste beoordeling.
Het GeoPackage bevat de laag drinkwaterproductieterrein voor de koppeling
met BAG-panden en daarnaast afzonderlijke controlelagen voor terreinen en
losse gebouwcontouren. Standaard koppelen alleen de terreinen. Met
include_buildings=True, overwrite=True worden ook losse gebouwcontouren
in de koppellaag opgenomen; controleer die keuze per locatie.
De TOP10NL-GeoPackage moet top10nl_gebouw_vlak bevatten. Kassen worden daarin
automatisch opgezocht. De standaardvoorbeelden hoeven geen kas of gemaal te
bevatten; kies daarvoor een passende bounds.
In gemalen_controle staan de broncapaciteit, beide mogelijke codes,
bag_pand_id, bag_gebruiksdoelen, geometrie_kaart,
pand_capaciteit_m3_min en reden_ruimtelijke_koppeling. De puntlaag behoudt
alle bronpunten, ook als voor de kaart een BAG-pand wordt gebruikt of geen
capaciteitsklasse kon worden bepaald. Bekijk in bag_controle de kolommen
gekoppelde_gemalen en gemaalcapaciteit_m3_min voor de panduitkomst.
Een pand zonder gekoppeld VBO of met uitsluitend lege gebruiksdoelen mag nu ook worden gekoppeld. De gemaalbron levert het bewijs van de gemaalfunctie. Het punt moet binnen precies één geselecteerd pand liggen en de gezamenlijke capaciteit moet geldig en indeelbaar zijn. De controle vermeldt waarom het pand is gebruikt. Een combinatie van een bekend doel en een ontbrekend doel wordt niet automatisch gekoppeld.
Aanvullende bronnen zijn optioneel en worden niet automatisch gedownload.
Voor het controlescript geef je special_sources=SpecialBuildingSources(...)
op, uit waterlagen.functioneel_landgebruik.kassen_rwzi_drinkwater. Naast
top10nl_gpkg kun je rwzi_gpkg, rwzi_layer, drinking_water_gpkg en
drinking_water_layer instellen. De RWZI-bron is de laag rwzi uit
Waterketen DAMO. Download deze vooraf met de
downloadinstructies. Controle en rasterproductie gebruiken
automatisch source_data/waterketen_damo/waterketen_damo.gpkg als dit bestand
aanwezig is. Er geldt geen statusfilter; de oudere opties rwzi_status_column
en rwzi_active_value blijven geaccepteerd maar worden niet gebruikt.
Met gemalen_gpkg kun je een eigen HyDAMO-bestand aanwijzen.
Voor rasterproductie staan de optionele paden op FunctioneelLandgebruikSources
(rwzi_gpkg, drinking_water_gpkg, gemalen_gpkg) en de bijbehorende laag- en
veldnamen op FunctioneelLandgebruikLayers. Gebruik dataclasses.replace om
de paden van FunctioneelLandgebruikSources.from_datastore(...) aan te vullen.
De OSM-bron uit de standaardopslag wordt door from_datastore(...)
automatisch gevonden als het bestand bestaat.
Controleer de selectieregels en beperkingen
voordat je de uitkomsten gebruikt.
Meerdere gemalen in één pand controleren
Roep waterlagen.functioneel_landgebruik.controle_gemalen.main() aan voor een
uitsnede van 500 × 500 meter rond gemaal Lely. De huidige bron bevat drie
afzonderlijke gemaalobjecten (afdelingen 2, 3 en 4) van elk 450 m³/min, binnen
BAG-pand 0463100000001005 met overige gebruiksfunctie. De verwachte som is
1.350 m³/min: klasse >1.000, codes 43/171. Dit controleert de verwerking van de
bronregistraties; het bewijst niet onafhankelijk de werkelijke pompcapaciteit.
De uitvoer staat onder processed_data/functioneel_landgebruik/controle_gemalen_lely:
controle.gpkg: lagenbag_controleengemalen_controle;landgebruik.tifenlandgebruik.qml: raster met categorielegenda;berekening.log: voortgang.
Controleer bij het pand gekoppelde_gemalen, gemaalcapaciteit_m3_min en
beide lgb_code-kolommen. Bij de punten staan de afzonderlijke capaciteiten,
bag_pand_id, geometrie_kaart en pand_capaciteit_m3_min.
Het script hergebruikt de lokale bronnen en overschrijft alleen dit voorbeeld.
Sluit de uitvoer in QGIS voor opnieuw draaien. Pas zo nodig BGT_FILENAME
aan; standaard wordt het herstelde bgt.gpkg gebruikt.
De codetabel aanpassen
De standaardtabel staat in
src/waterlagen/functioneel_landgebruik/landgebruik_met_code.csv.
Deze CSV is onderdeel van de codeversie. Gebruik de pakketversie als
uitgangspunt voor je eigen tabel.
Kopieer de meegeleverde tabel naar een eigen bestand, zodat pakketupdates je
aanpassingen niet vervangen:
from pathlib import Path
from shutil import copyfile
from waterlagen.functioneel_landgebruik.landgebruikstabel import DEFAULT_MAPPING_CSV
copyfile(DEFAULT_MAPPING_CSV, Path("mijn_landgebruik.csv"))
Gebruik --mapping-csv voor een eigen tabel. De productie bewaart de gebruikte
CSV in de uitvoermap.
Vanuit Python kan dit ook met main(mapping_csv=Path(...)) of met
bouw_functioneel_landgebruik(..., mapping_csv=Path(...)).
Vanaf de repositoryhoofdmap kan het productiescript ook direct een eigen tabel gebruiken:
pixi run python scripts/functioneel_landgebruik.py --mapping-csv mijn_landgebruik.csv
Kies na een wijziging een nieuwe run-ID (of start zonder --run-id voor een
nieuwe tijdstempel). Een bestaande run accepteert alleen exact dezelfde
CSV-bytes; ook sorteren of opnieuw opslaan in Excel kan die bytes wijzigen.
Zo blijven de opgeslagen tabel, rastertegels en landelijke TIFF bij dezelfde
productie horen. Zie productiemappen.
Bewerken in Excel
De meegeleverde CSV kun je gewoon in Excel openen en bewerken. Sla het bestand daarna weer op als CSV, niet als .xlsx.
Controleer bij het opslaan dat Excel ; als scheidingsteken gebruikt. Afhankelijk van je regionale instellingen kan Excel automatisch , gebruiken. Komma's binnen een bronwaarde horen bij de tekst zelf en mogen dus niet als kolomscheiding worden gebruikt.
| Kolom | Gebruik |
|---|---|
Koppelmethode |
mapping voor een directe bronwaarde; functie voor een ingebouwde Python-regel. |
Koppel-ID |
Verplicht en vast voor functie; mag leeg blijven voor mapping. |
Bron, Bronlaag, Bronveld |
Ondersteunde bron, laag en attribuut voor directe koppelingen. Bij functies beschrijven ze de invoer; de BAG-identiteit wordt gecontroleerd. |
Bronwaarde |
Precies één volledige waarde per rij, of * als vangnet. |
LGB-code_binnendijks, LGB-code_buitendijks |
Respectievelijk de standaardcode en de buitendijkse code, bewerkbaar van 1 t/m 255; 0 blijft NoData. De twee codereeksen mogen niet overlappen. |
LGB_beschrijving |
Bewerkbare klassenaam voor uitvoer en legenda. Dezelfde standaardcode vereist dezelfde beschrijving. |
Toelichting |
Optionele vrije tekst, zonder invloed op verwerking. |
Documentatie |
Optionele documentatie-URL; wordt tijdens verwerking niet opgehaald. |
Pas normaal de twee codes en de beschrijving aan. Kopieer voor een nieuwe
directe koppeling een mapping-rij uit dezelfde bronlaag, laat Koppel-ID leeg
en vul één nieuwe bronwaarde in. Herhaal een doelcode gerust voor meerdere
bronwaarden, met een consistente beschrijving. Dubbele bronwaarden binnen
dezelfde bronlaag zijn niet toegestaan, ook niet bij gelijke uitvoercodes.
Let op (!). Bij regels met Koppelmethode == functie kun je alleen de LGB-code_binnendijks, LGB-code_buitendijks, LGB_beschrijving, Toelichting en Documentatie aanpassen.
De functie zelf ligt vast in de software en wordt herkend via Koppel-ID. Je kunt via de CSV dus geen nieuwe Python-functies of nieuwe rekenregels toevoegen.
Houd bij het aanpassen van codes rekening met overlap en rastervoorrang. CSV-rijvolgorde en codehoogte bepalen niet welke bron bij overlap wint. Bij aangepaste codetabellen geldt een uitzondering op de conflictregel voor bijzondere gebouwen:
- Meerdere passende kas-, RWZI- of drinkwaterregels mogen dezelfde klasse opleveren. Zowel de standaardcodes als de buitendijkse codes moeten overeenkomen.
- Verschillen de codeparen, dan krijgt het pand NoData. Ook de eerder bepaalde BAG-klasse vervalt.
- Een gekoppeld gemaal samen met een andere bijzondere gebouwfunctie blijft een conflict. Ook bij gelijke codeparen krijgt het pand NoData.
De ondersteunde directe combinaties zijn:
| Bron | Bronlaag | Bronveld |
|---|---|---|
| BRP | brp_gewas |
gewascode |
| TOP10NL | top10nl_functioneel_gebied_vlak, top10nl_functioneel_gebied_multivlak |
typefunctioneelgebied |
| BGT | bgt_wegdeel, bgt_ondersteunendwegdeel |
bgt-functie |
| BGT | bgt_begroeidterreindeel |
bgt-fysiekVoorkomen |
| BGT | bgt_onbegroeidterreindeel, bgt_waterdeel |
Leeg, uitsluitend * |
Een willekeurige nieuwe bron, laag of attribuut kan niet alleen door een CSV-rij worden toegevoegd. Niet-ondersteunde combinaties geven een foutmelding.
* vangt geldige bronwaarden op waarvoor geen expliciete koppeling bestaat.
Expliciete waarden gaan altijd voor, ongeacht de rijvolgorde. Lege waarden,
witruimte en ontbrekende waarden vallen hierbuiten. Voor BRP moet de
waarde bovendien een positief geheel getal zijn. Een leeg Bronveld betekent
geen attribuutfilter: alle verder geschikte objecten worden gekoppeld. Dit is
alleen ondersteund voor de twee genoemde BGT-lagen en vereist Bronwaarde = *.
Zie ook de functionele verwerking.
Sorteren verandert classificatie, kleuren en legendalabels niet.
Bestaande rasters worden bij --resume hergebruikt en veranderen niet
mee met de CSV. Gebruik voor een nieuwe codering een nieuwe run-ID.
In eigen Python-workflows blijven de overwrite-parameters beschikbaar.
De BAG-controle vernieuwt bij rechtstreeks starten wel het controlebestand.
De BGT-GeoPackage moet nu ook bgt_begroeidterreindeel,
bgt_onbegroeidterreindeel en bgt_ondersteunendwegdeel bevatten, naast
waterdelen en wegdelen, steeds met de einddatumvelden. Een bestaand onvolledig
bronbestand wordt niet automatisch opnieuw gedownload.
Voor TOP10NL zijn zowel top10nl_functioneel_gebied_vlak als
top10nl_functioneel_gebied_multivlak nodig voor de terreinindeling. Beide
zitten in het volledige TOP10NL-bestand. Een ontbrekende laag geeft een
foutmelding; deze wordt niet stilzwijgend overgeslagen.
De uitsnede selecteert panden. Verblijfsobjecten worden daarna via de exacte pand-ID-koppeling opgehaald, ook buiten de uitsnede. Geometrie en bronwaarden blijven intact. Een verblijfsobject kan aan meerdere panden gekoppeld zijn; zijn volledige bronoppervlakte blijft bij dat object staan en wordt niet over panden verdeeld. Een pand zonder koppeling blijft eveneens zichtbaar.
Geef bounds aan de Python-controlefunctie door voor een andere uitsnede.
Met overwrite=True vernieuwt u het gezamenlijke controlebestand.
Sluit de laag in QGIS als het bestand daardoor vergrendeld is.
Bij rechtstreeks aanroepen van main() wordt een bestaand bestand hergebruikt;
gebruik main(overwrite=True) om het te vernieuwen.
Een vooraf voorbereid BGT-bestand kan aan de Python-productiefunctie met
main(bgt_path=...) worden doorgegeven, of aan de CLI met --bgt-path.
Deze route downloadt of converteert geen BGT.
Aanvullende vlaklagen in dat bestand worden gebruikt om NoData te verklaren.
Gaten aanvullen en bronnenraster
Gebruik in een eigen Python-bewerking gap_fill_distance_m voor de
gewenste zoekafstand in meters (standaard 1.0; 0 schakelt aanvullen uit).
De losse en parallelle rasterfuncties hebben hiervoor gap_fill_distance_m.
Zie de aanvulregels en broncodes.
De landelijke productie schrijft naast functioneel_landgebruik.tif ook
functioneel_landgebruik_bronnen.tif, een bijbehorende VRT en
functioneel_landgebruik_bronnen.json met bronlagen en donorinstellingen.
Per tegel staat het bronnenraster als functioneel_landgebruik_bronnen.tif
naast functioneel_landgebruik.tif in tiles/<tile_id>/. Een losse berekening
met die standaardnaam gebruikt eveneens deze namen. Andere losse bestandsnamen
behouden de oude submap bronnen/. Beide rasters hebben hetzelfde rasterrooster
en NoData-waarde 0. VRT's worden uit expliciete lijsten met hetzelfde product
samengesteld, zodat bronrasters en gebouw-ID's niet in het landgebruik belanden.
Gebruik een nieuwe run-ID voor de nieuwe tegelmapstructuur. Bestaande producties worden niet verplaatst of hernoemd; DEM kan geldige oude landgebruikinputs blijven lezen.
Hergebruik vereist een compleet rasterpaar met dezelfde aanvulinstellingen. Oudere tegels zonder bronraster moeten opnieuw worden berekend. Gebruik een nieuwe productie-run wanneer de zoekafstand verandert; de runparameters bewaken de consistentie bij hervatten. De lokale landsgrensbron is nodig wanneer het aanvullen ingeschakeld is.
Tijdelijk vergrendelde uitvoerbestanden
Bij toegangsweigering tijdens het vervangen van statusbestanden of publiceren van COG's probeert de productie de vervanging maximaal tien keer opnieuw, met telkens een seconde wachttijd. Het log noemt de bron, bestemming en Windows-foutcode. Blijvende toegangsproblemen worden niet genegeerd.
Een al gevalideerde tijdelijke COG blijft bij een publicatiefout bewaard. Bij hervatten kan dezelfde conversie worden hergebruikt als de invoer, exportinstellingen en het tijdelijke bestand nog overeenkomen met het checkpoint. De logging onderscheidt conversie, validatie en publicatie: 100% conversie betekent nog niet dat het eindbestand is gepubliceerd. Open tijdelijke uitvoerbestanden niet in een GIS-viewer terwijl de productie loopt.
Redactie: AI