--- /dev/null
+DROP TABLE IF EXISTS raster_pixelascentroids;
+CREATE TABLE raster_pixelascentroids (
+ rast raster
+);
+CREATE OR REPLACE FUNCTION make_test_raster()
+ RETURNS void
+ AS $$
+ DECLARE
+ width int := 10;
+ height int := 10;
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0);
+ rast := ST_AddBand(rast, 1, '32BUI', 0, 0);
+
+ FOR x IN 1..width LOOP
+ FOR y IN 1..height LOOP
+ IF (x + y) % 2 = 1 THEN
+ rast := ST_SetValue(rast, 1, x, y, x + y);
+ END IF;
+ END LOOP;
+ END LOOP;
+
+ INSERT INTO raster_pixelascentroids VALUES (rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+SELECT make_test_raster();
+DROP FUNCTION make_test_raster();
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsCentroids(rast) AS pix FROM raster_pixelascentroids) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsCentroids(rast, NULL) AS pix FROM raster_pixelascentroids) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsCentroids(rast, 1, FALSE) AS pix FROM raster_pixelascentroids) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 1)) FROM raster_pixelascentroids;
+SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 2)) FROM raster_pixelascentroids;
+SELECT ST_AsText(ST_PixelAsCentroid(rast, -1, -1)) FROM raster_pixelascentroids;
+
+DROP TABLE IF EXISTS raster_pixelascentroids;
--- /dev/null
+NOTICE: table "raster_pixelascentroids" does not exist, skipping
+1|1|0|0||POINT(0.5 -0.5)
+1|2|0|-1|3|POINT(0.5 -1.5)
+1|3|0|-2||POINT(0.5 -2.5)
+1|4|0|-3|5|POINT(0.5 -3.5)
+1|5|0|-4||POINT(0.5 -4.5)
+1|6|0|-5|7|POINT(0.5 -5.5)
+1|7|0|-6||POINT(0.5 -6.5)
+1|8|0|-7|9|POINT(0.5 -7.5)
+1|9|0|-8||POINT(0.5 -8.5)
+1|10|0|-9|11|POINT(0.5 -9.5)
+2|1|1|0|3|POINT(1.5 -0.5)
+2|2|1|-1||POINT(1.5 -1.5)
+2|3|1|-2|5|POINT(1.5 -2.5)
+2|4|1|-3||POINT(1.5 -3.5)
+2|5|1|-4|7|POINT(1.5 -4.5)
+2|6|1|-5||POINT(1.5 -5.5)
+2|7|1|-6|9|POINT(1.5 -6.5)
+2|8|1|-7||POINT(1.5 -7.5)
+2|9|1|-8|11|POINT(1.5 -8.5)
+2|10|1|-9||POINT(1.5 -9.5)
+3|1|2|0||POINT(2.5 -0.5)
+3|2|2|-1|5|POINT(2.5 -1.5)
+3|3|2|-2||POINT(2.5 -2.5)
+3|4|2|-3|7|POINT(2.5 -3.5)
+3|5|2|-4||POINT(2.5 -4.5)
+3|6|2|-5|9|POINT(2.5 -5.5)
+3|7|2|-6||POINT(2.5 -6.5)
+3|8|2|-7|11|POINT(2.5 -7.5)
+3|9|2|-8||POINT(2.5 -8.5)
+3|10|2|-9|13|POINT(2.5 -9.5)
+4|1|3|0|5|POINT(3.5 -0.5)
+4|2|3|-1||POINT(3.5 -1.5)
+4|3|3|-2|7|POINT(3.5 -2.5)
+4|4|3|-3||POINT(3.5 -3.5)
+4|5|3|-4|9|POINT(3.5 -4.5)
+4|6|3|-5||POINT(3.5 -5.5)
+4|7|3|-6|11|POINT(3.5 -6.5)
+4|8|3|-7||POINT(3.5 -7.5)
+4|9|3|-8|13|POINT(3.5 -8.5)
+4|10|3|-9||POINT(3.5 -9.5)
+5|1|4|0||POINT(4.5 -0.5)
+5|2|4|-1|7|POINT(4.5 -1.5)
+5|3|4|-2||POINT(4.5 -2.5)
+5|4|4|-3|9|POINT(4.5 -3.5)
+5|5|4|-4||POINT(4.5 -4.5)
+5|6|4|-5|11|POINT(4.5 -5.5)
+5|7|4|-6||POINT(4.5 -6.5)
+5|8|4|-7|13|POINT(4.5 -7.5)
+5|9|4|-8||POINT(4.5 -8.5)
+5|10|4|-9|15|POINT(4.5 -9.5)
+6|1|5|0|7|POINT(5.5 -0.5)
+6|2|5|-1||POINT(5.5 -1.5)
+6|3|5|-2|9|POINT(5.5 -2.5)
+6|4|5|-3||POINT(5.5 -3.5)
+6|5|5|-4|11|POINT(5.5 -4.5)
+6|6|5|-5||POINT(5.5 -5.5)
+6|7|5|-6|13|POINT(5.5 -6.5)
+6|8|5|-7||POINT(5.5 -7.5)
+6|9|5|-8|15|POINT(5.5 -8.5)
+6|10|5|-9||POINT(5.5 -9.5)
+7|1|6|0||POINT(6.5 -0.5)
+7|2|6|-1|9|POINT(6.5 -1.5)
+7|3|6|-2||POINT(6.5 -2.5)
+7|4|6|-3|11|POINT(6.5 -3.5)
+7|5|6|-4||POINT(6.5 -4.5)
+7|6|6|-5|13|POINT(6.5 -5.5)
+7|7|6|-6||POINT(6.5 -6.5)
+7|8|6|-7|15|POINT(6.5 -7.5)
+7|9|6|-8||POINT(6.5 -8.5)
+7|10|6|-9|17|POINT(6.5 -9.5)
+8|1|7|0|9|POINT(7.5 -0.5)
+8|2|7|-1||POINT(7.5 -1.5)
+8|3|7|-2|11|POINT(7.5 -2.5)
+8|4|7|-3||POINT(7.5 -3.5)
+8|5|7|-4|13|POINT(7.5 -4.5)
+8|6|7|-5||POINT(7.5 -5.5)
+8|7|7|-6|15|POINT(7.5 -6.5)
+8|8|7|-7||POINT(7.5 -7.5)
+8|9|7|-8|17|POINT(7.5 -8.5)
+8|10|7|-9||POINT(7.5 -9.5)
+9|1|8|0||POINT(8.5 -0.5)
+9|2|8|-1|11|POINT(8.5 -1.5)
+9|3|8|-2||POINT(8.5 -2.5)
+9|4|8|-3|13|POINT(8.5 -3.5)
+9|5|8|-4||POINT(8.5 -4.5)
+9|6|8|-5|15|POINT(8.5 -5.5)
+9|7|8|-6||POINT(8.5 -6.5)
+9|8|8|-7|17|POINT(8.5 -7.5)
+9|9|8|-8||POINT(8.5 -8.5)
+9|10|8|-9|19|POINT(8.5 -9.5)
+10|1|9|0|11|POINT(9.5 -0.5)
+10|2|9|-1||POINT(9.5 -1.5)
+10|3|9|-2|13|POINT(9.5 -2.5)
+10|4|9|-3||POINT(9.5 -3.5)
+10|5|9|-4|15|POINT(9.5 -4.5)
+10|6|9|-5||POINT(9.5 -5.5)
+10|7|9|-6|17|POINT(9.5 -6.5)
+10|8|9|-7||POINT(9.5 -7.5)
+10|9|9|-8|19|POINT(9.5 -8.5)
+10|10|9|-9||POINT(9.5 -9.5)
+1|1|0|0|0|POINT(0.5 -0.5)
+1|2|0|-1|3|POINT(0.5 -1.5)
+1|3|0|-2|0|POINT(0.5 -2.5)
+1|4|0|-3|5|POINT(0.5 -3.5)
+1|5|0|-4|0|POINT(0.5 -4.5)
+1|6|0|-5|7|POINT(0.5 -5.5)
+1|7|0|-6|0|POINT(0.5 -6.5)
+1|8|0|-7|9|POINT(0.5 -7.5)
+1|9|0|-8|0|POINT(0.5 -8.5)
+1|10|0|-9|11|POINT(0.5 -9.5)
+2|1|1|0|3|POINT(1.5 -0.5)
+2|2|1|-1|0|POINT(1.5 -1.5)
+2|3|1|-2|5|POINT(1.5 -2.5)
+2|4|1|-3|0|POINT(1.5 -3.5)
+2|5|1|-4|7|POINT(1.5 -4.5)
+2|6|1|-5|0|POINT(1.5 -5.5)
+2|7|1|-6|9|POINT(1.5 -6.5)
+2|8|1|-7|0|POINT(1.5 -7.5)
+2|9|1|-8|11|POINT(1.5 -8.5)
+2|10|1|-9|0|POINT(1.5 -9.5)
+3|1|2|0|0|POINT(2.5 -0.5)
+3|2|2|-1|5|POINT(2.5 -1.5)
+3|3|2|-2|0|POINT(2.5 -2.5)
+3|4|2|-3|7|POINT(2.5 -3.5)
+3|5|2|-4|0|POINT(2.5 -4.5)
+3|6|2|-5|9|POINT(2.5 -5.5)
+3|7|2|-6|0|POINT(2.5 -6.5)
+3|8|2|-7|11|POINT(2.5 -7.5)
+3|9|2|-8|0|POINT(2.5 -8.5)
+3|10|2|-9|13|POINT(2.5 -9.5)
+4|1|3|0|5|POINT(3.5 -0.5)
+4|2|3|-1|0|POINT(3.5 -1.5)
+4|3|3|-2|7|POINT(3.5 -2.5)
+4|4|3|-3|0|POINT(3.5 -3.5)
+4|5|3|-4|9|POINT(3.5 -4.5)
+4|6|3|-5|0|POINT(3.5 -5.5)
+4|7|3|-6|11|POINT(3.5 -6.5)
+4|8|3|-7|0|POINT(3.5 -7.5)
+4|9|3|-8|13|POINT(3.5 -8.5)
+4|10|3|-9|0|POINT(3.5 -9.5)
+5|1|4|0|0|POINT(4.5 -0.5)
+5|2|4|-1|7|POINT(4.5 -1.5)
+5|3|4|-2|0|POINT(4.5 -2.5)
+5|4|4|-3|9|POINT(4.5 -3.5)
+5|5|4|-4|0|POINT(4.5 -4.5)
+5|6|4|-5|11|POINT(4.5 -5.5)
+5|7|4|-6|0|POINT(4.5 -6.5)
+5|8|4|-7|13|POINT(4.5 -7.5)
+5|9|4|-8|0|POINT(4.5 -8.5)
+5|10|4|-9|15|POINT(4.5 -9.5)
+6|1|5|0|7|POINT(5.5 -0.5)
+6|2|5|-1|0|POINT(5.5 -1.5)
+6|3|5|-2|9|POINT(5.5 -2.5)
+6|4|5|-3|0|POINT(5.5 -3.5)
+6|5|5|-4|11|POINT(5.5 -4.5)
+6|6|5|-5|0|POINT(5.5 -5.5)
+6|7|5|-6|13|POINT(5.5 -6.5)
+6|8|5|-7|0|POINT(5.5 -7.5)
+6|9|5|-8|15|POINT(5.5 -8.5)
+6|10|5|-9|0|POINT(5.5 -9.5)
+7|1|6|0|0|POINT(6.5 -0.5)
+7|2|6|-1|9|POINT(6.5 -1.5)
+7|3|6|-2|0|POINT(6.5 -2.5)
+7|4|6|-3|11|POINT(6.5 -3.5)
+7|5|6|-4|0|POINT(6.5 -4.5)
+7|6|6|-5|13|POINT(6.5 -5.5)
+7|7|6|-6|0|POINT(6.5 -6.5)
+7|8|6|-7|15|POINT(6.5 -7.5)
+7|9|6|-8|0|POINT(6.5 -8.5)
+7|10|6|-9|17|POINT(6.5 -9.5)
+8|1|7|0|9|POINT(7.5 -0.5)
+8|2|7|-1|0|POINT(7.5 -1.5)
+8|3|7|-2|11|POINT(7.5 -2.5)
+8|4|7|-3|0|POINT(7.5 -3.5)
+8|5|7|-4|13|POINT(7.5 -4.5)
+8|6|7|-5|0|POINT(7.5 -5.5)
+8|7|7|-6|15|POINT(7.5 -6.5)
+8|8|7|-7|0|POINT(7.5 -7.5)
+8|9|7|-8|17|POINT(7.5 -8.5)
+8|10|7|-9|0|POINT(7.5 -9.5)
+9|1|8|0|0|POINT(8.5 -0.5)
+9|2|8|-1|11|POINT(8.5 -1.5)
+9|3|8|-2|0|POINT(8.5 -2.5)
+9|4|8|-3|13|POINT(8.5 -3.5)
+9|5|8|-4|0|POINT(8.5 -4.5)
+9|6|8|-5|15|POINT(8.5 -5.5)
+9|7|8|-6|0|POINT(8.5 -6.5)
+9|8|8|-7|17|POINT(8.5 -7.5)
+9|9|8|-8|0|POINT(8.5 -8.5)
+9|10|8|-9|19|POINT(8.5 -9.5)
+10|1|9|0|11|POINT(9.5 -0.5)
+10|2|9|-1|0|POINT(9.5 -1.5)
+10|3|9|-2|13|POINT(9.5 -2.5)
+10|4|9|-3|0|POINT(9.5 -3.5)
+10|5|9|-4|15|POINT(9.5 -4.5)
+10|6|9|-5|0|POINT(9.5 -5.5)
+10|7|9|-6|17|POINT(9.5 -6.5)
+10|8|9|-7|0|POINT(9.5 -7.5)
+10|9|9|-8|19|POINT(9.5 -8.5)
+10|10|9|-9|0|POINT(9.5 -9.5)
+POINT(0.5 -0.5)
+POINT(0.5 -1.5)
+POINT(-1.5 1.5)
--- /dev/null
+DROP TABLE IF EXISTS raster_pixelaspoints;
+CREATE TABLE raster_pixelaspoints (
+ rast raster
+);
+CREATE OR REPLACE FUNCTION make_test_raster()
+ RETURNS void
+ AS $$
+ DECLARE
+ width int := 10;
+ height int := 10;
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0);
+ rast := ST_AddBand(rast, 1, '32BUI', 0, 0);
+
+ FOR x IN 1..width LOOP
+ FOR y IN 1..height LOOP
+ IF (x + y) % 2 = 1 THEN
+ rast := ST_SetValue(rast, 1, x, y, x + y);
+ END IF;
+ END LOOP;
+ END LOOP;
+
+ INSERT INTO raster_pixelaspoints VALUES (rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+SELECT make_test_raster();
+DROP FUNCTION make_test_raster();
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsPoints(rast) AS pix FROM raster_pixelaspoints) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsPoints(rast, NULL) AS pix FROM raster_pixelaspoints) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT
+ (pix).x,
+ (pix).y,
+ ST_Raster2WorldCoordX(rast, (pix).x, (pix).y),
+ ST_Raster2WorldCoordY(rast, (pix).x, (pix).y),
+ (pix).val,
+ ST_AsText((pix).geom)
+FROM (SELECT rast, ST_PixelAsPoints(rast, 1, FALSE) AS pix FROM raster_pixelaspoints) foo
+ORDER BY 1, 2, 3, 4, 6;
+
+SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 1)) FROM raster_pixelaspoints;
+SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 2)) FROM raster_pixelaspoints;
+SELECT ST_AsText(ST_PixelAsPoint(rast, -1, -1)) FROM raster_pixelaspoints;
+
+DROP TABLE IF EXISTS raster_pixelaspoints;