@@ -654,6 +654,44 @@ rt_raster_pixel_as_polygon(rt_raster rast, int x, int y)
654
654
return poly ;
655
655
}
656
656
657
+ /******************************************************************************
658
+ * rt_raster_pixel_as_centroid_point()
659
+ ******************************************************************************/
660
+
661
+ /**
662
+ * Get a raster pixel centroid point.
663
+ *
664
+ * @param raster : the raster to get pixel from
665
+ * @param x : the column number
666
+ * @param y : the row number
667
+ *
668
+ * @return the pixel centroid point, or NULL on error.
669
+ */
670
+ LWPOINT *
671
+ rt_raster_pixel_as_centroid_point (rt_raster rast , int x , int y )
672
+ {
673
+ double scale_x , scale_y ;
674
+ double skew_x , skew_y ;
675
+ double ul_x , ul_y ;
676
+ int32_t srid ;
677
+ double center_x , center_y ;
678
+ LWPOINT * point ;
679
+
680
+ scale_x = rt_raster_get_x_scale (rast );
681
+ scale_y = rt_raster_get_y_scale (rast );
682
+ skew_x = rt_raster_get_x_skew (rast );
683
+ skew_y = rt_raster_get_y_skew (rast );
684
+ ul_x = rt_raster_get_x_offset (rast );
685
+ ul_y = rt_raster_get_y_offset (rast );
686
+ srid = rt_raster_get_srid (rast );
687
+
688
+ center_x = scale_x * x + skew_x * y + ul_x + (scale_x + skew_x ) * 0.5 ;
689
+ center_y = scale_y * y + skew_y * x + ul_y + (scale_y + skew_y ) * 0.5 ;
690
+ point = lwpoint_make2d (srid , center_x , center_y );
691
+
692
+ return point ;
693
+ }
694
+
657
695
/******************************************************************************
658
696
* rt_raster_get_envelope_geom()
659
697
******************************************************************************/
0 commit comments