Get nearest pixel(s) with value (not NODATA) to specified pixel.
1688 int extent[4] = {0};
1689 int max_extent[4] = {0};
1692 uint32_t _d[2] = {0};
1707 assert(NULL !=
band);
1708 assert(NULL != npixels);
1725 exclude_nodata_value && (
1726 (x < 0 || x >
band->width) ||
1727 (y < 0 || y >
band->height)
1734 else if (
x >
band->width)
1739 else if (
y >
band->height)
1752 RASTER_DEBUG(4,
"No nearest pixels possible for provided pixel and distances");
1758 if (!
band->hasnodata)
1759 exclude_nodata_value =
FALSE;
1761 else if (exclude_nodata_value &&
band->isnodata) {
1762 RASTER_DEBUG(4,
"No nearest pixels possible as band is NODATA and excluding NODATA values");
1772 b = abs(
x -
band->width);
1781 b = abs(
y -
band->height);
1805 max_extent[0], max_extent[1], max_extent[2], max_extent[3]);
1813 extent[0] =
x - (int)_d[0];
1814 extent[1] =
y - (int)_d[1];
1815 extent[2] =
x + (int)_d[0];
1816 extent[3] =
y + (int)_d[1];
1818 RASTER_DEBUGF(4,
"Processing distances: %d x %d", _d[0], _d[1]);
1820 extent[0], extent[1], extent[2], extent[3]);
1822 for (i = 0; i < 2; i++) {
1826 _max = extent[2] - extent[0] + 1;
1829 _max = extent[3] - extent[1] + 1;
1832 for (j = 0; j < 2; j++) {
1861 for (k = 0; k < (uint32_t) _max; k++) {
1864 _x < max_extent[0] || _x > max_extent[2] ||
1865 _y < max_extent[1] || _y > max_extent[3]
1873 (_x < 0 || _x >=
band->width) ||
1874 (_y < 0 || _y >=
band->height)
1877 if (!
band->hasnodata)
1882 RASTER_DEBUGF(4,
"NODATA pixel outside band extent: (x, y, val) = (%d, %d, %f)", _x, _y,
pixval);
1893 rterror(
"rt_band_get_nearest_pixel: Could not get pixel value");
1902 if (!exclude_nodata_value || (exclude_nodata_value && !isnodata)) {
1904 RASTER_DEBUGF(4,
"Adding pixel to set of nearest pixels: (x, y, val) = (%d, %d, %f)", _x, _y,
pixval);
1907 if (*npixels == NULL)
1911 if (*npixels == NULL) {
1912 rterror(
"rt_band_get_nearest_pixel: Could not allocate memory for nearest pixel(s)");
1916 npixel = &((*npixels)[
count - 1]);
1922 if (!inextent && !
band->hasnodata)
1936 else if (d0 &&
count)
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
void * rtalloc(size_t size)
Wrappers used for managing memory.
#define RASTER_DEBUG(level, msg)
#define RASTER_DEBUGF(level, msg,...)
double rt_pixtype_get_min_value(rt_pixtype pixtype)
Return minimum value possible for pixel type.
struct rt_pixel_t * rt_pixel
void * rtrealloc(void *mem, size_t size)
const char * rt_pixtype_name(rt_pixtype pixtype)
void rtdealloc(void *mem)
static double distance(double x1, double y1, double x2, double y2)
rt_errorstate rt_band_get_pixel(rt_band band, int x, int y, double *value, int *nodata)
Get pixel value.