winston

A bit like PostGIS ST_SummaryStats for files on disk


Keywords
winston
License
MIT
Install
pip install winston==0.3.0

Documentation

Winston

Latest Release Updates Python 3

A bit like the PostGIS ST_SummaryStats function for rasters on your filesystem. Mostly we're just stringing together some awesome libraries:

Install

Activate your project virtual environment, and then:

pip install winston

If you just want to use the command-line features, you could:

pip install --user winston

Usage

You can either use Winston on the command-line or as a module.

Command-line

To see your options, simply:

winston --help

For example, to get stats for all WKTs in a text file for a given raster:

winston some_file.tif -f wkts.txt

or just for one point, including raster metadata:

winston /path/to/data/*.tif -w 'POINT (-4.483545 54.150744)' -m

Since we require rasterio, you can also use the rio command-line tool to inspect your rasters:

rio insp /path/to/geo.tif

Read more in the Rasterio docs.

Module

You can also use Winston in your code:

>>> import rasterio
>>> from winston.stats import summary
>>> from shapely.geometry import Point
>>> src = rasterio.open('/path/to/raster.tif')
>>> print summary(src)
Summary(count=37324800, sum=49041320.0, mean=5.8627439, min=0.0, max=10.0, std=2.2037256)
>>> print summary(src, bounds=(4, 6))
Summary(count=37324800, sum=9569182.0, mean=5.1044292, min=4.0, max=5.9999995, std=0.56939822)
>>> print summary(src, bounds=(4, 6), mean_only=True)
5.09
>>> print summary(src, Point(-2.36, 51.38).buffer(0.25))
Summary(count=169, sum=1229.4401, mean=8.9740152, min=8.3602285, max=9.4269724, std=0.24473859)

Exporting results is reasonably simple with tablib:

>>> import rasterio
>>> import tablib
>>> from winston.stats import summary
>>> from shapely.geometry import Point
>>> src = rasterio.open('/path/to/raster.tif')
>>> shapes = [Point(x, y).buffer(0.25) for x, y in zip(range(5), range(5, 0, -1))]
>>> summaries = [summary(src, shape) for shape in shapes]
>>> d = tablib.Dataset()
>>> d.dict = [s.__dict__ for s in summaries]
>>> print d.headers
['count', 'sum', 'mean', 'min', 'max', 'std']
>>> open('output.csv', 'w').write(d.csv)