GithubHelp home page GithubHelp logo

meteogrid / python-raster-stats Goto Github PK

View Code? Open in Web Editor NEW

This project forked from perrygeo/python-rasterstats

0.0 4.0 0.0 478 KB

Summary statistics of geospatial raster datasets values based on vector geometries.

License: BSD 3-Clause "New" or "Revised" License

python-raster-stats's Introduction

rasterstats

BuildStatus CoverageStatus PyPiVersion PyPiDownloads

The rasterstats python module provides a fast and flexible tool to summarize geospatial raster datasets based on vector geometries (i.e. zonal statistics).

  • Raster data support
    • Any raster data source supported by GDAL
    • Support for continuous and categorical
    • Respects null/no-data metadata or takes argument
  • Vector data support
    • Points, Lines, Polygon and Multi-* geometries
    • Flexible input formats
      • Any vector data source supported by OGR
      • Python objects that are geojson-like mappings or support the geo_interface
      • Well-Known Text/Binary (WKT/WKB) geometries
  • Depends on GDAL, Shapely and numpy

Install

Using ubuntu 12.04:

sudo apt-get install python-numpy python-gdal
pip install rasterstats

Example Usage

Given a polygon vector layer and a digitial elevation model (DEM) raster, calculate the mean elevation of each polygon:

zones elevation
>>> from rasterstats import raster_stats
>>> stats = raster_stats("tests/data/polygons.shp", "tests/data/elevation.tif")

>>> stats[1].keys()
    ['__fid__', 'count', 'min', 'max', 'mean']

>>> [(f['__fid__'], f['mean']) for f in stats]
    [(1, 756.6057470703125), (2, 114.660084635416666)]

Statistics

By default, the raster_stats function will return the following statistics

  • min
  • max
  • mean
  • count

Optionally, these statistics are also available

  • sum
  • std
  • median
  • majority
  • minority
  • unique
  • range

You can specify the statistics to calculate using the stats argument:

>>> stats = raster_stats("tests/data/polygons.shp",
                         "tests/data/elevation.tif"
                         stats=['min', 'max', 'median', 'majority', 'sum'])

>>> # also takes space-delimited string
>>> stats = raster_stats("tests/data/polygons.shp",
                         "tests/data/elevation.tif"
                         stats="min max median majority sum")

Note that the more complex statistics may require significantly more processing so performance can be impacted based on which statistics you choose to calculate.

Specifying Geometries

In addition to the basic usage above, rasterstats supports other mechanisms of specifying vector geometeries.

It integrates with other python objects that support the geo_interface (e.g. Fiona, Shapely, ArcPy, PyShp, GeoDjango):

>>> import fiona

>>> # an iterable of objects with geo_interface
>>> lyr = fiona.open('/path/to/vector.shp')
>>> features = (x for x in lyr if x['properties']['state'] == 'CT')
>>> raster_stats(features, '/path/to/elevation.tif')
...

>>> # a single object with a geo_interface
>>> lyr = fiona.open('/path/to/vector.shp')
>>> raster_stats(lyr.next(), '/path/to/elevation.tif')
...

Or by using with geometries in "Well-Known" formats:

>>> raster_stats('POINT(-124 42)', '/path/to/elevation.tif')
...

Feature Properties

By default, an __fid__ property is added to each feature's results. None of the other feature attributes/proprties are copied over unless copy_properties is set to True:

>>> stats = raster_stats("tests/data/polygons.shp",
                         "tests/data/elevation.tif"
                         copy_properties=True)

>>> stats[0].has_key('name')  # name field from original shapefile is retained
True

Working with categorical rasters

You can treat rasters as categorical (i.e. raster values represent discrete classes) if you're only interested in the counts of unique pixel values.

For example, you may have a raster vegetation dataset and want to summarize vegetation by polygon. Statistics such as mean, median, sum, etc. don't make much sense in this context (What's the sum of oak + grassland?).

The polygon below is comprised of 12 pixels of oak (raster value 32) and 78 pixels of grassland (raster value 33):

>>> raster_stats(lyr.next(), '/path/to/vegetation.tif', categorical=True)

>>> [{'__fid__': 1, 32: 12, 33: 78}]

Keep in mind that rasterstats just reports on the pixel values as keys; It is up to the programmer to associate the pixel values with their appropriate meaning (e.g. oak == 32) for reporting.

Issues

Find a bug? Report it via github issues by providing

  • a link to download the smallest possible raster and vector dataset necessary to reproduce the error
  • python code or command to reproduce the error
  • information on your environment: versions of python, gdal and numpy and system memory

python-raster-stats's People

Contributors

perrygeo avatar

Watchers

James Cloos avatar Marcos Sánchez Provencio avatar  avatar  avatar

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.