All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Critical:
ensure_wgs84()now raisesValueErrorwhen input data has no CRS defined, instead of silently assuming EPSG:4326. This prevents coordinate corruption when projected data (e.g. UTM) is loaded without a.prjfile. (OVC-001 from audit) - UX: GeoPackage writer now logs a warning when a layer has no CRS, instead of silently setting EPSG:4326.
- UX: Building and road loaders now warn when file size exceeds 500 MB or feature count exceeds 100,000, setting expectations for runtime and memory usage.
- 9 new tests in
tests/test_crs.pycoveringensure_wgs84,choose_utm_crs_from_gdf, andget_crs_pairwith valid, projected, missing, and edge-case CRS inputs.
- GeoQA pre-check integration — Automated data quality assessment before QC pipeline runs.
- New
ovc/precheck/module wrapping GeoQA for input data validation. --precheckCLI flag: runs GeoQA quality assessment on all inputs before QC.--precheck-onlyCLI flag: runs only the quality assessment, skips QC checks.precheck_buildings(),precheck_roads(),precheck_boundary(),precheck_all()API functions.PrecheckResultdataclass with quality score, blockers, warnings, and report paths.- Generates per-dataset HTML quality reports with charts (quality gauge, completeness bar, histograms).
- Detects blockers (missing CRS, wrong geometry type, empty datasets, >10% invalid geometries).
run_pipeline()now acceptsrun_precheck=Trueto embed pre-check into the pipeline.PipelineOutputsextended withprecheck_reportandprecheck_scorefields.- 12 new integration tests in
tests/test_precheck.py.
geoqaadded as a project dependency.
- Removed all OpenStreetMap / Overpass API integration. OVC is now a local-data-only tool.
--buildingsis now required (was optional when--boundarywas provided for OSM download).--boundaryis now optional (only enables boundary overlap / outside-boundary checks).--roadsis now optional (only enables building-on-road conflict checks).load_buildings()now accepts a file path instead of a boundary GeoDataFrame + OSM tags.load_roads()now accepts a file path instead of a boundary GeoDataFrame + OSM tags.run_pipeline()signature changed:buildings_pathis now the first required argument.Config.tagsremoved — no more OSM tag configuration.osmnxis no longer a dependency.
- Overpass API rate limits and timeouts caused frequent freezes and incomplete downloads.
- Users invariably had their own data and only needed the QC checks.
- Removing the network dependency makes OVC faster, more reliable, and usable offline.
- Loaders (
buildings.py,roads.py) rewritten to load from local files (Shapefile, GeoJSON, GeoPackage, etc.). - Pipeline (
export/pipeline.py) simplified — no more OSM download fallback paths. - CLI (
scripts/run_qc.py) simplified —--buildingsis required, no OSM download messaging. - Road QC pipeline no longer has an OSM download fallback.
- All documentation updated to reflect local-data-only workflow.
- All QC checks: overlap detection, road conflict, boundary overlap, geometry quality.
- All Road QC checks: disconnected segments, self-intersections, dangles.
- Vectorized spatial join optimizations from v2.0.0.
- Interactive web map generation.
- GeoPackage + CSV + HTML output structure.
- Geometry quality checks (duplicate, invalid, area, compactness, setback).
- Road QC Module: New module (
ovc.road_qc) detecting disconnected segments, self-intersections, and dangles. - Unified Output Structure: Outputs are now organized into
outputs/building_qc/andoutputs/road_qc/. - Dangle Filtering: Boundary-aware filtering to prevent false positives at study area edges.
- CLI Support: Added
--road-qcflag toscripts/run_qc.py. - Tutorial 8: New guide for Road Network QC.
- Documentation: Complete rewrite of User Guide and API Reference to reflect v1.0.2.
- Web Maps: Enhanced styling with legend and copyright notice.
- Pipeline: Merged duplicate output logic into a unified exporter.
- Documentation: Completely aligned
docs/api-reference.mdwith the actual functional API structure. - Documentation: Rewrote
Tutorial 7to use the correctrun_pipelineusage and handling of GeoPackage outputs. - Documentation: Updated
User GuideandExamplesto remove incorrect Object-Oriented API usage. - Cleanup: Removed unused development script
rename_to_ovc.sh. - Cleanup: Removed extraneous QGIS metadata file
tests/data/sample_boundary.qmd.
- Initial release of Overlap Violation Checker (OVC).
- Core checks for building overlaps, boundary violations, and road conflicts.
- Automated data pipeline with OpenStreetMap integration.