From: Bborie Park Date: Tue, 7 Jan 2014 04:16:00 +0000 (+0000) Subject: Addition of mask parameter for ST_MapAlgebra. Merge of pull request 17 from github... X-Git-Tag: 2.2.0rc1~1275 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a89b72f14cb1d51975a315c630c760976c56f132;p=postgis Addition of mask parameter for ST_MapAlgebra. Merge of pull request 17 from github. Lots of thanks to nclay for the hard work. Ticket #2341. git-svn-id: http://svn.osgeo.org/postgis/trunk@12179 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index ed02cf808..f846f7eb3 100644 --- a/NEWS +++ b/NEWS @@ -14,11 +14,12 @@ PostGIS 2.2.0 * New Features * - - #2430, ST_ForceCurve - Added missing variants of ST_TPI(), ST_TRI() and ST_Roughness() - #1678, Added GUC postgis.gdal.datapath to specify GDAL config variable GDAL_DATA + - #2341, New mask parameter for ST_MapAlgebra - #2397, read encoding info automatically in shapefile loader + - #2430, ST_ForceCurve - #2565, ST_SummaryStatsAgg() - #2567, ST_CountAgg() diff --git a/install-sh b/install-sh index 6781b987b..a9244eb07 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2009-04-28.21; # UTC +scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -156,6 +156,10 @@ while test $# -ne 0; do -s) stripcmd=$stripprog;; -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac shift;; -T) no_target_directory=true;; @@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then fi shift # arg dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac done fi @@ -200,7 +208,11 @@ if test $# -eq 0; then fi if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. @@ -228,9 +240,9 @@ fi for src do - # Protect names starting with `-'. + # Protect names problematic for `test' and other utilities. case $src in - -*) src=./$src;; + -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then @@ -252,12 +264,7 @@ do echo "$0: no destination specified." >&2 exit 1 fi - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. @@ -385,7 +392,7 @@ do case $dstdir in /*) prefix='/';; - -*) prefix='./';; + [-=\(\)!]*) prefix='./';; *) prefix='';; esac @@ -403,7 +410,7 @@ do for d do - test -z "$d" && continue + test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then diff --git a/raster/rt_core/librtcore.h b/raster/rt_core/librtcore.h index 8372f7623..f1c1b96cc 100644 --- a/raster/rt_core/librtcore.h +++ b/raster/rt_core/librtcore.h @@ -11,6 +11,7 @@ * Copyright (C) 2009-2011 Pierre Racine * Copyright (C) 2009-2011 Mateusz Loskot * Copyright (C) 2008-2009 Sandro Santilli + * Copyright (C) 2013 Nathaneil Hunter Clay arg->values[i]), diff --git a/raster/rt_core/rt_pixel.c b/raster/rt_core/rt_pixel.c index a380d9911..85018f643 100644 --- a/raster/rt_core/rt_pixel.c +++ b/raster/rt_core/rt_pixel.c @@ -11,6 +11,7 @@ * Copyright (C) 2009-2011 Pierre Racine * Copyright (C) 2009-2011 Mateusz Loskot * Copyright (C) 2008-2009 Sandro Santilli + * Copyright (C) 2013 Nathaniel Hunter Clay * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -269,6 +270,7 @@ rt_errorstate rt_pixtype_compare_clamped_values( * * @param npixel : array of rt_pixel objects * @param count : number of elements in npixel + * @param mask : mask to be respected when retruning array * @param x : the column of the center pixel (0-based) * @param y : the line of the center pixel (0-based) * @param distancex : the number of pixels around the specified pixel @@ -283,7 +285,7 @@ rt_errorstate rt_pixtype_compare_clamped_values( * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_pixel_set_to_array( - rt_pixel npixel, int count, + rt_pixel npixel, int count, rt_mask mask, int x, int y, uint16_t distancex, uint16_t distancey, double ***value, @@ -308,6 +310,19 @@ rt_errorstate rt_pixel_set_to_array( dim[1] = distancey * 2 + 1; RASTER_DEBUGF(4, "dimensions = %d x %d", dim[0], dim[1]); + /* make sure that the dimx and dimy match mask */ + if( mask != NULL) { + if ( dim[0] != mask-> dimx || dim[1] != mask->dimy ){ + rterror("rt_pixel_set_array: mask dimentions do not match given dims"); + return ES_ERROR; + } + + if ( mask->values == NULL || mask->nodata == NULL ) { + rterror("rt_pixel_set_array: was not properly setup"); + return ES_ERROR; + } + + } /* establish 2D arrays (Y axis) */ values = rtalloc(sizeof(double *) * dim[1]); nodatas = rtalloc(sizeof(int *) * dim[1]); @@ -368,8 +383,28 @@ rt_errorstate rt_pixel_set_to_array( RASTER_DEBUGF(4, "absolute x,y: %d x %d", npixel[i].x, npixel[i].y); RASTER_DEBUGF(4, "relative x,y: %d x %d", _x, _y); - values[_y][_x] = npixel[i].value; - nodatas[_y][_x] = 0; + if ( mask == NULL ) { + values[_y][_x] = npixel[i].value; + nodatas[_y][_x] = 0; + }else{ + if( mask->weighted == 0 ){ + if( FLT_EQ( mask->values[_y][_x],0) || mask->nodata[_y][_x] == 1 ){ + values[_y][_x] = 0; + nodatas[_y][_x] = 1; + }else{ + values[_y][_x] = npixel[i].value; + nodatas[_y][_x] = 0; + } + }else{ + if( mask->nodata[_y][_x] == 1 ){ + values[_y][_x] = 0; + nodatas[_y][_x] = 1; + }else{ + values[_y][_x] = npixel[i].value * mask->values[_y][_x]; + nodatas[_y][_x] = 0; + } + } + } RASTER_DEBUGF(4, "(x, y, nodata, value) = (%d, %d, %d, %f)", _x, _y, nodatas[_y][_x], values[_y][_x]); } diff --git a/raster/rt_pg/rtpg_mapalgebra.c b/raster/rt_pg/rtpg_mapalgebra.c index 8b126d744..ff20754c0 100644 --- a/raster/rt_pg/rtpg_mapalgebra.c +++ b/raster/rt_pg/rtpg_mapalgebra.c @@ -11,6 +11,7 @@ * Copyright (C) 2009-2011 Pierre Racine * Copyright (C) 2009-2011 Mateusz Loskot * Copyright (C) 2008-2009 Sandro Santilli + * Copyright (C) 2013 Nathaniel Hunter Clay * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -102,6 +103,7 @@ struct rtpg_nmapalgebra_arg_t { rt_extenttype extenttype; /* ouput raster's extent type */ rt_pgraster *pgcextent; /* custom extent of type rt_pgraster */ rt_raster cextent; /* custom extent of type rt_raster */ + rt_mask mask; /* mask for the nmapalgebra operation */ rtpg_nmapalgebra_callback_arg callback; }; @@ -133,6 +135,7 @@ static rtpg_nmapalgebra_arg rtpg_nmapalgebra_arg_init() { arg->extenttype = ET_INTERSECTION; arg->pgcextent = NULL; arg->cextent = NULL; + arg->mask = NULL; arg->callback.ufc_noid = InvalidOid; arg->callback.ufc_nullcount = 0; @@ -160,6 +163,8 @@ static void rtpg_nmapalgebra_arg_destroy(rtpg_nmapalgebra_arg arg) { if (arg->cextent != NULL) rt_raster_destroy(arg->cextent); + if( arg->mask != NULL ) + pfree(arg->mask); pfree(arg); } @@ -209,13 +214,15 @@ static int rtpg_nmapalgebra_rastbandarg_process(rtpg_nmapalgebra_arg arg, ArrayT arg->ownsdata = palloc(sizeof(uint8_t) * arg->numraster); arg->nband = palloc(sizeof(int) * arg->numraster); arg->hasband = palloc(sizeof(uint8_t) * arg->numraster); + arg->mask = palloc(sizeof(struct rt_mask_t)); if ( arg->pgraster == NULL || arg->raster == NULL || arg->isempty == NULL || arg->ownsdata == NULL || arg->nband == NULL || - arg->hasband == NULL + arg->hasband == NULL || + arg->mask == NULL ) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Could not allocate memory for processing rastbandarg"); return 0; @@ -499,6 +506,19 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) { rtpg_nmapalgebra_arg arg = NULL; rt_iterator itrset; + ArrayType *maskArray; + Oid etype; + Datum *maskElements; + bool *maskNulls; + int16 typlen; + bool typbyval; + char typalign; + int ndims = 0; + int num; + int *maskDims; + int x,y; + + int i = 0; int noerr = 0; int allnull = 0; @@ -551,12 +571,17 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) } /* distancex (3) */ - if (!PG_ARGISNULL(3)) + if (!PG_ARGISNULL(3)){ arg->distance[0] = PG_GETARG_INT32(3); - /* distancey (4) */ - if (!PG_ARGISNULL(4)) + }else{ + arg->distance[0] = 0; + } + /* distancey (4) */ + if (!PG_ARGISNULL(4)){ arg->distance[1] = PG_GETARG_INT32(4); - + }else{ + arg->distance[1] = 0; + } if (arg->distance[0] < 0 || arg->distance[1] < 0) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Distance for X and Y axis must be greater than or equal to zero"); @@ -607,6 +632,111 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) } noerr = 1; + + /* mask (7) */ + + if( PG_ARGISNULL(7) ){ + pfree(arg->mask); + arg->mask = NULL; + }else{ + maskArray = PG_GETARG_ARRAYTYPE_P(7); + etype = ARR_ELEMTYPE(maskArray); + get_typlenbyvalalign(etype,&typlen,&typbyval,&typalign); + + switch(etype){ + case FLOAT4OID: + case FLOAT8OID: + break; + default: + rtpg_nmapalgebra_arg_destroy(arg); + elog(ERROR,"RASTER_nMapAlgerbra: Mask data type must be FLOAT8 or FLOAT4."); + PG_RETURN_NULL(); + } + + ndims = ARR_NDIM(maskArray); + + if( ndims != 2 ){ + elog(ERROR, "RASTER_nMapAlgerbra: Mask Must be a 2D array."); + rtpg_nmapalgebra_arg_destroy(arg); + PG_RETURN_NULL(); + } + + maskDims = ARR_DIMS(maskArray); + + + if ( maskDims[0] % 2 == 0 || maskDims[1] % 2 == 0 ){ + elog(ERROR,"RASTER_nMapAlgerbra: Mask dimenstions must be odd."); + rtpg_nmapalgebra_arg_destroy(arg); + PG_RETURN_NULL(); + } + + deconstruct_array( + maskArray, + etype, + typlen, typbyval,typalign, + &maskElements,&maskNulls,&num + ); + + if (num < 1 || num != (maskDims[0] * maskDims[1])) { + if (num) { + pfree(maskElements); + pfree(maskNulls); + } + elog(ERROR, "RASTER_nMapAlgerbra: Could not deconstruct new values array."); + rtpg_nmapalgebra_arg_destroy(arg); + PG_RETURN_NULL(); + } + + + /* allocate mem for mask array */ + arg->mask->values = palloc(sizeof(double*)* maskDims[0]); + arg->mask->nodata = palloc(sizeof(int*)*maskDims[0]); + for(i = 0; i < maskDims[0]; i++){ + arg->mask->values[i] = (double*) palloc(sizeof(double) * maskDims[1]); + arg->mask->nodata[i] = (int*) palloc(sizeof(int) * maskDims[1]); + } + /* place values in to mask */ + i = 0; + for( y = 0; y < maskDims[0]; y++ ){ + for( x = 0; x < maskDims[1]; x++){ + if(maskNulls[i]){ + arg->mask->values[y][x] = 0; + arg->mask->nodata[y][x] = 1; + }else{ + switch(etype){ + case FLOAT4OID: + arg->mask->values[y][x] = (double) DatumGetFloat4(maskElements[i]); + arg->mask->nodata[y][x] = 0; + break; + case FLOAT8OID: + arg->mask->values[y][x] = (double) DatumGetFloat8(maskElements[i]); + arg->mask->nodata[y][x] = 0; + } + } + i++; + } + } + /*set mask dimenstions*/ + arg->mask->dimx = maskDims[0]; + arg->mask->dimy = maskDims[1]; + if ( maskDims[0] == 1 && maskDims[1] == 1){ + arg->distance[0] = 0; + arg->distance[1] = 0; + }else{ + arg->distance[0] = maskDims[0] % 2; + arg->distance[1] = maskDims[1] % 2; + } + }/*end if else argisnull*/ + + /* (8) weighted boolean */ + if (PG_ARGISNULL(8) || !PG_GETARG_BOOL(8) ){ + if ( arg->mask != NULL ) + arg->mask->weighted = 0; + }else{ + if(arg->mask !=NULL ) + arg->mask->weighted = 1; + } + /* all rasters are empty, return empty raster */ if (allempty == arg->numraster) { elog(NOTICE, "All input rasters are empty. Returning empty raster"); @@ -678,8 +808,8 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) memset(arg->callback.ufc_info.argnull, FALSE, sizeof(bool) * arg->callback.ufl_info.fn_nargs); /* userargs (7) */ - if (!PG_ARGISNULL(7)) - arg->callback.ufc_info.arg[2] = PG_GETARG_DATUM(7); + if (!PG_ARGISNULL(9)) + arg->callback.ufc_info.arg[2] = PG_GETARG_DATUM(9); else { arg->callback.ufc_info.arg[2] = (Datum) NULL; arg->callback.ufc_info.argnull[2] = TRUE; @@ -753,6 +883,7 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) arg->pixtype, arg->hasnodata, arg->nodataval, arg->distance[0], arg->distance[1], + arg->mask, &(arg->callback), rtpg_nmapalgebra_callback, &raster @@ -1441,6 +1572,7 @@ Datum RASTER_nMapAlgebraExpr(PG_FUNCTION_ARGS) arg->bandarg->pixtype, arg->bandarg->hasnodata, arg->bandarg->nodataval, 0, 0, + NULL, &(arg->callback), rtpg_nmapalgebraexpr_callback, &raster @@ -2424,6 +2556,7 @@ Datum RASTER_union_transfn(PG_FUNCTION_ARGS) pixtype, hasnodata, nodataval, 0, 0, + NULL, &utype, rtpg_union_callback, &_raster @@ -2516,6 +2649,7 @@ Datum RASTER_union_transfn(PG_FUNCTION_ARGS) pixtype, hasnodata, nodataval, 0, 0, + NULL, &utype, rtpg_union_callback, &_raster @@ -2630,6 +2764,7 @@ Datum RASTER_union_finalfn(PG_FUNCTION_ARGS) hasnodata, nodataval, 0, 0, NULL, + NULL, rtpg_union_mean_callback, &_raster ); @@ -2642,6 +2777,7 @@ Datum RASTER_union_finalfn(PG_FUNCTION_ARGS) hasnodata, nodataval, 0, 0, NULL, + NULL, rtpg_union_range_callback, &_raster ); @@ -3189,6 +3325,7 @@ Datum RASTER_clip(PG_FUNCTION_ARGS) hasnodata, nodataval, 0, 0, NULL, + NULL, rtpg_clip_callback, &_raster ); diff --git a/raster/rt_pg/rtpg_pixel.c b/raster/rt_pg/rtpg_pixel.c index 879233898..af8a90bfc 100644 --- a/raster/rt_pg/rtpg_pixel.c +++ b/raster/rt_pg/rtpg_pixel.c @@ -1541,6 +1541,7 @@ Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) pixtype, hasnodata, nodataval, 0, 0, + NULL, arg, rtpg_setvalues_geomval_callback, &_raster @@ -2223,7 +2224,7 @@ Datum RASTER_neighborhood(PG_FUNCTION_ARGS) /* convert set of rt_pixel to 2D array */ /* dim is passed with element 0 being Y-axis and element 1 being X-axis */ count = rt_pixel_set_to_array( - npixels, count, + npixels, count, NULL, _x, _y, distance[0], distance[1], &value2D, diff --git a/raster/rt_pg/rtpostgis.sql.in b/raster/rt_pg/rtpostgis.sql.in index d50ab37e3..b4e0b4e32 100644 --- a/raster/rt_pg/rtpostgis.sql.in +++ b/raster/rt_pg/rtpostgis.sql.in @@ -2976,12 +2976,15 @@ CREATE OR REPLACE FUNCTION _st_mapalgebra( pixeltype text DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, extenttype text DEFAULT 'INTERSECTION', customextent raster DEFAULT NULL, + mask double precision[][] DEFAULT NULL, weighted boolean DEFAULT NULL, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_nMapAlgebra' LANGUAGE 'c' STABLE; + + CREATE OR REPLACE FUNCTION st_mapalgebra( rastbandargset rastbandarg[], callbackfunc regprocedure, @@ -2991,7 +2994,7 @@ CREATE OR REPLACE FUNCTION st_mapalgebra( VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster - AS $$ SELECT _ST_MapAlgebra($1, $2, $3, $6, $7, $4, $5, VARIADIC $8) $$ + AS $$ SELECT _ST_MapAlgebra($1, $2, $3, $6, $7, $4, $5,NULL::double precision [],NULL::boolean, VARIADIC $8) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( @@ -3026,7 +3029,7 @@ CREATE OR REPLACE FUNCTION st_mapalgebra( RETURN NULL; END IF; - RETURN _ST_MapAlgebra(argset, $3, $4, $7, $8, $5, $6, VARIADIC $9); + RETURN _ST_MapAlgebra(argset, $3, $4, $7, $8, $5, $6,NULL::double precision [],NULL::boolean, VARIADIC $9); END; $$ LANGUAGE 'plpgsql' STABLE; @@ -3039,7 +3042,7 @@ CREATE OR REPLACE FUNCTION st_mapalgebra( VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster - AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2)]::rastbandarg[], $3, $4, $7, $8, $5, $6, VARIADIC $9) $$ + AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2)]::rastbandarg[], $3, $4, $7, $8, $5, $6,NULL::double precision [],NULL::boolean, VARIADIC $9) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( @@ -3052,9 +3055,22 @@ CREATE OR REPLACE FUNCTION st_mapalgebra( VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster - AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2), ROW($3, $4)]::rastbandarg[], $5, $6, $9, $10, $7, $8, VARIADIC $11) $$ + AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2), ROW($3, $4)]::rastbandarg[], $5, $6, $9, $10, $7, $8,NULL::double precision [],NULL::boolean, VARIADIC $11) $$ LANGUAGE 'sql' STABLE; +CREATE OR REPLACE FUNCTION st_mapalgebra( + rast raster, nband int, + callbackfunc regprocedure, + mask double precision [][], weighted boolean, + pixeltype text DEFAULT NULL, + extenttype text DEFAULT 'INTERSECTION', customextent raster DEFAULT NULL, + VARIADIC userargs text[] DEFAULT NULL +) + RETURNS raster + AS $$ + select _st_mapalgebra(ARRAY[ROW($1,$2)]::rastbandarg[],$3,$6,NULL::integer,NULL::integer,$7,$8,$4,$5,VARIADIC $9) + $$ LANGUAGE 'sql' STABLE; + ----------------------------------------------------------------------- -- 1 or 2-Raster ST_MapAlgebra with expressions ----------------------------------------------------------------------- diff --git a/raster/test/cunit/cu_band_misc.c b/raster/test/cunit/cu_band_misc.c index 8d06b5c31..908ebebce 100644 --- a/raster/test/cunit/cu_band_misc.c +++ b/raster/test/cunit/cu_band_misc.c @@ -23,6 +23,7 @@ #include "CUnit/Basic.h" #include "cu_tester.h" +#include static void test_band_get_nearest_pixel() { rt_raster rast; @@ -175,7 +176,7 @@ static void test_band_get_nearest_pixel() { CU_ASSERT_EQUAL(rtn, 2); rtn = rt_pixel_set_to_array( - npixels, rtn, + npixels, rtn, NULL, -1, 1, 1, 1, &value, @@ -195,7 +196,6 @@ static void test_band_get_nearest_pixel() { rtdealloc(nodata); rtdealloc(value); - /* -2,2 distance 1 */ rtn = rt_band_get_nearest_pixel( band, @@ -367,10 +367,222 @@ static void test_band_get_pixel_of_value() { cu_free_raster(rast); } +static void test_pixel_set_to_array(){ + rt_raster rast; + rt_band band; + rt_mask mask = NULL; + uint32_t x, y; + int rtn; + const int maxX = 10; + const int maxY = 10; + int maskX = 3; + int maskY = 3; + rt_pixel npixels = NULL; + int i; + double **value; + double val; + int nod; + int **nodata; + int dimx; + int dimy; + + rast = rt_raster_new(maxX, maxY); + CU_ASSERT(rast != NULL); + + band = cu_add_band(rast, PT_32BF, 1, 0); + CU_ASSERT(band != NULL); + + for (x = 0; x < maxX; x++) { + for (y = 0; y < maxY; y++) { + rtn = rt_band_set_pixel(band, x, y, 1, NULL); + } + } + + + rtn = rt_band_get_pixel(band,4,4,&val,&nod); + CU_ASSERT_EQUAL(nod,0); + CU_ASSERT_DOUBLE_EQUAL(val,1,.01); + + /* set up mask */ + + mask = (rt_mask) rtalloc(sizeof(struct rt_mask_t) ); + CU_ASSERT(mask != NULL); + mask->values = rtalloc(sizeof(double*)*maskY); + mask->nodata = rtalloc(sizeof(int*)*maskY); + + for( i = 0; i < maskY; i++) { + mask->values[i] = rtalloc(sizeof(double) *maskX); + mask->nodata[i] = rtalloc(sizeof(int) *maskX); + } + + CU_ASSERT(mask->values != NULL); + CU_ASSERT(mask->nodata != NULL); + + /* set mask to nodata */ + + for(y = 0; y < maskY; y++) { + for(x = 0; x < maskX; x++){ + mask->values[y][x]= 0; + mask->nodata[y][x]= 1; + } + } + + mask->dimx = maskX; + mask->dimy = maskY; + mask->weighted = 0; + + rtn = rt_band_get_nearest_pixel( + band, + 4,4, + 1, 1, + 1, + &npixels + ); + + CU_ASSERT_EQUAL(rtn,8); + + rtn = rt_pixel_set_to_array( + npixels, rtn, mask, + 4,4, + 1, 1, + &value, + &nodata, + &dimx, &dimy + ); + + + rtdealloc(npixels); + CU_ASSERT_EQUAL(rtn, ES_NONE); + CU_ASSERT_EQUAL(dimx, 3); + CU_ASSERT_EQUAL(dimy, 3); + CU_ASSERT_EQUAL(nodata[1][1],1); + + for (x = 0; x < dimx; x++) { + rtdealloc(nodata[x]); + rtdealloc(value[x]); + } + + rtdealloc(nodata); + rtdealloc(value); + + /* set mask to 1 */ + + for(y = 0; y < maskY; y++) { + for(x = 0; x < maskX; x++){ + mask->values[y][x]= 1; + mask->nodata[y][x]= 0; + } + } + + mask->dimx = maskX; + mask->dimy = maskY; + mask->weighted = 0; + + + rtn = rt_band_get_nearest_pixel( + band, + 4,4, + 1, 1, + 1, + &npixels + ); + + CU_ASSERT_EQUAL(rtn,8); + + rtn = rt_pixel_set_to_array( + npixels, rtn, mask, + 4,4, + 1, 1, + &value, + &nodata, + &dimx, &dimy + ); + + + rtdealloc(npixels); + CU_ASSERT_EQUAL(rtn, ES_NONE); + CU_ASSERT_EQUAL(dimx, 3); + CU_ASSERT_EQUAL(dimy, 3); + CU_ASSERT_NOT_EQUAL(nodata[0][0],1); + CU_ASSERT_DOUBLE_EQUAL(value[0][0],1,.01); + + for (x = 0; x < dimx; x++) { + rtdealloc(nodata[x]); + rtdealloc(value[x]); + } + + rtdealloc(nodata); + rtdealloc(value); + + /* set mask to 0.5 */ + + for(y = 0; y < maskY; y++) { + for(x = 0; x < maskX; x++){ + mask->values[y][x]= 0.5; + mask->nodata[y][x]= 0; + } + } + + mask->dimx = maskX; + mask->dimy = maskY; + mask->weighted = 1; + + rtn = rt_band_get_nearest_pixel( + band, + 4,4, + 1, 1, + 1, + &npixels + ); + + CU_ASSERT_EQUAL(rtn,8); + + rtn = rt_pixel_set_to_array( + npixels, rtn, mask, + 4,4, + 1, 1, + &value, + &nodata, + &dimx, &dimy + ); + + + rtdealloc(npixels); + CU_ASSERT_EQUAL(rtn, ES_NONE); + CU_ASSERT_EQUAL(dimx, 3); + CU_ASSERT_EQUAL(dimy, 3); + CU_ASSERT_NOT_EQUAL(nodata[0][0],1); + CU_ASSERT_DOUBLE_EQUAL(value[0][0],0.5,0.1); + + for (x = 0; x < dimx; x++) { + rtdealloc(nodata[x]); + rtdealloc(value[x]); + } + + rtdealloc(nodata); + rtdealloc(value); + + for( i = 0; i < maskY; i++) { + rtdealloc(mask->values[i]); + rtdealloc(mask->nodata[i]); + } + + rtdealloc(mask->values); + rtdealloc(mask->nodata); + rtdealloc(mask); + + if (rtn) + rtdealloc(npixels); + + cu_free_raster(rast); + +} + /* register tests */ CU_TestInfo band_misc_tests[] = { PG_TEST(test_band_get_nearest_pixel), PG_TEST(test_band_get_pixel_of_value), + PG_TEST(test_pixel_set_to_array), CU_TEST_INFO_NULL }; CU_SuiteInfo band_misc_suite = {"band_misc", NULL, NULL, band_misc_tests}; diff --git a/raster/test/cunit/cu_mapalgebra.c b/raster/test/cunit/cu_mapalgebra.c index 149d6817d..8c31d0155 100644 --- a/raster/test/cunit/cu_mapalgebra.c +++ b/raster/test/cunit/cu_mapalgebra.c @@ -570,6 +570,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator1_callback, &rtn @@ -599,6 +600,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator1_callback, &rtn @@ -628,6 +630,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator2_callback, &rtn @@ -653,6 +656,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator3_callback, &rtn @@ -678,6 +682,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator4_callback, &rtn @@ -703,6 +708,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator5_callback, &rtn @@ -728,6 +734,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 0, 0, + NULL, userargs, testRasterIterator6_callback, &rtn @@ -757,6 +764,7 @@ static void test_raster_iterator() { PT_32BUI, 1, 0, 1, 1, + NULL, userargs, testRasterIterator7_callback, &rtn diff --git a/raster/test/regress/Makefile.in b/raster/test/regress/Makefile.in index 747212e89..c89991b95 100644 --- a/raster/test/regress/Makefile.in +++ b/raster/test/regress/Makefile.in @@ -121,6 +121,7 @@ TEST_MAPALGEBRA = \ rt_clip \ rt_mapalgebra \ rt_mapalgebra_expr \ + rt_mapalgebra_mask \ rt_union \ rt_invdistweight4ma \ rt_4ma \ diff --git a/raster/test/regress/rt_mapalgebra_mask.sql b/raster/test/regress/rt_mapalgebra_mask.sql new file mode 100644 index 000000000..5436836e6 --- /dev/null +++ b/raster/test/regress/rt_mapalgebra_mask.sql @@ -0,0 +1,93 @@ +SET client_min_messages TO warning; + +DROP TABLE IF EXISTS raster_nmapalgebra_in; +CREATE TABLE raster_nmapalgebra_mask_in ( + rid integer, + rast raster +); + +INSERT INTO raster_nmapalgebra_mask_in + SELECT 0, NULL::raster AS rast UNION ALL + SELECT 1, ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0) AS rast UNION ALL + SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL + SELECT 3, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 20, 0) AS rast UNION ALL + SELECT 4, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 20, 0), 3, '16BUI', 200, 0) AS rast +; + +CREATE OR REPLACE FUNCTION raster_nmapalgebra_test( + value double precision[][][], + pos int[][], + VARIADIC userargs text[] +) + RETURNS double precision + AS $$ + BEGIN + RAISE NOTICE 'value = %', value; + RAISE NOTICE 'pos = %', pos; + RAISE NOTICE 'userargs = %', userargs; + + IF userargs IS NULL OR array_length(userargs, 1) < 1 THEN + RETURN 255; + ELSE + RETURN userargs[array_lower(userargs, 1)]; + END IF; + END; + $$ LANGUAGE 'plpgsql' IMMUTABLE; + +SET client_min_messages TO notice; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1],[1,1],[1,1]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1,1],[1,1,1]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,NULL::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[NULL]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[1]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[NULL]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1,1],[1,1,1],[1,1,1]]::double precision[],false) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,0,0],[0,0,0],[0,0,0]]::double precision[],false) from raster_nmapalgebra_mask_in; + + + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1],[1,1],[1,1]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1,1],[1,1,1]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,NULL::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[NULL]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[1]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[NULL]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,1,1],[1,1,1],[1,1,1]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[1,0,0],[0,0,0],[0,0,0]]::double precision[],true) from raster_nmapalgebra_mask_in; + + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[.5,.5],[.5,.5],[.5,.5]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[.5,.5,.5],[.5,.5,.5]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[.5]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[.5]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[.5,.5,.5],[.5,.5,.5],[.5,.5,.5]]::double precision[],true) from raster_nmapalgebra_mask_in; + +select st_mapalgebra(rast,1,'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,ARRAY[[.5,0,0],[0,0,0],[0,0,0]]::double precision[],true) from raster_nmapalgebra_mask_in; + +DROP FUNCTION IF EXISTS raster_nmapalgebra_test(double precision[], int[], text[]); +DROP TABLE IF EXISTS raster_nmapalgebra_mask_in; \ No newline at end of file diff --git a/raster/test/regress/rt_mapalgebra_mask_expected b/raster/test/regress/rt_mapalgebra_mask_expected new file mode 100644 index 000000000..ae8869a26 --- /dev/null +++ b/raster/test/regress/rt_mapalgebra_mask_expected @@ -0,0 +1,595 @@ +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask Must be a 2D array. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask Must be a 2D array. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,1,1},{NULL,1,1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{1,1,NULL},{1,1,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,1,1},{NULL,1,1},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,1,NULL},{1,1,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,2,2},{NULL,2,2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{2,2,NULL},{2,2,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,2,2},{NULL,2,2},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,2,NULL},{2,2,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,2,2},{NULL,2,2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{2,2,NULL},{2,2,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,2,2},{NULL,2,2},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,2,NULL},{2,2,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask Must be a 2D array. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask Must be a 2D array. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,1,1},{NULL,1,1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{1,1,NULL},{1,1,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,1,1},{NULL,1,1},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,1,NULL},{1,1,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,2,2},{NULL,2,2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{2,2,NULL},{2,2,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,2,2},{NULL,2,2},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,2,NULL},{2,2,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,2,2},{NULL,2,2}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{2,2,NULL},{2,2,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,2,2},{NULL,2,2},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,2,NULL},{2,2,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{2,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask dimenstions must be odd. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +ERROR: RASTER_nMapAlgerbra: Mask Must be a 2D array. +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{0.5}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{0.5}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{0.5}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{0.5}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0.5,0.5},{NULL,0.5,0.5}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0.5,0.5,NULL},{0.5,0.5,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0.5,0.5},{NULL,0.5,0.5},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{0.5,0.5,NULL},{0.5,0.5,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,1,1},{NULL,1,1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{1,1,NULL},{1,1,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,1,1},{NULL,1,1},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,1,NULL},{1,1,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,1,1},{NULL,1,1}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{1,1,NULL},{1,1,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,1,1},{NULL,1,1},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,1,NULL},{1,1,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster +NOTICE: All input rasters are NULL. Returning NULL +NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{0.5,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{NULL,0,0},{NULL,0,0}}} +NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,NULL,NULL},{0,0,NULL},{0,0,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} +NOTICE: userargs = +NOTICE: value = {{{NULL,0,0},{NULL,0,0},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} +NOTICE: userargs = +NOTICE: value = {{{1,0,NULL},{0,0,NULL},{NULL,NULL,NULL}}} +NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} +NOTICE: userargs = +0100000000000000000000F03F000000000000F0BF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000100000000000000F03F000000000000F0BF000000000000000000000000000000000000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF +0100000100000000000000F03F000000000000F0BF000000000000F03F000000000000F0BF0000000000000000000000000000000000000000020002004400FFFFFFFF