--- /dev/null
+CREATE TABLE raster_raster2world (
+ rid integer,
+ rast raster
+);
+CREATE OR REPLACE FUNCTION make_test_raster(
+ rid integer,
+ width integer DEFAULT 2,
+ height integer DEFAULT 2,
+ ul_x double precision DEFAULT 0,
+ ul_y double precision DEFAULT 0,
+ skew_x double precision DEFAULT 0,
+ skew_y double precision DEFAULT 0,
+ initvalue double precision DEFAULT 1,
+ nodataval double precision DEFAULT 0
+)
+ RETURNS void
+ AS $$
+ DECLARE
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0);
+ rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval);
+
+ INSERT INTO raster_raster2world VALUES (rid, rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+
+-- no skew
+SELECT make_test_raster(0, 4, 4, -2, -2);
+SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2);
+SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3);
+SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4);
+SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5);
+
+-- skew
+SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1);
+SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2);
+SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3);
+SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4);
+SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5);
+
+DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision);
+
+SELECT
+ rid,
+ (ST_Raster2WorldCoord(rast, 1, 1)).*
+FROM raster_raster2world;
+SELECT
+ rid,
+ (ST_Raster2WorldCoord(rast, 1, 2)).*
+FROM raster_raster2world;
+SELECT
+ rid,
+ (ST_Raster2WorldCoord(rast, 2, 2)).*
+FROM raster_raster2world;
+SELECT
+ rid,
+ (ST_Raster2WorldCoord(rast, 0, 0)).*
+FROM raster_raster2world;
+SELECT
+ rid,
+ (ST_Raster2WorldCoord(rast, -1, 0)).*
+FROM raster_raster2world;
+
+DROP TABLE raster_raster2world;
SELECT 'test 1.1', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
ipx,
ipy
- ) != 1;
+ ), 0) != 1;
SELECT 'test 1.2', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
scalex * (width - 1) + skewx * (height - 1) + ipx,
skewy * (width - 1) + scaley * (height - 1) + ipy
- ) != width;
+ ), 0) != width;
SELECT 'test 1.3', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
scalex * width + skewx * height + ipx,
skewy * width + scaley * height + ipy
- ) != width + 1;
+ ), 0) != width + 1;
-----------------------------------------------------------------------
-- Test 2 - st_world2rastercoordx(rast raster, xw float8)
SELECT 'test 2.1', id, name
FROM rt_utility_test
WHERE skewx = 0 and
- st_world2rastercoordx(rast,
+ COALESCE(st_world2rastercoordx(rast,
ipx
- ) != 1;
+ ), 0) != 1;
SELECT 'test 2.2', id, name
FROM rt_utility_test
WHERE skewx = 0 and
- st_world2rastercoordx(rast,
+ COALESCE(st_world2rastercoordx(rast,
scalex * (width - 1) + ipx
- ) != width;
+ ), 0) != width;
SELECT 'test 2.3', id, name
FROM rt_utility_test
WHERE skewx = 0 and
- st_world2rastercoordx(rast,
+ COALESCE(st_world2rastercoordx(rast,
scalex * width + ipx
- ) != width + 1;
+ ), 0) != width + 1;
SELECT 'test 2.4', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
ipx
- ) != 1;
+ ), 0) != 1;
-----------------------------------------------------------------------
-- Test 3 - st_world2rastercoordx(rast raster, pt geometry)
SELECT 'test 3.1', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
st_makepoint(
ipx,
ipy
)
- ) != 1;
+ ), 0) != 1;
SELECT 'test 3.2', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
st_makepoint(
scalex * (width - 1) + skewx * (height - 1) + ipx,
skewy * (width - 1) + scaley * (height - 1) + ipy
)
- ) != width;
+ ), 0) != width;
SELECT 'test 3.3', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordx(rast,
+ WHERE COALESCE(st_world2rastercoordx(rast,
st_makepoint(
scalex * width + skewx * height + ipx,
skewy * width + scaley * height + ipy
)
- ) != width + 1;
+ ), 0) != width + 1;
-----------------------------------------------------------------------
-- Test 4 - st_world2rastercoordy(rast raster, xw float8, yw float8)
SELECT 'test 4.1', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
ipx,
ipy
- ) != 1;
+ ), 0) != 1;
SELECT 'test 4.2', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
scalex * (width - 1) + skewx * (height - 1) + ipx,
skewy * (width - 1) + scaley * (height - 1) + ipy
- ) != height;
+ ), 0) != height;
SELECT 'test 4.3', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
scalex * width + skewx * height + ipx,
skewy * width + scaley * height + ipy
- ) != height + 1;
+ ), 0) != height + 1;
-----------------------------------------------------------------------
-- Test 5 - st_world2rastercoordy(rast raster, yw float8)
SELECT 'test 5.1', id, name
FROM rt_utility_test
WHERE skewy = 0 and
- st_world2rastercoordy(rast,
+ COALESCE(st_world2rastercoordy(rast,
ipy
- ) != 1;
+ ), 0) != 1;
SELECT 'test 5.2', id, name
FROM rt_utility_test
WHERE skewy = 0 and
- st_world2rastercoordy(rast,
+ COALESCE(st_world2rastercoordy(rast,
scaley * (height - 1) + ipy
- ) != height;
+ ), 0) != height;
SELECT 'test 5.3', id, name
FROM rt_utility_test
WHERE skewy = 0 and
- st_world2rastercoordy(rast,
+ COALESCE(st_world2rastercoordy(rast,
scaley * height + ipy
- ) != height + 1;
+ ), 0) != height + 1;
SELECT 'test 5.4', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
ipy
- ) != 1;
+ ), 0) != 1;
-----------------------------------------------------------------------
SELECT 'test 6.1', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
st_makepoint(
ipx,
ipy
)
- ) != 1;
+ ), 0) != 1;
SELECT 'test 6.2', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
st_makepoint(
scalex * (width - 1) + skewx * (height - 1) + ipx,
skewy * (width - 1) + scaley * (height - 1) + ipy
)
- ) != height;
+ ), 0) != height;
SELECT 'test 6.3', id, name
FROM rt_utility_test
- WHERE st_world2rastercoordy(rast,
+ WHERE COALESCE(st_world2rastercoordy(rast,
st_makepoint(
scalex * width + skewx * height + ipx,
skewy * width + scaley * height + ipy
)
- ) != height + 1;
+ ), 0) != height + 1;
-----------------------------------------------------------------------
-- Test 7 - st_raster2worldcoordx(rast raster, xr int, yr int)
SELECT 'test 7.1', id, name
FROM rt_utility_test
- WHERE st_raster2worldcoordx(rast, 1, 1)::numeric != ipx::numeric;
+ WHERE COALESCE(st_raster2worldcoordx(rast, 1, 1), 0)::numeric != ipx::numeric;
SELECT 'test 7.2', id, name
FROM rt_utility_test
- WHERE st_raster2worldcoordx(rast, width, height)::numeric != (scalex * (width - 1) + skewx * (height - 1) + ipx)::numeric;
+ WHERE COALESCE(st_raster2worldcoordx(rast, width, height), 0)::numeric != (scalex * (width - 1) + skewx * (height - 1) + ipx)::numeric;
-----------------------------------------------------------------------
-- Test 8 - st_raster2worldcoordx(rast raster, xr int)
SELECT 'test 8.1', id, name
FROM rt_utility_test
- WHERE skewx = 0 and st_raster2worldcoordx(rast, 1)::numeric != ipx::numeric;
+ WHERE skewx = 0 and COALESCE(st_raster2worldcoordx(rast, 1), 0)::numeric != ipx::numeric;
SELECT 'test 8.2', id, name
FROM rt_utility_test
- WHERE skewx = 0 and st_raster2worldcoordx(rast, width)::numeric != (scalex * (width - 1) + ipx)::numeric;
+ WHERE skewx = 0 and COALESCE(st_raster2worldcoordx(rast, width), 0)::numeric != (scalex * (width - 1) + ipx)::numeric;
SELECT 'test 8.3', id, name
FROM rt_utility_test
- WHERE st_raster2worldcoordx(rast, 1)::numeric != ipx::numeric;
+ WHERE COALESCE(st_raster2worldcoordx(rast, 1), 0)::numeric != ipx::numeric;
-----------------------------------------------------------------------
-- Test 9 - st_raster2worldcoordy(rast raster, xr int, yr int)
SELECT 'test 9.1', id, name
FROM rt_utility_test
- WHERE st_raster2worldcoordy(rast, 1, 1)::numeric != ipy::numeric;
+ WHERE COALESCE(st_raster2worldcoordy(rast, 1, 1), 0)::numeric != ipy::numeric;
SELECT 'test 9.2', id, name
FROM rt_utility_test
- WHERE round(st_raster2worldcoordy(rast, width, height)::numeric, 10) != round((skewy * (width - 1) + scaley * (height - 1) + ipy)::numeric, 10);
+ WHERE round(COALESCE(st_raster2worldcoordy(rast, width, height), 0)::numeric, 10) != round((skewy * (width - 1) + scaley * (height - 1) + ipy)::numeric, 10);
-----------------------------------------------------------------------
-- Test 10 - st_raster2worldcoordy(rast raster, yr int)
SELECT 'test 10.1', id, name
FROM rt_utility_test
- WHERE skewy = 0 and st_raster2worldcoordy(rast, 1, 1)::numeric != ipy::numeric;
+ WHERE skewy = 0 and COALESCE(st_raster2worldcoordy(rast, 1, 1), 0)::numeric != ipy::numeric;
SELECT 'test 10.2', id, name
FROM rt_utility_test
- WHERE skewy = 0 and st_raster2worldcoordy(rast, width, height)::numeric != (scaley * (height - 1) + ipy)::numeric;
+ WHERE skewy = 0 and COALESCE(st_raster2worldcoordy(rast, width, height), 0)::numeric != (scaley * (height - 1) + ipy)::numeric;
SELECT 'test 10.3', id, name
FROM rt_utility_test
- WHERE st_raster2worldcoordy(rast, 1)::numeric != ipy::numeric;
+ WHERE COALESCE(st_raster2worldcoordy(rast, 1), 0)::numeric != ipy::numeric;
-----------------------------------------------------------------------
-- Test 11 - st_minpossiblevalue(pixtype text)
-ERROR: RASTER_worldToRasterCoord: Latitude and longitude required for computing pixel row and column of a rotated raster
-ERROR: RASTER_worldToRasterCoord: Latitude and longitude required for computing pixel row and column of a rotated raster
-ERROR: RASTER_rasterToWorldCoord: Pixel row and column required for computing longitude and latitude of a rotated raster
-ERROR: RASTER_rasterToWorldCoord: Pixel row and column required for computing longitude and latitude of a rotated raster
+NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster
+NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster
+test 2.4|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156
+test 2.4|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000
+NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster
+NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster
+test 5.4|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156
+test 5.4|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000
+NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster
+NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster
+test 8.3|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156
+test 8.3|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000
+NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster
+NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster
+test 10.3|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156
+test 10.3|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000
test 11.1|t
test 11.2|t
test 11.3|t
--- /dev/null
+CREATE TABLE raster_world2raster (
+ rid integer,
+ rast raster
+);
+CREATE OR REPLACE FUNCTION make_test_raster(
+ rid integer,
+ width integer DEFAULT 2,
+ height integer DEFAULT 2,
+ ul_x double precision DEFAULT 0,
+ ul_y double precision DEFAULT 0,
+ skew_x double precision DEFAULT 0,
+ skew_y double precision DEFAULT 0,
+ initvalue double precision DEFAULT 1,
+ nodataval double precision DEFAULT 0
+)
+ RETURNS void
+ AS $$
+ DECLARE
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0);
+ rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval);
+
+ INSERT INTO raster_world2raster VALUES (rid, rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+
+-- no skew
+SELECT make_test_raster(0, 4, 4, -2, -2);
+SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2);
+SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3);
+SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4);
+SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5);
+
+-- skew
+SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1);
+SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2);
+SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3);
+SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4);
+SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5);
+
+DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision);
+
+SELECT
+ rid,
+ (ST_World2RasterCoord(rast, -2, -2)).*
+FROM raster_world2raster;
+SELECT
+ rid,
+ (ST_World2RasterCoord(rast, 0, 0)).*
+FROM raster_world2raster;
+SELECT
+ rid,
+ (ST_World2RasterCoord(rast, 1, -1)).*
+FROM raster_world2raster;
+SELECT
+ rid,
+ (ST_World2RasterCoord(rast, 1, 1)).*
+FROM raster_world2raster;
+SELECT
+ rid,
+ (ST_World2RasterCoord(rast, 2, 2)).*
+FROM raster_world2raster;
+
+DROP TABLE raster_world2raster;