diff --git a/rasterio/_features.pyx b/rasterio/_features.pyx index ade89bac..83b01782 100644 --- a/rasterio/_features.pyx +++ b/rasterio/_features.pyx @@ -4,9 +4,7 @@ import logging import json import numpy as np cimport numpy as np - from rasterio cimport _gdal, _ogr, _io -from rasterio.dtypes import dtype_rev log = logging.getLogger('rasterio') @@ -16,9 +14,6 @@ class NullHandler(logging.Handler): log.addHandler(NullHandler()) -ctypedef np.uint8_t DTYPE_UBYTE_t - - def _shapes(image, mask, connectivity, transform): """Return an iterator over Fiona-style features extracted from the image. @@ -63,7 +58,7 @@ def _shapes(image, mask, connectivity, transform): hband = _gdal.GDALGetRasterBand(hds, 1) if hband == NULL: raise ValueError("NULL band") - retval = io_ubyte(hband, 1, 0, 0, cols, rows, image) + retval = _io.io_ubyte(hband, 1, 0, 0, cols, rows, image) elif isinstance(image, tuple): rdr = image.ds hband = rdr.band(image.bidx) @@ -85,7 +80,7 @@ def _shapes(image, mask, connectivity, transform): a = np.ones(mask.shape, dtype=np.uint8) a[mask == False] = 0 a[mask == True] = 1 - retval = io_ubyte(hmaskband, 1, 0, 0, cols, rows, a) + retval = _io.io_ubyte(hmaskband, 1, 0, 0, cols, rows, a) elif isinstance(mask, tuple): if mask.shape != image.shape: raise ValueError("Mask must have same shape as image") @@ -165,7 +160,7 @@ def _sieve(image, size, connectivity=4, output=None): hbandin = _gdal.GDALGetRasterBand(hdsin, 1) if hbandin == NULL: raise ValueError("NULL input band") - retval = io_ubyte(hbandin, 1, 0, 0, cols, rows, image) + retval = _io.io_ubyte(hbandin, 1, 0, 0, cols, rows, image) elif isinstance(image, tuple): rdr = image.ds hband = rdr.band(image.bidx) @@ -192,7 +187,7 @@ def _sieve(image, size, connectivity=4, output=None): NULL, NULL, NULL) out = output or np.zeros(image.shape, np.uint8) - retval = io_ubyte(hbandout, 0, 0, 0, cols, rows, out) + retval = _io.io_ubyte(hbandout, 0, 0, 0, cols, rows, out) if hdsin != NULL: _gdal.GDALClose(hdsin) @@ -264,7 +259,7 @@ def _rasterize(shapes, image, transform, all_touched): pixel_values[i] = value # First, copy image data to the in-memory band. - retval = io_ubyte(out_band, 1, 0, 0, width, height, image) + retval = _io.io_ubyte(out_band, 1, 0, 0, width, height, image) # Burn the shapes in. retval = _gdal.GDALRasterizeGeometries( @@ -274,7 +269,7 @@ def _rasterize(shapes, image, transform, all_touched): options, NULL, NULL) # Write the in-memory band back to the image. - retval = io_ubyte(out_band, 0, 0, 0, width, height, image) + retval = _io.io_ubyte(out_band, 0, 0, 0, width, height, image) finally: for i in range(num_geometries): @@ -287,19 +282,6 @@ def _rasterize(shapes, image, transform, all_touched): _gdal.CSLDestroy(options) -cdef int io_ubyte( - void *hband, - int mode, - int xoff, - int yoff, - int width, - int height, - np.ndarray[DTYPE_UBYTE_t, ndim=2, mode='c'] buffer): - return _gdal.GDALRasterIO( - hband, mode, xoff, yoff, width, height, - &buffer[0, 0], buffer.shape[1], buffer.shape[0], 1, 0, 0) - - # Mapping of OGR integer geometry types to GeoJSON type names. GEOMETRY_TYPES = { 0: 'Unknown',