[rasterio] 01/09: Imported Upstream version 0.31.0

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Dec 25 14:13:53 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository rasterio.

commit 5901f230e1fc3aaab6f8454f7d194239c77c06dd
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Dec 25 14:54:45 2015 +0100

    Imported Upstream version 0.31.0
---
 .travis.yml                  |  1 -
 CHANGES.txt                  | 12 ++++++++++++
 rasterio/__init__.py         |  2 +-
 rasterio/_base.pyx           | 12 ++++++++----
 rasterio/_err.pyx            | 10 ++++++++++
 rasterio/_io.pyx             | 14 +++++++++++---
 requirements-dev.txt         |  2 +-
 tests/test_read_boundless.py | 17 ++++++++++++++++
 tests/test_transform.py      | 46 ++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 106 insertions(+), 10 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 7301728..4d96006 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,7 +10,6 @@ env:
     - PIP_FIND_LINKS=file://$HOME/.cache/pip/wheels
     - GDALINST=$HOME/gdalinstall
     - GDALBUILD=$HOME/gdalbuild
-    - CYTHON_COVERAGE=1
   matrix:
     - GDALVERSION = "1.9.2"
     - GDALVERSION = "1.11.2"
diff --git a/CHANGES.txt b/CHANGES.txt
index 1b691b5..19f4033 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,18 @@
 Changes
 =======
 
+0.31.0 (2015-12-18)
+-------------------
+- Warn when rasters have no georeferencing and when the default identity
+  transform will be applied by GDAL (#524, #527).
+- Build OS X wheels using numpy>=1.10.2 (#529).
+- When reading image windows in previous versions, given a window with
+  ((row_start, row_stop), (col_start, col_stop)) if the stop index is greater
+  than the width/height the start index effectively shifts as well. This can
+  manifest itself in pixel misalignment if, e.g. you read block windows with
+  a bit of padding to avoid edge effects. Now the window offsets are determined
+  solely by row_start and col_start.(#532, #533).
+
 0.30.0 (2015-11-16)
 -------------------
 - Added window utilities: get_data_window(), window_union(),
diff --git a/rasterio/__init__.py b/rasterio/__init__.py
index 76ff733..142ce75 100644
--- a/rasterio/__init__.py
+++ b/rasterio/__init__.py
@@ -23,7 +23,7 @@ from rasterio import _err, coords, enums
 
 __all__ = [
     'band', 'open', 'drivers', 'copy', 'pad']
-__version__ = "0.30.0"
+__version__ = "0.31.0"
 
 log = logging.getLogger('rasterio')
 class NullHandler(logging.Handler):
diff --git a/rasterio/_base.pyx b/rasterio/_base.pyx
index b4e2fb9..ea59ac0 100644
--- a/rasterio/_base.pyx
+++ b/rasterio/_base.pyx
@@ -14,7 +14,7 @@ from libc.stdlib cimport malloc, free
 
 from rasterio cimport _gdal, _ogr
 from rasterio._drivers import driver_count, GDALEnv
-from rasterio._err import cpl_errs
+from rasterio._err import cpl_errs, GDALError
 from rasterio import dtypes
 from rasterio.coords import BoundingBox
 from rasterio.transform import Affine
@@ -204,9 +204,13 @@ cdef class DatasetReader(object):
             raise ValueError("Null dataset")
         cdef double gt[6]
         err = _gdal.GDALGetGeoTransform(self._hds, gt)
-        if err:
-            warnings.warn("GDALGetGeoTransform failed, default invalid "
-                          "transform will be returned.")
+
+        if err == GDALError.failure:
+            warnings.warn(
+                "Dataset has no geotransform set.  Default transform "
+                "will be applied (Affine.identity())",
+                UserWarning
+            )
 
         transform = [0]*6
         for i in range(6):
diff --git a/rasterio/_err.pyx b/rasterio/_err.pyx
index b59ce44..bae5c16 100644
--- a/rasterio/_err.pyx
+++ b/rasterio/_err.pyx
@@ -29,6 +29,9 @@ manager raises a more useful and informative error:
     ValueError: The PNG driver does not support update access to existing datasets.
 """
 
+from enums import IntEnum
+
+
 # CPL function declarations.
 cdef extern from "cpl_error.h":
     int CPLGetLastErrorNo()
@@ -68,3 +71,10 @@ cdef class GDALErrCtxManager:
 
 cpl_errs = GDALErrCtxManager()
 
+
+class GDALError(IntEnum):
+    none = 0,  # CE_None
+    debug = 1,  # CE_Debug
+    warning= 2,  # CE_Warning
+    failure = 3,  # CE_Failure
+    fatal = 4  # CE_Fatal
diff --git a/rasterio/_io.pyx b/rasterio/_io.pyx
index 070d0fd..9b003d6 100644
--- a/rasterio/_io.pyx
+++ b/rasterio/_io.pyx
@@ -17,7 +17,7 @@ from rasterio cimport _base, _gdal, _ogr, _io
 from rasterio._base import (
     crop_window, eval_window, window_shape, window_index, tastes_like_gdal)
 from rasterio._drivers import driver_count, GDALEnv
-from rasterio._err import cpl_errs
+from rasterio._err import cpl_errs, GDALError
 from rasterio import dtypes
 from rasterio.coords import BoundingBox
 from rasterio.five import text_type, string_types
@@ -865,9 +865,9 @@ cdef class RasterReader(_base.DatasetReader):
                 roff = 0
                 coff = 0
                 if window[0][0] < 0:
-                    roff = int(round(window_h*scaling_h)) - data_h
+                    roff = -window[0][0] * scaling_h
                 if window[1][0] < 0:
-                    coff = int(round(window_w*scaling_w)) - data_w
+                    coff = -window[1][0] * scaling_w
 
                 for dst, src in zip(
                         out if len(out.shape) == 3 else [out],
@@ -1450,6 +1450,14 @@ cdef class RasterUpdater(RasterReader):
     def write_transform(self, transform):
         if self._hds == NULL:
             raise ValueError("Can't read closed raster file")
+
+        if [abs(v) for v in transform] == [0, 1, 0, 0, 0, 1]:
+            warnings.warn(
+                "Dataset uses default geotransform (Affine.identity). "
+                "No tranform will be written to the output by GDAL.",
+                UserWarning
+            )
+
         cdef double gt[6]
         for i in range(6):
             gt[i] = transform[i]
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 16048fe..925b579 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -3,7 +3,7 @@ cligj
 cython>=0.23.4
 delocate
 enum34
-numpy>=1.8
+numpy>=1.10
 snuggs>=1.2
 pytest>=2.8.2
 pytest-cov>=2.2.0
diff --git a/tests/test_read_boundless.py b/tests/test_read_boundless.py
index 117479f..26e2ed0 100644
--- a/tests/test_read_boundless.py
+++ b/tests/test_read_boundless.py
@@ -84,3 +84,20 @@ def test_read_boundless_masks_zero_stop():
         data = src.read_masks(window=((-200, 0), (-200, 0)), boundless=True)
         assert data.shape == (3, 200, 200)
         assert data.min() == data.max() == src.nodata
+
+def test_read_boundless_noshift():
+    with rasterio.open('tests/data/rgb4.tif') as src:
+        # the read offsets should be determined by start col/row alone
+        # when col stop exceeds image width
+        c1 = src.read(boundless=True,
+                      window=((100, 101), (-1, src.shape[1])))[0, 0, 0:9]
+        c2 = src.read(boundless=True,
+                      window=((100, 101), (-1, src.shape[1] + 1)))[0, 0, 0:9]
+        assert numpy.array_equal(c1, c2)
+
+        # when row stop exceeds image height
+        r1 = src.read(boundless=True,
+                      window=((-1, src.shape[0]), (100, 101)))[0, 0, 0:9]
+        r2 = src.read(boundless=True,
+                      window=((-1, src.shape[0] + 1), (100, 101)))[0, 0, 0:9]
+        assert numpy.array_equal(r1, r2)
diff --git a/tests/test_transform.py b/tests/test_transform.py
index cf0607e..23a8efe 100644
--- a/tests/test_transform.py
+++ b/tests/test_transform.py
@@ -1,3 +1,5 @@
+from affine import Affine
+import pytest
 import rasterio
 from rasterio import transform
 
@@ -74,3 +76,47 @@ def test_window_bounds():
 
             for e, a in zip(expected, actual):
                 assert round(e, 7) == round(a, 7)
+
+
+def test_affine_roundtrip(tmpdir):
+    output = str(tmpdir.join('test.tif'))
+    out_affine = Affine(2, 0, 0, 0, -2, 0)
+
+    with rasterio.open(
+        output, 'w',
+        driver='GTiff',
+        count=1,
+        dtype=rasterio.uint8,
+        width=1,
+        height=1,
+        transform=out_affine
+    ) as out:
+        assert out.affine == out_affine
+
+    with rasterio.open(output) as out:
+        assert out.affine == out_affine
+
+
+def test_affine_identity(tmpdir):
+    """
+    Setting a transform with absolute values equivalent to Affine.identity()
+    should result in a warning (not captured here) and read with
+    affine that matches Affine.identity().
+    """
+
+    output = str(tmpdir.join('test.tif'))
+    out_affine = Affine(1, 0, 0, 0, -1, 0)
+
+    with rasterio.open(
+        output, 'w',
+        driver='GTiff',
+        count=1,
+        dtype=rasterio.uint8,
+        width=1,
+        height=1,
+        transform=out_affine
+    ) as out:
+        assert out.affine == out_affine
+
+    with rasterio.open(output) as out:
+        assert out.affine == Affine.identity()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/rasterio.git



More information about the Pkg-grass-devel mailing list