Giter Site home page Giter Site logo

xarray-spatial's Introduction

๐ŸŒ xarray-spatial: Raster-Based Spatial Analysis in Python

Build Status Build status PyPI version Downloads License


History of OS GIS Timeline


title

๐Ÿ“ Fast, Accurate Python library for Raster Operations

โšก Extensible with Numba

โฉ Scalable with Dask

๐ŸŽŠ Free of GDAL / GEOS Dependencies

๐ŸŒ General-Purpose Spatial Processing, Geared Towards GIS Professionals


Xarray-Spatial implements common raster analysis functions using Numba and provides an easy-to-install, easy-to-extend codebase for raster analysis.

Installation

# via pip
pip install xarray-spatial

# via conda
conda install -c conda-forge xarray-spatial

xarray-spatial grew out of the Datashader project, which provides fast rasterization of vector data (points, lines, polygons, meshes, and rasters) for use with xarray-spatial.

xarray-spatial does not depend on GDAL / GEOS, which makes it fully extensible in Python but does limit the breadth of operations that can be covered. xarray-spatial is meant to include the core raster-analysis functions needed for GIS developers / analysts, implemented independently of the non-Python geo stack.

Our documentation is still under constructions, but docs can be found here.

Raster-huh?

Rasters are regularly gridded datasets like GeoTIFFs, JPGs, and PNGs.

In the GIS world, rasters are used for representing continuous phenomena (e.g. elevation, rainfall, distance), either directly as numerical values, or as RGB images created for humans to view. Rasters typically have two spatial dimensions, but may have any number of other dimensions (time, type of measurement, etc.)

Supported Spatial Functions with Supported Inputs

Name / Module NumPy xr.DataArray Dask xr.DataArray CuPy GPU xr.DataArray Dask GPU xr.DataArray
Aspect / aspect.py YES NO YES NO
Bump Mapping / bump.py YES NO NO NO
Equal Interval / classify.py YES NO NO NO
Natural Breaks / classify.py YES NO NO NO
Reclassify / classify.py YES NO NO NO
Quantile / classify.py YES NO NO NO
Curvature / curvature.py YES NO NO NO
Apply / focal.py YES NO NO NO
Hotspots / focal.py YES NO NO NO
Mean / focal.py YES NO NO NO
Focal Statistics / focal.py YES NO YES NO
Hillshade / hillshade.py YES YES NO NO
Atmospherically Resistant Vegetation Index (ARVI) / multispectral.py YES NO YES NO
Enhanced Built-Up and Bareness Index (EBBI) / multispectral.py YES NO YES NO
Enhanced Vegetation Index (EVI) / multispectral.py YES NO YES NO
Green Chlorophyll Index (GCI) / multispectral.py YES NO YES NO
Normalized Burn Ratio (NBR) / multispectral.py YES NO YES NO
Normalized Burn Ratio 2 (NBR2) / multispectral.py YES NO YES NO
Normalized Difference Moisture Index (NDMI) / multispectral.py YES NO YES NO
Normalized Difference Vegetation Index (NDVI) / multispectral.py YES NO YES NO
Soil Adjusted Vegetation Index (SAVI) / multispectral.py YES NO YES NO
Structure Insensitive Pigment Index (SIPI) / multispectral.py YES NO YES NO
A* Pathfinging / pathfinding.py YES NO NO NO
Perlin Noise / perlin.py YES NO NO NO
Allocation / proximity.py YES NO NO NO
Direction / proximity.py YES NO NO NO
Proximity / proximity.py YES NO NO NO
Slope / slope.py YES YES YES NO
Terrain Generation / terrain.py YES NO NO NO
Viewshed / viewshed.py YES NO NO NO
Apply / zonal.py YES NO NO NO
Crop / zonal.py YES NO NO NO
Regions / zonal.py YES NO NO NO
Trim / zonal.py YES NO NO NO
Zonal Statistics / zonal.py YES NO NO NO
Zonal Cross Tabulate / zonal.py YES NO NO NO

Usage

Basic Pattern
import xarray as xr
from xrspatial import hillshade

my_dataarray = xr.DataArray(...)
hillshaded_dataarray = hillshade(my_dataarray)

Check out the user guide here.


title title

Dependencies

xarray-spatial currently depends on Datashader, but will soon be updated to depend only on xarray and numba, while still being able to make use of Datashader output when available.

title

Notes on GDAL

Within the Python ecosystem, many geospatial libraries interface with the GDAL C++ library for raster and vector input, output, and analysis (e.g. rasterio, rasterstats, geopandas). GDAL is robust, performant, and has decades of great work behind it. For years, off-loading expensive computations to the C/C++ level in this way has been a key performance strategy for Python libraries (obviously...Python itself is implemented in C!).

However, wrapping GDAL has a few drawbacks for Python developers and data scientists:

  • GDAL can be a pain to build / install.
  • GDAL is hard for Python developers/analysts to extend, because it requires understanding multiple languages.
  • GDAL's data structures are defined at the C/C++ level, which constrains how they can be accessed from Python.

With the introduction of projects like Numba, Python gained new ways to provide high-performance code directly in Python, without depending on or being constrained by separate C/C++ extensions. xarray-spatial implements algorithms using Numba and Dask, making all of its source code available as pure Python without any "black box" barriers that obscure what is going on and prevent full optimization. Projects can make use of the functionality provided by xarray-spatial where available, while still using GDAL where required for other tasks.

Contributors

  • @brendancol
  • @thuydotm
  • @jbednar
  • @pablomakepath
  • @kristinepetrosyan
  • @sjsrey
  • @giancastro
  • @ocefpaf
  • @rsignell-usgs
  • @marcozimmermannpm
  • @jthetzel
  • @chase-dwelle

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.