Dit project, gefinancierd door Digishape Seed Money, richt zich op het inspecteren van waterpeilen met behulp van LiDAR-beelden van drones. Het bevat scripts die .las/.laz bestanden verwerken. Je kunt verschillende filterfuncties toepassen op de .las/.laz bestanden om de gewenste output te verkrijgen. Elke gebruikte functie voegt een afkorting toe die de acties van de functie beschrijft. Meer informatie over het project is te vinden op https://www.digishape.nl/projecten/algoritmische-bepaling-van-waterstanden-met-remote-sensing en een rapport van het project (in het Nederlands) is te vinden in de 'docs' map.
Het script biedt de volgende functionaliteit:
-
🔄 Automatische bestandsverwerking
- Verwerkt automatisch alle .las/.laz bestanden in de
data/raw/directory - Ondersteunt zowel .las als .laz formaten
- Voorkomt dubbele verwerking van bestanden
- Logt alle verwerkingsstappen met timestamp
- Kan grote bestanden opsplitsen in kleinere delen voor efficiëntere verwerking
- Verwerkt automatisch alle .las/.laz bestanden in de
-
🔍 Filtering opties
- Spatiale filtering: Filtert punten binnen waterlichamen
- Hoogte filtering: Filtert punten op basis van minimum en maximum waterpeil
- Centerline filtering: Filtert punten rondom een berekende centerline van waterlichamen met instelbare bufferafstand
- Datumfiltering voor waterlichamen: Filtert waterlichamen op basis van een referentiedatum
-
📊 Output generatie
- Genereert rasterbestanden (.tif) met 1x1m celgrootte
- Berekent Z-waarden op basis van gemiddelde, mediaan of modus
- Maakt visualisaties (.png) met waterlichamen en rasterdata
- Genereert frequentiediagrammen voor specifieke RD-coördinaten
- Berekent statistieken (gemiddelde of mediaan) per polygoon uit een GDB- of GPKG-bestand
-
📝 Logging
- Uitgebreide logging van alle verwerkingsstappen
- Logs worden opgeslagen in de
logs/directory met timestamp - Bevat informatie over verwerking, fouten en resultaten
- Logging naar zowel bestand als console
- Clone de repository
- Installeer de vereiste packages:
pip install -r requirements.txtHet script kan worden uitgevoerd met verschillende opties:
main(
filter_geometries=False, # Filter op waterlichamen
filter_minmax=False, # Filter op hoogte
min_peil=-1, # Minimum waterpeil
max_peil=1, # Maximum waterpeil
waterdelen_reference_date=None, # Referentiedatum voor waterlichamen
filter_centerline=False, # Filter op centerline
buffer_distance=1.0, # Bufferafstand tot centerline in meters
raster_averaging_mode="mode", # Berekening raster (mode/mean/median)
create_tif=True, # Genereer TIF bestanden
output_file_name=[], # Lijst met afkortingen voor output bestandsnaam
frequencydiagram=False, # Genereer frequentiediagram
coordinates=(126012.5, 500481), # RD-coördinaten voor frequentiediagram
polygon_file=None, # Pad naar .gdb of .gpkg bestand met polygonen
polygon_statistic="mean" # Type statistiek voor polygonen (mean/median)
)Grote LAS/LAZ bestanden kunnen worden opgesplitst in kleinere delen voor efficiëntere verwerking:
python -m src.chunk_files input.las output_directory 50x65.14Parameters:
input.las: Het te splitsen LAS/LAZ bestandoutput_directory: Directory waar de gesplitste bestanden worden opgeslagen50x65.14: Maximale grootte van elk deel in meters (breedte x hoogte)--points-per-iter: Optioneel, aantal punten per iteratie (standaard: 1 miljoen)
De bestanden worden opgesplitst op basis van ruimtelijke grenzen en krijgen een naam in het formaat: originele_naam_x_min_y_max.las
heron/
├── data/
│ ├── raw/ # Input .las/.laz bestanden
│ ├── processed/ # Verwerkte bestanden
│ └── output/ # Output bestanden (.tif, .png, .gpkg)
├── logs/ # Log bestanden
├── src/ # Broncode
│ ├── chunk_files.py
│ ├── create_plots.py
│ ├── filter_functions.py
│ ├── filter_spatial.py
│ ├── generate_raster.py
│ ├── get_waterdelen.py
│ ├── import_data.py
│ └── plot_frequency.py
└── main.py # Hoofdscript
load_data(lasfile, data_dir): Laadt en verwerkt .las/.laz bestanden
filter_spatial(points, waterdelen): Filtert punten binnen waterlichamencalculate_centerline(waterdelen, buffer_distance): Berekent centerline van waterlichamencalculate_polygon_statistics(raster_points, polygon_file, statistic): Berekent statistieken per polygoon
filter_by_z_value(points, min_peil, max_peil): Filtert punten op basis van hoogtefilter_by_proximity_to_centerline(points, centerline, distance): Filtert punten rondom centerline
generate_raster(points, mode): Genereert raster van punten met verschillende berekeningsmethoden
get_waterdelen(bbox, reference_date): Haalt waterlichamen op via PDOK API, met optionele filterdatum
plot_frequency(points, coordinates, filename): Genereert frequentiediagram voor specifieke locatieplot_map(raster_points, points, waterdelen, filename, out_name): Maakt visualisatie van resultaten
split_las_file(input_file, output_dir, size, points_per_iter): Splitst LAS/LAZ bestanden in kleinere delenrecursive_split(x_min, y_min, x_max, y_max, max_x_size, max_y_size): Berekent de grenzen voor de splitsingtuple_size(string): Converteert een string in het formaat 'breedte x hoogte' naar een tuple
Het script genereert de volgende output bestanden:
*.tif: Rasterbestanden met gefilterde punten*.png: Visualisaties van de resultaten*.gpkg: GeoPackage bestanden met berekende polygoonstatistieken*.log: Log bestanden met verwerkingsinformatie*_x_min_y_max.las: Gesplitste LAS/LAZ bestanden
Alle verwerkingsstappen worden gelogd met:
- Timestamp
- Log level (INFO/WARNING/ERROR)
- Gedetailleerde berichten
- Bestandsnamen en verwerkingsresultaten
- Logging naar zowel bestand als console
- numpy
- pandas
- geopandas
- fiona
- laspy
- lazrs
- xarray
- rioxarray
- contextily
- matplotlib
- shapely
