You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix README feature matrix to match codebase (#1155) (#1158)
- Update all hydrology links from xrspatial/*.py to xrspatial/hydro/*.py
- Add missing functions: fill, sink, flow_path (Dinf/MFD), watershed
(Dinf/MFD), hand (Dinf/MFD), binary, validate_disaggregation
- Fix viewshed backend markers (CuPy falls back to CPU without RTX)
- Fix pycnophylactic backend markers (CuPy works via CPU fallback)
- Add GeoTIFF/COG I/O link to nav bar
- Update function count from 100+ to 150+
Copy file name to clipboardExpand all lines: README.md
+35-25Lines changed: 35 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@
87
87
88
88
-------
89
89
90
-
Xarray-Spatial is a Python library for raster analysis built on xarray. It has 100+ functions for surface analysis, hydrology (D8, D-infinity, MFD), fire behavior, flood modeling, multispectral indices, proximity, classification, pathfinding, and interpolation. Functions dispatch automatically across four backends (NumPy, Dask, CuPy, Dask+CuPy). A built-in GeoTIFF/COG reader and writer handles raster I/O without GDAL.
90
+
Xarray-Spatial is a Python library for raster analysis built on xarray. It has 150+ functions for surface analysis, hydrology (D8, D-infinity, MFD), fire behavior, flood modeling, multispectral indices, proximity, classification, pathfinding, and interpolation. Functions dispatch automatically across four backends (NumPy, Dask, CuPy, Dask+CuPy). A built-in GeoTIFF/COG reader and writer handles raster I/O without GDAL.
91
91
92
92
### Installation
93
93
```bash
@@ -134,7 +134,7 @@ In the GIS world, rasters are used for representing continuous phenomena (e.g. e
134
134
#### Supported Spatial Functions with Supported Inputs
|[Landforms](xrspatial/terrain_metrics.py)| Classifies terrain into 10 landform types using the Weiss (2001) TPI scheme | Weiss 2001 | ✅️ | ✅️ | ✅️ | ✅️ |
318
-
|[Viewshed](xrspatial/viewshed.py)| Determines visible cells from a given observer point on terrain | GRASS GIS r.viewshed | ✅️ | ✅️ |✅️|✅️|
318
+
|[Viewshed](xrspatial/viewshed.py)| Determines visible cells from a given observer point on terrain | GRASS GIS r.viewshed | ✅️ | ✅️ |🔄|🔄|
319
319
|[Min Observable Height](xrspatial/experimental/min_observable_height.py)| Finds the minimum observer height needed to see each cell *(experimental)*| Custom | ✅️ ||||
|[Flow Direction (D8)](xrspatial/flow_direction.py)| Computes D8 flow direction from each cell toward the steepest downhill neighbor | O'Callaghan & Mark 1984 | ✅️ | ✅️ | ✅️ | ✅️ |
332
-
|[Flow Direction (Dinf)](xrspatial/flow_direction_dinf.py)| Computes D-infinity flow direction as a continuous angle toward the steepest downslope facet | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
333
-
|[Flow Direction (MFD)](xrspatial/flow_direction_mfd.py)| Partitions flow to all downslope neighbors with an adaptive exponent (Qin et al. 2007) | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | ✅️ |
334
-
|[Flow Accumulation (D8)](xrspatial/flow_accumulation.py)| Counts upstream cells draining through each cell in a D8 flow direction grid | Jenson & Domingue 1988 | ✅️ | ✅️ | ✅️ | ✅️ |
335
-
|[Flow Accumulation (Dinf)](xrspatial/flow_accumulation_dinf.py)| Accumulates upstream area by splitting flow proportionally between two neighbors (Tarboton 1997) | Tarboton 1997 | ✅️ | ✅️ | ✅️ | 🔄 |
336
-
|[Flow Accumulation (MFD)](xrspatial/flow_accumulation_mfd.py)| Accumulates upstream area through all MFD flow paths weighted by directional fractions | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | 🔄 |
337
-
|[Flow Length (D8)](xrspatial/flow_length.py)| Computes D8 flow path length from each cell to outlet (downstream) or from divide (upstream) | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | 🔄 |
|[Flow Length (MFD)](xrspatial/flow_length_mfd.py)| Proportion-weighted flow path length using MFD fractions (downstream or upstream) | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | 🔄 |
340
-
|[Watershed](xrspatial/watershed.py)| Labels each cell with the pour point it drains to via D8 flow direction | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | ✅️ |
341
-
|[Basins](xrspatial/watershed.py)| Delineates drainage basins by labeling each cell with its outlet ID | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | ✅️ |
342
-
|[Stream Order](xrspatial/stream_order.py)| Assigns Strahler or Shreve stream order to cells in a drainage network | Strahler 1957, Shreve 1966 | ✅️ | ✅️ | ✅️ | ✅️ |
343
-
|[Stream Order (Dinf)](xrspatial/stream_order_dinf.py)| Strahler/Shreve stream ordering on D-infinity flow direction grids | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
|[Stream Link](xrspatial/stream_link.py)| Assigns unique IDs to each stream segment between junctions | Standard | ✅️ | ✅️ | ✅️ | ✅️ |
346
-
|[Stream Link (Dinf)](xrspatial/stream_link_dinf.py)| Stream link segmentation on D-infinity flow direction grids | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
347
-
|[Stream Link (MFD)](xrspatial/stream_link_mfd.py)| Stream link segmentation on MFD fraction grids | Freeman 1991 | ✅️ | ✅️ | ✅️ | ✅️ |
348
-
|[Snap Pour Point](xrspatial/snap_pour_point.py)| Snaps pour points to the highest-accumulation cell within a search radius | Custom | ✅️ | ✅️ | ✅️ | ✅️ |
349
-
|[Flow Path](xrspatial/flow_path.py)| Traces downstream flow paths from start points through a D8 direction grid | Standard (D8 tracing) | ✅️ | ✅️ | 🔄 | 🔄 |
350
-
|[HAND](xrspatial/hand.py)| Computes Height Above Nearest Drainage by tracing D8 flow to the nearest stream cell | Nobre et al. 2011 | ✅️ | ✅️ | 🔄 | 🔄 |
|[Flow Direction (D8)](xrspatial/hydro/flow_direction_d8.py)| Computes D8 flow direction from each cell toward the steepest downhill neighbor | O'Callaghan & Mark 1984 | ✅️ | ✅️ | ✅️ | ✅️ |
332
+
|[Flow Direction (Dinf)](xrspatial/hydro/flow_direction_dinf.py)| Computes D-infinity flow direction as a continuous angle toward the steepest downslope facet | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
333
+
|[Flow Direction (MFD)](xrspatial/hydro/flow_direction_mfd.py)| Partitions flow to all downslope neighbors with an adaptive exponent (Qin et al. 2007) | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | ✅️ |
334
+
|[Flow Accumulation (D8)](xrspatial/hydro/flow_accumulation_d8.py)| Counts upstream cells draining through each cell in a D8 flow direction grid | Jenson & Domingue 1988 | ✅️ | ✅️ | ✅️ | ✅️ |
335
+
|[Flow Accumulation (Dinf)](xrspatial/hydro/flow_accumulation_dinf.py)| Accumulates upstream area by splitting flow proportionally between two neighbors (Tarboton 1997) | Tarboton 1997 | ✅️ | ✅️ | ✅️ | 🔄 |
336
+
|[Flow Accumulation (MFD)](xrspatial/hydro/flow_accumulation_mfd.py)| Accumulates upstream area through all MFD flow paths weighted by directional fractions | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | 🔄 |
337
+
|[Flow Length (D8)](xrspatial/hydro/flow_length_d8.py)| Computes D8 flow path length from each cell to outlet (downstream) or from divide (upstream) | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | 🔄 |
|[Flow Length (MFD)](xrspatial/hydro/flow_length_mfd.py)| Proportion-weighted flow path length using MFD fractions (downstream or upstream) | Qin et al. 2007 | ✅️ | ✅️ | ✅️ | 🔄 |
340
+
|[Fill (D8)](xrspatial/hydro/fill_d8.py)| Fills depressions in a DEM using Planchon-Darboux iterative flooding | Planchon & Darboux 2002 | ✅️ | ✅️ | ✅️ | ✅️ |
341
+
|[Sink (D8)](xrspatial/hydro/sink_d8.py)| Identifies and labels depression cells in a D8 flow direction grid | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | ✅️ |
342
+
|[Watershed (D8)](xrspatial/hydro/watershed_d8.py)| Labels each cell with the pour point it drains to via D8 flow direction | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | ✅️ |
343
+
|[Watershed (Dinf)](xrspatial/hydro/watershed_dinf.py)| Labels each cell with the pour point it drains to via D-infinity flow direction | Tarboton 1997 | ✅️ | ✅️ | 🔄 | 🔄 |
344
+
|[Watershed (MFD)](xrspatial/hydro/watershed_mfd.py)| Labels each cell with the pour point it drains to via MFD fractions | Qin et al. 2007 | ✅️ | ✅️ | 🔄 | 🔄 |
345
+
|[Basins](xrspatial/hydro/watershed_d8.py)| Delineates drainage basins by labeling each cell with its outlet ID | Standard (D8 tracing) | ✅️ | ✅️ | ✅️ | ✅️ |
346
+
|[Stream Order (D8)](xrspatial/hydro/stream_order_d8.py)| Assigns Strahler or Shreve stream order to cells in a drainage network | Strahler 1957, Shreve 1966 | ✅️ | ✅️ | ✅️ | ✅️ |
347
+
|[Stream Order (Dinf)](xrspatial/hydro/stream_order_dinf.py)| Strahler/Shreve stream ordering on D-infinity flow direction grids | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
|[Stream Link (D8)](xrspatial/hydro/stream_link_d8.py)| Assigns unique IDs to each stream segment between junctions | Standard | ✅️ | ✅️ | ✅️ | ✅️ |
350
+
|[Stream Link (Dinf)](xrspatial/hydro/stream_link_dinf.py)| Stream link segmentation on D-infinity flow direction grids | Tarboton 1997 | ✅️ | ✅️ | ✅️ | ✅️ |
351
+
|[Stream Link (MFD)](xrspatial/hydro/stream_link_mfd.py)| Stream link segmentation on MFD fraction grids | Freeman 1991 | ✅️ | ✅️ | ✅️ | ✅️ |
352
+
|[Snap Pour Point](xrspatial/hydro/snap_pour_point_d8.py)| Snaps pour points to the highest-accumulation cell within a search radius | Custom | ✅️ | ✅️ | ✅️ | ✅️ |
353
+
|[Flow Path (D8)](xrspatial/hydro/flow_path_d8.py)| Traces downstream flow paths from start points through a D8 direction grid | Standard (D8 tracing) | ✅️ | ✅️ | 🔄 | 🔄 |
|[Disaggregate](xrspatial/dasymetric.py)| Redistributes zonal totals to pixels using an ancillary weight surface | Mennis 2003 | ✅️ | ✅️ | ✅️ | ✅️ |
555
-
|[Pycnophylactic](xrspatial/dasymetric.py)| Tobler's pycnophylactic interpolation preserving zone totals via Laplacian smoothing | Tobler 1979 | ✅️ ||||
564
+
|[Pycnophylactic](xrspatial/dasymetric.py)| Tobler's pycnophylactic interpolation preserving zone totals via Laplacian smoothing | Tobler 1979 | ✅️ || 🔄 ||
565
+
|[Validate Disaggregation](xrspatial/dasymetric.py)| Checks that disaggregated pixel sums match the original zone totals | Standard | ✅️ | ✅️ | 🔄 | 🔄 |
0 commit comments