Install
openclaw skills install @ruiduobao/geoskill-impervious-surface-mappingEstimate impervious surface fraction from multi-band satellite imagery (Sentinel-2) using spectral indices (NDBI, NDVI, MNDWI). Supports binary classification and continuous fraction estimation, with zone-level aggregation and change detection. Use when mapping urban impervious surfaces, computing impervious ratios by watershed/admin unit, or analyzing temporal changes in built-up areas.
openclaw skills install @ruiduobao/geoskill-impervious-surface-mappingGIS/remote sensing workflow for estimating impervious surface fraction from multi-band satellite imagery. Uses spectral indices and sub-pixel estimation to produce continuous impervious fraction maps, with optional binary thresholding, zone aggregation, and change detection.
Use when the user wants to:
# Basic fraction estimation
python scripts/impervious_surface_mapping.py \
--raster sentinel2.tif \
--year 2024 \
--mode fraction
# Binary classification with threshold
python scripts/impervious_surface_mapping.py \
--raster sentinel2.tif \
--year 2024 \
--mode binary \
--threshold 0.5
# Zone aggregation
python scripts/impervious_surface_mapping.py \
--raster sentinel2.tif \
--year 2024 \
--mode fraction \
--aggregation-layer watersheds.geojson
# Change detection
python scripts/impervious_surface_mapping.py \
--raster sentinel2_2024.tif \
--year 2024 \
--compare-year 2020 \
--raster-compare sentinel2_2020.tif \
--mode fraction
This skill can auto-fetch a Sentinel-2 L2A scene from the Microsoft
Planetary Computer when given a bounding box + date range. The script picks
the B04 (red) asset by default; you can change prefer_assets in the
code to use visual for an RGB composite.
python scripts/impervious_surface_mapping.py \
--bbox 116,39,117,40 \
--date-range 2024-06-01,2024-06-30 \
--output-dir ./impervious-output
The PYTHONPATH must include the parent of _geoskill_data_fetcher/
(the same directory the 50 skills live in). Set it once:
export PYTHONPATH="/path/to/行业Skill创意-20260727"
| Parameter | Default | Description |
|---|---|---|
--raster | required | Multi-band raster (Sentinel-2: B2,B3,B4,B8,B11) |
--year | required | Analysis year |
--mode | fraction | binary or fraction |
--training-data | None | Training samples GeoJSON (with impervious field) |
--threshold | 0.5 | Threshold for binary mode |
--aggregation-layer | None | Zone layer GeoJSON for aggregation |
--compare-year | None | Comparison year for change detection |
--raster-compare | None | Raster for comparison year |
--ndvi-mask | 0.6 | NDVI threshold to mask dense vegetation |
--mndwi-mask | 0.0 | MNDWI threshold to mask water |
--output-dir | ./impervious-output | Output directory |
| File | Description |
|---|---|
impervious_fraction.tif | Continuous impervious fraction [0, 1] |
impervious_binary.tif | Binary impervious mask (1=impervious) |
zones_summary.csv | Zone-level statistics (if aggregation-layer given) |
change.tif | Change raster (fraction difference) |
accuracy.json | Accuracy metrics (if training-data given) |
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Argument error |
| 3 | Dependency missing |
| 6 | Data validation failure |
| 7 | Processing failure |