# Repository Guidelines ## Project Structure & Module Organization - `raw_dgm1/`: source DGM1 tiles (`.tif` + `.tfw`) named `dgm1___.tif`. - `work/`: transient artifacts such as `dgm.vrt` and intermediate `_tmp.tif` files; safe to regenerate. - `export_unity/`: delivery assets; `height_png16/` holds 16-bit heightmaps, `tile_index.csv` maps tile IDs to world bounds and global min/max. - `export_heightmaps.py`: main Python pipeline that mosaics the VRT, rescales to UInt16, and writes Unity-friendly tiles. ## Build, Test, and Development Commands - Create/refresh VRT (run in repo root): `gdalbuildvrt work/dgm.vrt raw_dgm1/*.tif` - Export Unity-ready heightmaps and manifest: `python3 export_heightmaps.py` - Inspect a tile for sanity (optional spot check): `gdalinfo export_unity/height_png16/dgm1_32_328_5511.png | head` - Dependencies: GDAL with Python bindings (`osgeo`) available on PATH/PYTHONPATH. ## Coding Style & Naming Conventions - Python: 4-space indentation, snake_case identifiers, and module-level constants for tunables (e.g., `TILE_SIZE_M`, `OUT_RES`). - Keep tile IDs stable and lower_snake_case to align with file naming and manifest entries. - Prefer small, composable functions if extending the pipeline; keep GDAL options explicit. ## Testing & Validation - No formal test suite yet; validate changes by re-running `export_heightmaps.py` on a small subset and diffing outputs. - For correctness, compare `gdalinfo` stats of regenerated PNGs against expectations and spot-check manifest bounds. - When altering scaling or bounds logic, document rationale in comments and update an example command in this guide if needed. ## Commit & Pull Request Guidelines - Use short, imperative commit messages (e.g., “add resampling flag”, “document export flow”); follow existing history style. - PRs should summarize scope, list commands executed (`gdalbuildvrt`, `export_heightmaps.py`), and call out data changes or new dependencies. - Avoid committing large raw datasets if not required; prefer documenting download steps or using `.gitignore` for temporary exports. - Include screenshots or brief notes when changes affect Unity import workflows or manifest formats.