64 lines
1.5 KiB
Markdown
64 lines
1.5 KiB
Markdown
# gadm-boundaries
|
||
|
||
Native C++ boundaries batch generator for the GADM pipeline.
|
||
Uses GDAL/GEOS/PROJ for **10–100× speedup** over the TypeScript pipeline on geometry union + GHS raster enrichment.
|
||
|
||
## Prerequisites
|
||
|
||
| Tool | Version |
|
||
|------|---------|
|
||
| CMake | ≥ 3.20 |
|
||
| C++ compiler | C++20 (MSVC, GCC, or Clang) |
|
||
| vcpkg | Latest (set `VCPKG_ROOT` env var) |
|
||
|
||
## Setup
|
||
|
||
```bash
|
||
# Install native dependencies (one-time)
|
||
vcpkg install
|
||
```
|
||
|
||
## Build
|
||
|
||
```bash
|
||
# Release (Ninja)
|
||
cmake --preset vcpkg
|
||
cmake --build build --config Release
|
||
|
||
# Windows MSVC
|
||
cmake --preset vcpkg-win
|
||
cmake --build build --config Release
|
||
|
||
# Debug
|
||
cmake --preset dev
|
||
cmake --build build/dev
|
||
```
|
||
|
||
## Usage
|
||
|
||
```bash
|
||
# All countries, all levels
|
||
./build/boundaries --country=all
|
||
|
||
# Single country, specific level
|
||
./build/boundaries --country=DEU --level=0
|
||
|
||
# Force regeneration (ignore cache)
|
||
./build/boundaries --country=NGA --force
|
||
```
|
||
|
||
Output goes to `cache/gadm/boundary_{code}_{level}.json` — drop-in replacement for the TS pipeline.
|
||
|
||
## Architecture
|
||
|
||
See [docs/cpp-port.md](../docs/cpp-port.md) for the full spec.
|
||
|
||
```
|
||
src/
|
||
├── main.cpp # CLI entry, country loop, cache logic
|
||
├── gpkg_reader.h/cpp # GeoPackage → features (OGR)
|
||
├── geo_merge.h/cpp # Geometry union (GEOS)
|
||
├── ghs_enrich.h/cpp # GeoTIFF raster sampling + PIP
|
||
├── pip.h # Inline ray-casting point-in-polygon
|
||
└── types.h # BoundaryFeature, BoundaryResult structs
|
||
``` |