PostGIS  2.5.1dev-r@@SVN_REVISION@@
librtcore.h
Go to the documentation of this file.
1 /*
2  *
3  * WKTRaster - Raster Types for PostGIS
4  * http://trac.osgeo.org/postgis/wiki/WKTRaster
5  *
6  * Copyright (C) 2011-2013 Regents of the University of California
7  * <bkpark@ucdavis.edu>
8  * Copyright (C) 2010-2011 Jorge Arevalo <jorge.arevalo@deimos-space.com>
9  * Copyright (C) 2010-2011 David Zwarg <dzwarg@azavea.com>
10  * Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca>
11  * Copyright (C) 2009-2011 Mateusz Loskot <mateusz@loskot.net>
12  * Copyright (C) 2008-2009 Sandro Santilli <strk@kbt.io>
13  * Copyright (C) 2013 Nathaneil Hunter Clay <clay.nathaniel@gmail.com
14  *
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  *
20  * This program is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with this program; if not, write to the Free Software Foundation,
27  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28  *
29  */
30 
48 /******************************************************************************
49 * Some rules for *.(c|h) files in rt_core
50 *
51 * All functions in rt_core that receive a band index parameter
52 * must be 0-based
53 *
54 * Variables and functions internal for a public function should be prefixed
55 * with _rti_, e.g. _rti_iterator_arg.
56 ******************************************************************************/
57 
58 #ifndef LIBRTCORE_H_INCLUDED
59 #define LIBRTCORE_H_INCLUDED
60 
61 /* define the systems */
62 #if defined(__linux__) /* (predefined) */
63 #if !defined(LINUX)
64 #define LINUX
65 #endif
66 #if !defined(UNIX)
67 #define UNIX /* make sure this is defined */
68 #endif
69 #endif
70 
71 
72 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) /* seems to work like Linux... */
73 #if !defined(LINUX)
74 #define LINUX
75 #endif
76 #if !defined(UNIX)
77 #define UNIX /* make sure this is defined */
78 #endif
79 #endif
80 
81 #if defined(__GNU__) /* GNU/Hurd is also like Linux */
82 #if !defined(LINUX)
83 #define LINUX
84 #endif
85 #if !defined(UNIX)
86 #define UNIX /* make sure this is defined */
87 #endif
88 #endif
89 
90 #if defined(__MSDOS__)
91 #if !defined(MSDOS)
92 #define MSDOS /* make sure this is defined */
93 #endif
94 #endif
95 
96 #if defined(__WIN32__) || defined(__NT__) || defined(_WIN32)
97 #if !defined(WIN32)
98 #define WIN32
99 #endif
100 #if defined(__BORLANDC__) && defined(MSDOS) /* Borland always defines MSDOS */
101 #undef MSDOS
102 #endif
103 #endif
104 
105 #if defined(__APPLE__)
106 #if !defined(UNIX)
107 #define UNIX
108 #endif
109 #endif
110 
111 #if defined(sun) || defined(__sun)
112 #if !defined(UNIX)
113 #define UNIX
114 #endif
115 #endif
116 
117 #include <stdio.h> /* for printf, sprintf */
118 #include <stdlib.h> /* For size_t, srand and rand */
119 #include <stdint.h> /* For C99 int types */
120 #include <string.h> /* for memcpy, strlen, etc */
121 #include <float.h> /* for FLT_EPSILON, DBL_EPSILON and float type limits */
122 #include <limits.h> /* for integer type limits */
123 
124 #include "liblwgeom.h"
125 
126 #include "gdal_alg.h"
127 #include "gdal_frmts.h"
128 #include "gdal.h"
129 #include "gdalwarper.h"
130 #include "cpl_vsi.h"
131 #include "cpl_conv.h"
132 #include "ogr_api.h"
133 #include "ogr_srs_api.h"
134 
135 #include "../../postgis_config.h"
136 #include "../raster_config.h"
137 
138 #ifndef __GNUC__
139 # define __attribute__ (x)
140 #endif
141 
145 typedef struct rt_raster_t* rt_raster;
146 typedef struct rt_band_t* rt_band;
147 typedef struct rt_pixel_t* rt_pixel;
148 typedef struct rt_mask_t* rt_mask;
149 typedef struct rt_geomval_t* rt_geomval;
150 typedef struct rt_bandstats_t* rt_bandstats;
151 typedef struct rt_histogram_t* rt_histogram;
152 typedef struct rt_quantile_t* rt_quantile;
156 
157 typedef struct rt_iterator_t* rt_iterator;
159 
161 typedef struct rt_colormap_t* rt_colormap;
162 
163 /* envelope information */
164 typedef struct {
165  double MinX;
166  double MaxX;
167  double MinY;
168  double MaxY;
169 
170  double UpperLeftX;
171  double UpperLeftY;
172 } rt_envelope;
173 
178 /* function return error states */
179 typedef enum {
180  ES_NONE = 0, /* no error */
181  ES_ERROR = 1 /* generic error */
182 } rt_errorstate;
183 
184 /* Pixel types */
185 typedef enum {
186  PT_1BB=0, /* 1-bit boolean */
187  PT_2BUI=1, /* 2-bit unsigned integer */
188  PT_4BUI=2, /* 4-bit unsigned integer */
189  PT_8BSI=3, /* 8-bit signed integer */
190  PT_8BUI=4, /* 8-bit unsigned integer */
191  PT_16BSI=5, /* 16-bit signed integer */
192  PT_16BUI=6, /* 16-bit unsigned integer */
193  PT_32BSI=7, /* 32-bit signed integer */
194  PT_32BUI=8, /* 32-bit unsigned integer */
195  PT_32BF=10, /* 32-bit float */
196  PT_64BF=11, /* 64-bit float */
198 } rt_pixtype;
199 
200 typedef enum {
207 } rt_extenttype;
208 
217 typedef enum {
225 
229 typedef void* (*rt_allocator)(size_t size);
230 typedef void* (*rt_reallocator)(void *mem, size_t size);
231 typedef void (*rt_deallocator)(void *mem);
232 typedef void (*rt_message_handler)(const char* string, va_list ap)
233  __attribute__ (( format(printf,1,0) ));
234 
235 /*******************************************************************
236  * Functions that may be used by the raster core function's caller
237  * (for example: rt_pg functions, test functions, future loader/exporter)
238  *******************************************************************/
242 extern void rt_install_default_allocators(void);
243 
244 
249 extern void* rtalloc(size_t size);
250 extern void* rtrealloc(void* mem, size_t size);
251 extern void rtdealloc(void* mem);
252 
253 /******************************************************************/
254 
255 
259 void rterror(const char *fmt, ...);
260 void rtinfo(const char *fmt, ...);
261 void rtwarn(const char *fmt, ...);
262 
263 
267 void * default_rt_allocator(size_t size);
268 void * default_rt_reallocator(void * mem, size_t size);
269 void default_rt_deallocator(void * mem);
270 void default_rt_error_handler(const char * fmt, va_list ap);
271 void default_rt_warning_handler(const char * fmt, va_list ap);
272 void default_rt_info_handler(const char * fmt, va_list ap);
273 
274 
275 /* Debugging macros */
276 #if POSTGIS_DEBUG_LEVEL > 0
277 
278 /* Display a simple message at NOTICE level */
279 #define RASTER_DEBUG(level, msg) \
280  do { \
281  if (POSTGIS_DEBUG_LEVEL >= level) \
282  rtinfo("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__); \
283  } while (0);
284 
285 /* Display a formatted message at NOTICE level (like printf, with variadic arguments) */
286 #define RASTER_DEBUGF(level, msg, ...) \
287  do { \
288  if (POSTGIS_DEBUG_LEVEL >= level) \
289  rtinfo("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__, __VA_ARGS__); \
290  } while (0);
291 
292 #else
293 
294 /* Empty prototype that can be optimised away by the compiler for non-debug builds */
295 #define RASTER_DEBUG(level, msg) \
296  ((void) 0)
297 
298 /* Empty prototype that can be optimised away by the compiler for non-debug builds */
299 #define RASTER_DEBUGF(level, msg, ...) \
300  ((void) 0)
301 
302 #endif
303 
304 /*- memory context -------------------------------------------------------*/
305 
306 void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator,
307  rt_deallocator deallocator, rt_message_handler error_handler,
308  rt_message_handler info_handler, rt_message_handler warning_handler);
309 
310 
311 
312 /*- rt_pixtype --------------------------------------------------------*/
313 
321 int rt_pixtype_size(rt_pixtype pixtype);
322 
332 int rt_pixtype_alignment(rt_pixtype pixtype);
333 
334 /* Return human-readable name of pixel type */
335 const char* rt_pixtype_name(rt_pixtype pixtype);
336 
337 /* Return pixel type index from human-readable name */
338 rt_pixtype rt_pixtype_index_from_name(const char* pixname);
339 
347 double rt_pixtype_get_min_value(rt_pixtype pixtype);
348 
360  rt_pixtype pixtype,
361  double val, double refval,
362  int *isequal
363 );
364 
365 /*- rt_pixel ----------------------------------------------------------*/
366 
367 /*
368  * Convert an array of rt_pixel objects to two 2D arrays of value and NODATA.
369  * The dimensions of the returned 2D array are [Y][X], going by row Y and
370  * then column X.
371  *
372  * @param npixel : array of rt_pixel objects
373  * @param count : number of elements in npixel
374  * @param mask : mask to be respected when returning array
375  * @param x : the column of the center pixel (0-based)
376  * @param y : the line of the center pixel (0-based)
377  * @param distancex : the number of pixels around the specified pixel
378  * along the X axis
379  * @param distancey : the number of pixels around the specified pixel
380  * along the Y axis
381  * @param value : pointer to pointer for 2D value array
382  * @param nodata : pointer to pointer for 2D NODATA array
383  * @param dimx : size of value and nodata along the X axis
384  * @param dimy : size of value and nodata along the Y axis
385  *
386  * @return ES_NONE on success, ES_ERROR on error
387  */
389  rt_pixel npixel,uint32_t count,
390  rt_mask mask,
391  int x, int y,
392  uint16_t distancex, uint16_t distancey,
393  double ***value,
394  int ***nodata,
395  int *dimx, int *dimy
396 );
397 
398 /*- rt_band ----------------------------------------------------------*/
399 
420 rt_band rt_band_new_inline(
421  uint16_t width, uint16_t height,
422  rt_pixtype pixtype,
423  uint32_t hasnodata, double nodataval,
424  uint8_t* data
425 );
426 
446 rt_band rt_band_new_offline(
447  uint16_t width, uint16_t height,
448  rt_pixtype pixtype,
449  uint32_t hasnodata, double nodataval,
450  uint8_t bandNum, const char* path
451 );
452 
471 rt_band
473  uint16_t width,
474  uint16_t height,
475  int hasnodata,
476  double nodataval,
477  uint8_t bandNum,
478  const char* path,
479  int force
480 );
481 
492 rt_band rt_band_duplicate(rt_band band);
493 
503 int rt_band_is_offline(rt_band band);
504 
513 const char* rt_band_get_ext_path(rt_band band);
514 
523 uint64_t rt_band_get_file_size(rt_band band);
524 
533 uint64_t rt_band_get_file_timestamp(rt_band band);
534 
545 
554 
562 uint16_t rt_band_get_width(rt_band band);
563 
571 uint16_t rt_band_get_height(rt_band band);
572 
582 int rt_band_get_ownsdata_flag(rt_band band);
583 
584 /* set ownsdata flag */
585 void rt_band_set_ownsdata_flag(rt_band band, int flag);
586 
594 void* rt_band_get_data(rt_band band);
595 
606 
612 void rt_band_destroy(rt_band band);
613 
621 int rt_band_get_hasnodata_flag(rt_band band);
622 
628 void rt_band_set_hasnodata_flag(rt_band band, int flag);
629 
638 rt_errorstate rt_band_set_isnodata_flag(rt_band band, int flag);
639 
647 int rt_band_get_isnodata_flag(rt_band band);
648 
659 rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted);
660 
669 rt_errorstate rt_band_get_nodata(rt_band band, double *nodata);
670 
691  rt_band band,
692  int x, int y,
693  void *vals, uint32_t len
694 );
695 
708  rt_band band,
709  int x, int y,
710  double val,
711  int *converted
712 );
713 
735  rt_band band,
736  int x, int y,
737  uint16_t len,
738  void **vals, uint16_t *nvals
739 );
740 
754  rt_band band,
755  int x, int y,
756  double *value,
757  int *nodata
758 );
759 
778  rt_band band,
779  int x, int y,
780  uint16_t distancex, uint16_t distancey,
781  int exclude_nodata_value,
782  rt_pixel *npixels
783 );
784 
797  rt_band band, int exclude_nodata_value,
798  double *searchset, int searchcount,
799  rt_pixel *pixels
800 );
801 
809 double rt_band_get_min_value(rt_band band);
810 
818 int rt_band_check_is_nodata(rt_band band);
819 
830 int rt_band_clamped_value_is_nodata(rt_band band, double val);
831 
846  rt_band band,
847  double val,
848  double *newval, int *corrected
849 );
850 
864 rt_bandstats rt_band_get_summary_stats(
865  rt_band band,
866  int exclude_nodata_value, double sample, int inc_vals,
867  uint64_t *cK, double *cM, double *cQ
868 );
869 
888 rt_histogram rt_band_get_histogram(
889  rt_bandstats stats,
890  uint32_t bin_count, double *bin_widths, uint32_t bin_widths_count,
891  int right, double min, double max,
892  uint32_t *rtn_count
893 );
894 
906 rt_quantile rt_band_get_quantiles(rt_bandstats stats,
907  double *quantiles, int quantiles_count, uint32_t *rtn_count);
908 
909 struct quantile_llist;
911  struct quantile_llist **list,
912  uint32_t list_count
913 );
914 
942 rt_quantile rt_band_get_quantiles_stream(
943  rt_band band,
944  int exclude_nodata_value, double sample,
945  uint64_t cov_count,
946  struct quantile_llist **qlls, uint32_t *qlls_count,
947  double *quantiles, uint32_t quantiles_count,
948  uint32_t *rtn_count
949 );
950 
965 rt_valuecount rt_band_get_value_count(
966  rt_band band, int exclude_nodata_value,
967  double *search_values, uint32_t search_values_count, double roundto,
968  uint32_t *rtn_total, uint32_t *rtn_count
969 );
970 
983 rt_band rt_band_reclass(
984  rt_band srcband, rt_pixtype pixtype,
985  uint32_t hasnodata, double nodataval,
986  rt_reclassexpr *exprset, int exprcount
987 );
988 
989 /*- rt_raster --------------------------------------------------------*/
990 
1002 rt_raster rt_raster_new(uint32_t width, uint32_t height);
1003 
1014 rt_raster rt_raster_from_wkb(const uint8_t* wkb, uint32_t wkbsize);
1015 
1026 rt_raster rt_raster_from_hexwkb(const char* hexwkb, uint32_t hexwkbsize);
1027 
1037 uint8_t *rt_raster_to_wkb(rt_raster raster, int outasin, uint32_t *wkbsize);
1038 
1049 char *rt_raster_to_hexwkb(rt_raster raster, int outasin, uint32_t *hexwkbsize);
1050 
1061 void rt_raster_destroy(rt_raster raster);
1062 
1063 /* Get number of bands */
1064 uint16_t rt_raster_get_num_bands(rt_raster raster);
1065 
1074 rt_band rt_raster_get_band(rt_raster raster, int bandNum);
1075 
1076 /* Get number of rows */
1077 uint16_t rt_raster_get_width(rt_raster raster);
1078 
1079 /* Get number of columns */
1080 uint16_t rt_raster_get_height(rt_raster raster);
1081 
1092 int rt_raster_add_band(rt_raster raster, rt_band band, int index);
1093 
1107  rt_raster raster,
1108  rt_pixtype pixtype,
1109  double initialvalue,
1110  uint32_t hasnodata, double nodatavalue,
1111  int index
1112 );
1113 
1123 void rt_raster_set_scale(rt_raster raster,
1124  double scaleX, double scaleY);
1125 
1133 double rt_raster_get_x_scale(rt_raster raster);
1134 
1142 double rt_raster_get_y_scale(rt_raster raster);
1143 
1153 void rt_raster_set_offsets(rt_raster raster,
1154  double x, double y);
1155 
1164 double rt_raster_get_x_offset(rt_raster raster);
1165 
1174 double rt_raster_get_y_offset(rt_raster raster);
1175 
1183 void rt_raster_set_skews(rt_raster raster,
1184  double skewX, double skewY);
1185 
1192 double rt_raster_get_x_skew(rt_raster raster);
1193 
1200 double rt_raster_get_y_skew(rt_raster raster);
1201 
1214 void rt_raster_get_phys_params(rt_raster rast,
1215  double *i_mag, double *j_mag, double *theta_i, double *theta_ij) ;
1216 
1232 void rt_raster_set_phys_params(rt_raster rast,
1233  double i_mag, double j_mag, double theta_i, double theta_ij) ;
1234 
1235 
1251 void rt_raster_calc_phys_params(double xscale,
1252  double xskew, double yskew, double yscale,
1253  double *i_mag, double *j_mag, double *theta_i, double *theta_ij) ;
1254 
1255 
1272 int rt_raster_calc_gt_coeff(double i_mag,
1273  double j_mag, double theta_i, double theta_ij,
1274  double *xscale, double *xskew, double *yskew, double *yscale) ;
1275 
1282 void rt_raster_set_srid(rt_raster raster, int32_t srid);
1283 
1290 int32_t rt_raster_get_srid(rt_raster raster);
1291 
1302  rt_raster raster,
1303  double *gt, double *igt
1304 );
1305 
1313  double *gt);
1314 
1323  double *gt);
1324 
1338  rt_raster raster,
1339  double xr, double yr,
1340  double* xw, double* yw,
1341  double *gt
1342 );
1343 
1357  rt_raster raster,
1358  double xw, double yw,
1359  double *xr, double *yr,
1360  double *igt
1361 );
1362 
1376 
1388 
1398 
1413  rt_raster raster, int nband,
1414  LWGEOM **perimeter
1415 );
1416 
1417 /*
1418  * Compute skewed extent that covers unskewed extent.
1419  *
1420  * @param envelope : unskewed extent of type rt_envelope
1421  * @param skew : pointer to 2-element array (x, y) of skew
1422  * @param scale : pointer to 2-element array (x, y) of scale
1423  * @param tolerance : value between 0 and 1 where the smaller the tolerance
1424  * results in an extent approaching the "minimum" skewed extent.
1425  * If value <= 0, tolerance = 0.1. If value > 1, tolerance = 1.
1426  *
1427  * @return skewed raster who's extent covers unskewed extent, NULL on error
1428  */
1429 rt_raster
1431  rt_envelope extent,
1432  double *skew,
1433  double *scale,
1434  double tolerance
1435 );
1436 
1451 LWPOLY* rt_raster_pixel_as_polygon(rt_raster raster, int x, int y);
1452 
1466 rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface);
1467 
1485 rt_geomval
1487  rt_raster raster, int nband,
1488  int exclude_nodata_value,
1489  int * pnElements
1490 );
1491 
1498 void* rt_raster_serialize(rt_raster raster);
1499 
1508 rt_raster rt_raster_deserialize(void* serialized, int header_only);
1509 
1517 int rt_raster_is_empty(rt_raster raster);
1518 
1527 int rt_raster_has_band(rt_raster raster, int nband);
1528 
1544  rt_raster torast, rt_raster fromrast,
1545  int fromindex, int toindex
1546 );
1547 
1559 rt_raster rt_raster_from_band(rt_raster raster, uint32_t *bandNums,
1560  int count);
1561 
1571 rt_band rt_raster_replace_band(rt_raster raster, rt_band band,
1572  int index);
1573 
1582 rt_raster rt_raster_clone(rt_raster raster, uint8_t deep);
1583 
1596 uint8_t *rt_raster_to_gdal(rt_raster raster, const char *srs,
1597  char *format, char **options, uint64_t *gdalsize);
1598 
1608 rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc);
1609 
1626 GDALDatasetH rt_raster_to_gdal_mem(
1627  rt_raster raster,
1628  const char *srs,
1629  uint32_t *bandNums,
1630  int *excludeNodataValues,
1631  int count,
1632  GDALDriverH *rtn_drv, int *destroy_rtn_drv
1633 );
1634 
1642 rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds);
1643 
1674 rt_raster rt_raster_gdal_warp(
1675  rt_raster raster,
1676  const char *src_srs, const char *dst_srs,
1677  double *scale_x, double *scale_y,
1678  int *width, int *height,
1679  double *ul_xw, double *ul_yw,
1680  double *grid_xw, double *grid_yw,
1681  double *skew_x, double *skew_y,
1682  GDALResampleAlg resample_alg, double max_err);
1683 
1710 rt_raster rt_raster_gdal_rasterize(const unsigned char *wkb,
1711  uint32_t wkb_len, const char *srs,
1712  uint32_t num_bands, rt_pixtype *pixtype,
1713  double *init, double *value,
1714  double *nodata, uint8_t *hasnodata,
1715  int *width, int *height,
1716  double *scale_x, double *scale_y,
1717  double *ul_xw, double *ul_yw,
1718  double *grid_xw, double *grid_yw,
1719  double *skew_x, double *skew_y,
1720  char **options
1721 );
1722 
1740  rt_raster rast1, int nband1,
1741  rt_raster rast2, int nband2,
1742  int *intersects
1743 );
1744 
1762  rt_raster rast1, int nband1,
1763  rt_raster rast2, int nband2,
1764  int *overlaps
1765 );
1766 
1784  rt_raster rast1, int nband1,
1785  rt_raster rast2, int nband2,
1786  int *contains
1787 );
1788 
1806  rt_raster rast1, int nband1,
1807  rt_raster rast2, int nband2,
1808  int *contains
1809 );
1810 
1828  rt_raster rast1, int nband1,
1829  rt_raster rast2, int nband2,
1830  int *touches
1831 );
1832 
1850  rt_raster rast1, int nband1,
1851  rt_raster rast2, int nband2,
1852  int *covers
1853 );
1854 
1872  rt_raster rast1, int nband1,
1873  rt_raster rast2, int nband2,
1874  int *coveredby
1875 );
1876 
1896  rt_raster rast1, int nband1,
1897  rt_raster rast2, int nband2,
1898  double distance,
1899  int *dwithin
1900 );
1901 
1921  rt_raster rast1, int nband1,
1922  rt_raster rast2, int nband2,
1923  double distance,
1924  int *dfwithin
1925 );
1926 
1927 /*
1928  * Return ES_ERROR if error occurred in function.
1929  * Paramter aligned returns non-zero if two rasters are aligned
1930  *
1931  * @param rast1 : the first raster for alignment test
1932  * @param rast2 : the second raster for alignment test
1933  * @param *aligned : non-zero value if the two rasters are aligned
1934  * @param *reason : reason why rasters are not aligned
1935  *
1936  * @return ES_NONE if success, ES_ERROR if error
1937  */
1939  rt_raster rast1,
1940  rt_raster rast2,
1941  int *aligned, char **reason
1942 );
1943 
1944 /*
1945  * Return raster of computed extent specified extenttype applied
1946  * on two input rasters. The raster returned should be freed by
1947  * the caller
1948  *
1949  * @param rast1 : the first raster
1950  * @param rast2 : the second raster
1951  * @param extenttype : type of extent for the output raster
1952  * @param *rtnraster : raster of computed extent
1953  * @param *offset : 4-element array indicating the X,Y offsets
1954  * for each raster. 0,1 for rast1 X,Y. 2,3 for rast2 X,Y.
1955  *
1956  * @return ES_NONE if success, ES_ERROR if error
1957  */
1960  rt_raster rast1, rt_raster rast2,
1961  rt_extenttype extenttype,
1962  rt_raster *rtnraster, double *offset
1963 );
1964 
2003  rt_iterator itrset, uint16_t itrcount,
2004  rt_extenttype extenttype, rt_raster customextent,
2005  rt_pixtype pixtype,
2006  uint8_t hasnodata, double nodataval,
2007  uint16_t distancex, uint16_t distancey,
2008  rt_mask mask,
2009  void *userarg,
2010  int (*callback)(
2011  rt_iterator_arg arg,
2012  void *userarg,
2013  double *value,
2014  int *nodata
2015  ),
2016  rt_raster *rtnraster
2017 );
2018 
2030 rt_raster rt_raster_colormap(
2031  rt_raster raster, int nband,
2032  rt_colormap colormap
2033 );
2034 
2035 /*- utilities -------------------------------------------------------*/
2036 
2037 /*
2038  * rt_core memory functions
2039  */
2040 extern void *rtalloc(size_t size);
2041 extern void *rtrealloc(void *mem, size_t size);
2042 extern void rtdealloc(void *mem);
2043 
2044 /*
2045  * GDAL driver flags
2046  */
2047 
2048 #define GDAL_ENABLE_ALL "ENABLE_ALL"
2049 #define GDAL_DISABLE_ALL "DISABLE_ALL"
2050 #define GDAL_VSICURL "VSICURL"
2051 
2052 /*
2053  * Set of functions to clamp double to int of different size
2054  */
2055 
2056 #if !defined(POSTGIS_RASTER_WARN_ON_TRUNCATION)
2057 #define POSTGIS_RASTER_WARN_ON_TRUNCATION 0
2058 #endif
2059 
2060 #define POSTGIS_RT_1BBMAX 1
2061 #define POSTGIS_RT_2BUIMAX 3
2062 #define POSTGIS_RT_4BUIMAX 15
2063 
2064 uint8_t
2065 rt_util_clamp_to_1BB(double value);
2066 
2067 uint8_t
2069 
2070 uint8_t
2072 
2073 int8_t
2075 
2076 uint8_t
2078 
2079 int16_t
2081 
2082 uint16_t
2084 
2085 int32_t
2087 
2088 uint32_t
2090 
2091 float
2092 rt_util_clamp_to_32F(double value);
2093 
2094 int
2096  double initialvalue,
2097  int32_t checkvalint, uint32_t checkvaluint,
2098  float checkvalfloat, double checkvaldouble,
2099  rt_pixtype pixtype
2100 );
2101 
2109 GDALResampleAlg
2110 rt_util_gdal_resample_alg(const char *algname);
2111 
2119 GDALDataType
2121 
2129 rt_pixtype
2130 rt_util_gdal_datatype_to_pixtype(GDALDataType gdt);
2131 
2132 /*
2133  get GDAL runtime version information
2134 */
2135 const char*
2136 rt_util_gdal_version(const char *request);
2137 
2138 /*
2139  computed extent type from c string
2140 */
2142 rt_util_extent_type(const char *name);
2143 
2144 /*
2145  convert the spatial reference string from a GDAL recognized format to either WKT or Proj4
2146 */
2147 char*
2148 rt_util_gdal_convert_sr(const char *srs, int proj4);
2149 
2150 /*
2151  is the spatial reference string supported by GDAL
2152 */
2153 int
2154 rt_util_gdal_supported_sr(const char *srs);
2155 
2167 rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode);
2168 
2169 /*
2170  is GDAL configured correctly?
2171 */
2172 int
2174 
2175 /*
2176  register all GDAL drivers
2177 */
2178 int
2179 rt_util_gdal_register_all(int force_register_all);
2180 
2181 /*
2182  is the driver registered?
2183 */
2184 int
2185 rt_util_gdal_driver_registered(const char *drv);
2186 
2187 /*
2188  wrapper for GDALOpen and GDALOpenShared
2189 */
2190 GDALDatasetH
2191 rt_util_gdal_open(const char *fn, GDALAccess fn_access, int shared);
2192 
2193 void
2195  OGREnvelope env,
2196  rt_envelope *ext
2197 );
2198 
2199 void
2201  rt_envelope ext,
2202  OGREnvelope *env
2203 );
2204 
2205 LWPOLY *
2207  rt_envelope ext
2208 );
2209 
2210 int
2212  double *gt1,
2213  double *gt2
2214 );
2215 
2216 /* coordinates in RGB and HSV are floating point values between 0 and 1 */
2219  double rgb[3],
2220  double hsv[3]
2221 );
2222 
2223 /* coordinates in RGB and HSV are floating point values between 0 and 1 */
2226  double hsv[3],
2227  double rgb[3]
2228 );
2229 
2230 /*
2231  helper macros for consistent floating point equality checks
2232 */
2233 #define FLT_NEQ(x, y) (fabs(x - y) > FLT_EPSILON)
2234 #define FLT_EQ(x, y) (!FLT_NEQ(x, y))
2235 #define DBL_NEQ(x, y) (fabs(x - y) > DBL_EPSILON)
2236 #define DBL_EQ(x, y) (!DBL_NEQ(x, y))
2237 
2238 /*
2239  helper macro for symmetrical rounding
2240 */
2241 #define ROUND(x, y) (((x > 0.0) ? floor((x * pow(10, y) + 0.5)) : ceil((x * pow(10, y) - 0.5))) / pow(10, y))
2242 
2251  /*---[ 8 byte boundary ]---{ */
2252  uint32_t size; /* required by postgresql: 4 bytes */
2253  uint16_t version; /* format version (this is version 0): 2 bytes */
2254  uint16_t numBands; /* Number of bands: 2 bytes */
2255 
2256  /* }---[ 8 byte boundary ]---{ */
2257  double scaleX; /* pixel width: 8 bytes */
2258 
2259  /* }---[ 8 byte boundary ]---{ */
2260  double scaleY; /* pixel height: 8 bytes */
2261 
2262  /* }---[ 8 byte boundary ]---{ */
2263  double ipX; /* insertion point X: 8 bytes */
2264 
2265  /* }---[ 8 byte boundary ]---{ */
2266  double ipY; /* insertion point Y: 8 bytes */
2267 
2268  /* }---[ 8 byte boundary ]---{ */
2269  double skewX; /* skew about the X axis: 8 bytes */
2270 
2271  /* }---[ 8 byte boundary ]---{ */
2272  double skewY; /* skew about the Y axis: 8 bytes */
2273 
2274  /* }---[ 8 byte boundary ]--- */
2275  int32_t srid; /* Spatial reference id: 4 bytes */
2276  uint16_t width; /* pixel columns: 2 bytes */
2277  uint16_t height; /* pixel rows: 2 bytes */
2278 };
2279 
2280 /* NOTE: the initial part of this structure matches the layout
2281  * of data in the serialized form version 0, starting
2282  * from the numBands element
2283  */
2284 struct rt_raster_t {
2286  uint16_t version;
2287 
2288  /* Number of bands, all share the same dimension
2289  * and georeference */
2290  uint16_t numBands;
2291 
2292  /* Georeference (in projection units) */
2293  double scaleX; /* pixel width */
2294  double scaleY; /* pixel height */
2295  double ipX; /* geo x ordinate of the corner of upper-left pixel */
2296  double ipY; /* geo y ordinate of the corner of bottom-right pixel */
2297  double skewX; /* skew about the X axis*/
2298  double skewY; /* skew about the Y axis */
2299 
2300  int32_t srid; /* spatial reference id */
2301  uint16_t width; /* pixel columns - max 65535 */
2302  uint16_t height; /* pixel rows - max 65535 */
2303  rt_band *bands; /* actual bands */
2304 
2305 };
2306 
2308  uint8_t bandNum; /* 0-based */
2309  char* path; /* internally owned */
2310  void *mem; /* loaded external band data, internally owned */
2311 };
2312 
2313 struct rt_band_t {
2315  int32_t offline;
2316  uint16_t width;
2317  uint16_t height;
2318  int32_t hasnodata; /* a flag indicating if this band contains nodata values */
2319  int32_t isnodata; /* a flag indicating if this band is filled only with
2320  nodata values. flag CANNOT be TRUE if hasnodata is FALSE */
2321  double nodataval; /* int will be converted ... */
2322  int8_t ownsdata; /* 0, externally owned. 1, internally owned. only applies to data.mem */
2323 
2324  rt_raster raster; /* reference to parent raster */
2325 
2326  union {
2327  void* mem; /* actual data, externally owned */
2328  struct rt_extband_t offline;
2329  } data;
2330 
2331 };
2332 
2333 struct rt_pixel_t {
2334  int x; /* column */
2335  int y; /* line */
2336 
2338  double value;
2339 
2341 };
2342 
2343 struct rt_mask_t {
2344  uint16_t dimx;
2345  uint16_t dimy;
2346  double **values;
2347  int **nodata;
2348  int weighted; /* 0 if not weighted values 1 if weighted values */
2349 };
2350 
2351 /* polygon as LWPOLY with associated value */
2354  double val;
2355 };
2356 
2357 /* summary stats of specified band */
2359  double sample;
2361 
2362  double min;
2363  double max;
2364  double sum;
2365  double mean;
2366  double stddev;
2367 
2368  double *values;
2369  int sorted; /* flag indicating that values is sorted ascending by value */
2370 };
2371 
2372 /* histogram bin(s) of specified band */
2375  double percent;
2376 
2377  double min;
2378  double max;
2379 
2380  int inc_min;
2381  int inc_max;
2382 };
2383 
2384 /* quantile(s) of the specified band */
2386  double quantile;
2387  double value;
2389 };
2390 
2391 /* listed-list structures for rt_band_get_quantiles_stream */
2393  uint8_t algeq; /* AL-GEQ (1) or AL-GT (0) */
2394  double quantile;
2395  uint64_t tau; /* position in sequence */
2396 
2397  struct quantile_llist_element *head; /* H index 0 */
2398  struct quantile_llist_element *tail; /* H index last */
2399  uint32_t count; /* # of elements in H */
2400 
2401  /* faster access to elements at specific intervals */
2403  uint32_t index_max; /* max # of elements in index */
2404 
2405  uint64_t sum1; /* N1H */
2406  uint64_t sum2; /* N2H */
2407 };
2408 
2410  double value;
2412 
2415 };
2416 
2420 };
2421 
2422 /* number of times a value occurs */
2424  double value;
2426  double percent;
2427 };
2428 
2429 /* reclassification expression */
2432  double min;
2433  double max;
2434  int inc_min; /* include min */
2435  int inc_max; /* include max */
2436  int exc_min; /* exceed min */
2437  int exc_max; /* exceed max */
2438  } src, dst;
2439 };
2440 
2441 /* raster iterator */
2443  rt_raster raster;
2444  uint16_t nband; /* 0-based */
2445  uint8_t nbnodata; /* no band = treat as NODATA */
2446 };
2447 
2448 /* callback argument from raster iterator */
2450  /* # of rasters, Z-axis */
2451  uint16_t rasters;
2452  /* # of rows, Y-axis */
2454  /* # of columns, X-axis */
2456 
2457  /* axis order: Z,X,Y */
2458  /* individual pixel values */
2459  double ***values;
2460  /* 0,1 value of nodata flag */
2461  int ***nodata;
2462 
2463  /* X,Y of pixel from each input raster */
2464  int **src_pixel;
2465 
2466  /* X,Y of pixel from output raster */
2467  int dst_pixel[2];
2468 };
2469 
2470 /* gdal driver information */
2472  int idx;
2473  char *short_name;
2474  char *long_name;
2478 };
2479 
2480 /* raster colormap entry */
2483  double value;
2484  uint8_t color[4]; /* RGBA */
2485 };
2486 
2488  enum {
2492  } method;
2493 
2494  int ncolor;
2495  uint16_t nentry;
2496  rt_colormap_entry entry;
2497 };
2498 
2499 #endif /* LIBRTCORE_H_INCLUDED */
Datum coveredby(PG_FUNCTION_ARGS)
void *(* rt_allocator)(size_t size)
Global functions for memory/logging handlers.
Definition: librtcore.h:229
int32_t rt_util_clamp_to_32BSI(double value)
Definition: rt_util.c:69
int rt_raster_calc_gt_coeff(double i_mag, double j_mag, double theta_i, double theta_ij, double *xscale, double *xskew, double *yskew, double *yscale)
Calculates the coefficients of a geotransform given the physically significant parameters describing ...
Definition: rt_raster.c:314
uint64_t sum1
Definition: librtcore.h:2405
double skewY
Definition: librtcore.h:2298
double MinY
Definition: librtcore.h:167
int32_t srid
Definition: librtcore.h:2300
rt_errorstate rt_band_corrected_clamped_value(rt_band band, double val, double *newval, int *corrected)
Correct value when clamped value is equal to clamped NODATA value.
Definition: rt_band.c:1834
uint16_t nentry
Definition: librtcore.h:2495
double UpperLeftX
Definition: librtcore.h:170
int quantile_llist_destroy(struct quantile_llist **list, uint32_t list_count)
uint32_t rt_util_clamp_to_32BUI(double value)
Definition: rt_util.c:74
void * rt_raster_serialize(rt_raster raster)
Return this raster in serialized form.
Definition: rt_serialize.c:521
int rt_util_gdal_register_all(int force_register_all)
Definition: rt_util.c:336
double rt_raster_get_x_offset(rt_raster raster)
Get raster x offset, in projection units.
Definition: rt_raster.c:213
double rt_raster_get_y_skew(rt_raster raster)
Get skew about the Y axis.
Definition: rt_raster.c:190
void *(* rt_reallocator)(void *mem, size_t size)
Definition: librtcore.h:230
Datum covers(PG_FUNCTION_ARGS)
uint16_t rt_raster_get_num_bands(rt_raster raster)
Definition: rt_raster.c:372
struct quantile_llist_element * element
Definition: librtcore.h:2418
rt_errorstate rt_raster_same_alignment(rt_raster rast1, rt_raster rast2, int *aligned, char **reason)
uint32_t count
Definition: librtcore.h:2360
double quantile
Definition: librtcore.h:2394
void default_rt_info_handler(const char *fmt, va_list ap)
Definition: rt_context.c:93
struct quantile_llist_element * prev
Definition: librtcore.h:2413
void * mem
Definition: librtcore.h:2310
raster
Be careful!! Zeros function&#39;s input parameter can be a (height x width) array, not (width x height): ...
Definition: rtrowdump.py:121
void(* rt_message_handler)(const char *string, va_list ap) __attribute__((format(printf
Definition: librtcore.h:232
uint16_t numBands
Definition: librtcore.h:2290
struct rt_pixel_t * rt_pixel
Definition: librtcore.h:147
rt_raster rt_raster_from_band(rt_raster raster, uint32_t *bandNums, int count)
Construct a new rt_raster from an existing rt_raster and an array of band numbers.
Definition: rt_raster.c:1435
rt_geomval rt_raster_gdal_polygonize(rt_raster raster, int nband, int exclude_nodata_value, int *pnElements)
Returns a set of "geomval" value, one for each group of pixel sharing the same value for the provided...
Definition: rt_geometry.c:940
void rt_raster_set_geotransform_matrix(rt_raster raster, double *gt)
Set raster&#39;s geotransform using 6-element array.
Definition: rt_raster.c:727
struct rt_raster_t * rt_raster
Types definitions.
Definition: librtcore.h:145
double MaxY
Definition: librtcore.h:168
rt_raster raster
Definition: librtcore.h:2324
void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt)
Get 6-element array of raster geotransform matrix.
Definition: rt_raster.c:706
uint32_t count
Definition: librtcore.h:2425
rt_quantile rt_band_get_quantiles_stream(rt_band band, int exclude_nodata_value, double sample, uint64_t cov_count, struct quantile_llist **qlls, uint32_t *qlls_count, double *quantiles, uint32_t quantiles_count, uint32_t *rtn_count)
Compute the default set of or requested quantiles for a coverage.
double MaxX
Definition: librtcore.h:166
rt_pixtype pixtype
Definition: librtcore.h:2314
void rt_raster_set_skews(rt_raster raster, double skewX, double skewY)
Set skews about the X and Y axis.
Definition: rt_raster.c:168
struct rt_gdaldriver_t * rt_gdaldriver
Definition: librtcore.h:154
void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator, rt_deallocator deallocator, rt_message_handler error_handler, rt_message_handler info_handler, rt_message_handler warning_handler)
This function is called when the PostgreSQL backend is taking care of the memory and we want to use p...
Definition: rt_context.c:151
band
Definition: ovdump.py:57
double quantile
Definition: librtcore.h:2386
def fmt
Definition: pixval.py:92
rt_errorstate rt_raster_from_two_rasters(rt_raster rast1, rt_raster rast2, rt_extenttype extenttype, rt_raster *rtnraster, double *offset)
Definition: rt_raster.c:3461
char * short_name
Definition: librtcore.h:2473
rt_extenttype
Definition: librtcore.h:200
GDALDatasetH rt_raster_to_gdal_mem(rt_raster raster, const char *srs, uint32_t *bandNums, int *excludeNodataValues, int count, GDALDriverH *rtn_drv, int *destroy_rtn_drv)
Return GDAL dataset using GDAL MEM driver from raster.
Definition: rt_raster.c:1826
Datum contains(PG_FUNCTION_ARGS)
LWGEOM * geom
Definition: librtcore.h:2340
int rt_band_is_offline(rt_band band)
Return non-zero if the given band data is on the filesystem.
Definition: rt_band.c:329
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
Definition: rt_context.c:199
rt_raster rt_raster_gdal_rasterize(const unsigned char *wkb, uint32_t wkb_len, const char *srs, uint32_t num_bands, rt_pixtype *pixtype, double *init, double *value, double *nodata, uint8_t *hasnodata, int *width, int *height, double *scale_x, double *scale_y, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, char **options)
Return a raster of the provided geometry.
Definition: rt_raster.c:2509
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition: rt_context.c:171
rt_band rt_band_new_offline_from_path(uint16_t width, uint16_t height, int hasnodata, double nodataval, uint8_t bandNum, const char *path, int force)
Create an out-db rt_band from path.
Definition: rt_band.c:199
void * default_rt_reallocator(void *mem, size_t size)
Definition: rt_context.c:54
data
Definition: ovdump.py:103
rt_raster rt_raster_gdal_warp(rt_raster raster, const char *src_srs, const char *dst_srs, double *scale_x, double *scale_y, int *width, int *height, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, GDALResampleAlg resample_alg, double max_err)
Return a warped raster using GDAL Warp API.
Definition: rt_warp.c:178
void rt_raster_get_phys_params(rt_raster rast, double *i_mag, double *j_mag, double *theta_i, double *theta_ij)
Calculates and returns the physically significant descriptors embodied in the geotransform attached t...
Definition: rt_raster.c:231
void * rtrealloc(void *mem, size_t size)
Definition: rt_context.c:179
uint16_t height
Definition: librtcore.h:2317
double value
Definition: librtcore.h:2338
rt_errorstate rt_raster_covers(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *covers)
Return ES_ERROR if error occurred in function.
LWPOLY * rt_util_envelope_to_lwpoly(rt_envelope ext)
Definition: rt_util.c:437
int rt_band_get_pixel_of_value(rt_band band, int exclude_nodata_value, double *searchset, int searchcount, rt_pixel *pixels)
Search band for pixel(s) with search values.
Definition: rt_band.c:1652
rt_errorstate
Enum definitions.
Definition: librtcore.h:179
int rt_util_same_geotransform_matrix(double *gt1, double *gt2)
Definition: rt_util.c:489
rt_errorstate rt_raster_contains(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains)
Return ES_ERROR if error occurred in function.
#define __attribute__
Definition: librtcore.h:139
double ipY
Definition: librtcore.h:2296
gt
Definition: window.py:77
rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted)
Set nodata value.
Definition: rt_band.c:733
int ** nodata
Definition: librtcore.h:2347
rt_pixtype
Definition: librtcore.h:185
Datum overlaps(PG_FUNCTION_ARGS)
void rt_band_destroy(rt_band band)
Destroy a raster band.
Definition: rt_band.c:340
rt_histogram rt_band_get_histogram(rt_bandstats stats, uint32_t bin_count, double *bin_widths, uint32_t bin_widths_count, int right, double min, double max, uint32_t *rtn_count)
Count the distribution of data.
struct rt_reclassexpr_t * rt_reclassexpr
Definition: librtcore.h:155
struct rt_quantile_t * rt_quantile
Definition: librtcore.h:152
uint8_t * rt_raster_to_wkb(rt_raster raster, int outasin, uint32_t *wkbsize)
Return this raster in WKB form.
Definition: rt_wkb.c:494
uint32_t size
Definition: librtcore.h:2285
int weighted
Definition: librtcore.h:2348
int rt_raster_is_empty(rt_raster raster)
Return TRUE if the raster is empty.
Definition: rt_raster.c:1334
uint16_t height
Definition: librtcore.h:2302
Datum touches(PG_FUNCTION_ARGS)
uint16_t dimy
Definition: librtcore.h:2345
uint64_t rt_band_get_file_size(rt_band band)
Return file size in bytes.
Definition: rt_band.c:586
double value
Definition: librtcore.h:2387
rt_geos_spatial_test
GEOS spatial relationship tests available.
Definition: librtcore.h:217
rt_errorstate rt_band_get_nodata(rt_band band, double *nodata)
Get NODATA value.
Definition: rt_band.c:1730
rt_errorstate rt_raster_get_convex_hull(rt_raster raster, LWGEOM **hull)
Get raster&#39;s convex hull.
Definition: rt_geometry.c:803
ds
Definition: pixval.py:66
void default_rt_warning_handler(const char *fmt, va_list ap)
Definition: rt_context.c:80
const char * rt_band_get_ext_path(rt_band band)
Return band&#39;s external path (only valid when rt_band_is_offline returns non-zero).
Definition: rt_band.c:363
struct quantile_llist_element * next
Definition: librtcore.h:2414
unsigned int uint32_t
Definition: uthash.h:78
LWPOLY * geom
Definition: librtcore.h:2353
rt_errorstate rt_raster_cell_to_geopoint(rt_raster raster, double xr, double yr, double *xw, double *yw, double *gt)
Convert an xr, yr raster point to an xw, yw point on map.
Definition: rt_raster.c:755
int rt_pixtype_alignment(rt_pixtype pixtype)
Return alignment requirements for data in the given pixel type.
Definition: rt_pixel.c:75
rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface)
Get a raster as a surface (multipolygon).
Definition: rt_geometry.c:355
uint16_t rt_util_clamp_to_16BUI(double value)
Definition: rt_util.c:64
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition: rt_band.c:667
nband
Definition: pixval.py:52
double ** values
Definition: librtcore.h:2346
double val
Definition: librtcore.h:2354
struct quantile_llist_element * tail
Definition: librtcore.h:2398
GDALDataType rt_util_pixtype_to_gdal_datatype(rt_pixtype pt)
Convert rt_pixtype to GDALDataType.
Definition: rt_util.c:118
double percent
Definition: librtcore.h:2375
uint16_t version
Definition: librtcore.h:2286
void rt_util_to_ogr_envelope(rt_envelope ext, OGREnvelope *env)
Definition: rt_util.c:424
int rt_util_gdal_driver_registered(const char *drv)
Definition: rt_util.c:355
uint32_t columns
Definition: librtcore.h:2455
void rtwarn(const char *fmt,...)
Definition: rt_context.c:224
uint16_t rasters
Definition: librtcore.h:2451
int rt_band_get_ownsdata_flag(rt_band band)
Return 0 (FALSE) or non-zero (TRUE) indicating if rt_band is responsible for managing the memory for ...
Definition: rt_band.c:659
Datum intersects(PG_FUNCTION_ARGS)
rt_quantile rt_band_get_quantiles(rt_bandstats stats, double *quantiles, int quantiles_count, uint32_t *rtn_count)
Compute the default set of or requested quantiles for a set of data the quantile formula used is same...
rt_errorstate rt_raster_intersects(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *intersects)
Return ES_ERROR if error occurred in function.
rt_errorstate rt_band_get_pixel(rt_band band, int x, int y, double *value, int *nodata)
Get pixel value.
Definition: rt_band.c:1221
rt_extenttype rt_util_extent_type(const char *name)
Definition: rt_util.c:191
void rt_raster_set_scale(rt_raster raster, double scaleX, double scaleY)
Set scale in projection units.
Definition: rt_raster.c:137
uint64_t tau
Definition: librtcore.h:2395
int rt_raster_generate_new_band(rt_raster raster, rt_pixtype pixtype, double initialvalue, uint32_t hasnodata, double nodatavalue, int index)
Generate a new inline band and add it to a raster.
Definition: rt_raster.c:485
rt_pixtype rt_pixtype_index_from_name(const char *pixname)
Definition: rt_pixel.c:80
char * rt_raster_to_hexwkb(rt_raster raster, int outasin, uint32_t *hexwkbsize)
Return this raster in HEXWKB form (null-terminated hex)
Definition: rt_wkb.c:679
rt_errorstate rt_util_rgb_to_hsv(double rgb[3], double hsv[3])
Definition: rt_util.c:505
rt_errorstate rt_band_get_pixel_line(rt_band band, int x, int y, uint16_t len, void **vals, uint16_t *nvals)
Get values of multiple pixels.
Definition: rt_band.c:1137
rt_raster rt_raster_clone(rt_raster raster, uint8_t deep)
Clone an existing raster.
Definition: rt_raster.c:1540
void rt_raster_set_offsets(rt_raster raster, double x, double y)
Set insertion points in projection units.
Definition: rt_raster.c:199
uint16_t width
Definition: librtcore.h:2301
void rt_raster_set_phys_params(rt_raster rast, double i_mag, double j_mag, double theta_i, double theta_ij)
Calculates the geotransform coefficients and applies them to the supplied raster. ...
Definition: rt_raster.c:297
int rt_util_gdal_supported_sr(const char *srs)
Definition: rt_util.c:243
rt_errorstate rt_band_load_offline_data(rt_band band)
Load offline band&#39;s data.
Definition: rt_band.c:429
rt_raster rt_raster_from_wkb(const uint8_t *wkb, uint32_t wkbsize)
Construct an rt_raster from a binary WKB representation.
Definition: rt_wkb.c:276
int8_t rt_util_clamp_to_8BSI(double value)
Definition: rt_util.c:49
int rt_util_dbl_trunc_warning(double initialvalue, int32_t checkvalint, uint32_t checkvaluint, float checkvalfloat, double checkvaldouble, rt_pixtype pixtype)
Definition: rt_util.c:627
int rt_band_clamped_value_is_nodata(rt_band band, double val)
Compare clamped value to band&#39;s clamped NODATA value.
Definition: rt_band.c:1798
rt_band rt_raster_get_band(rt_raster raster, int bandNum)
Return Nth band, or NULL if unavailable.
Definition: rt_raster.c:381
int rt_raster_copy_band(rt_raster torast, rt_raster fromrast, int fromindex, int toindex)
Copy one band from one raster to another.
Definition: rt_raster.c:1370
rt_pixtype rt_util_gdal_datatype_to_pixtype(GDALDataType gdt)
Convert GDALDataType to rt_pixtype.
Definition: rt_util.c:153
void rtinfo(const char *fmt,...)
Definition: rt_context.c:211
int rt_band_check_is_nodata(rt_band band)
Returns TRUE if the band is only nodata values.
Definition: rt_band.c:1752
int8_t ownsdata
Definition: librtcore.h:2322
int rt_band_get_hasnodata_flag(rt_band band)
Get hasnodata flag value.
Definition: rt_band.c:674
struct rt_colormap_entry_t * rt_colormap_entry
Definition: librtcore.h:160
int count
Definition: genraster.py:56
double rt_raster_get_x_scale(rt_raster raster)
Get scale X in projection units.
Definition: rt_raster.c:150
LWPOLY * rt_raster_pixel_as_polygon(rt_raster raster, int x, int y)
Get a raster pixel as a polygon.
Definition: rt_geometry.c:610
uint16_t rt_band_get_width(rt_band band)
Return width of this band.
Definition: rt_band.c:640
int rt_raster_has_band(rt_raster raster, int nband)
Return TRUE if the raster has a band of this number.
Definition: rt_raster.c:1347
uint16_t rt_band_get_height(rt_band band)
Return height of this band.
Definition: rt_band.c:649
double skewX
Definition: librtcore.h:2297
rt_colormap_entry entry
Definition: librtcore.h:2496
double * values
Definition: librtcore.h:2368
rt_errorstate rt_raster_get_envelope_geom(rt_raster raster, LWGEOM **env)
Get raster&#39;s envelope as a geometry.
Definition: rt_geometry.c:670
struct rt_band_t * rt_band
Definition: librtcore.h:146
double nodataval
Definition: librtcore.h:2321
void * rt_band_get_data(rt_band band)
Get pointer to raster band data.
Definition: rt_band.c:400
double rt_pixtype_get_min_value(rt_pixtype pixtype)
Return minimum value possible for pixel type.
Definition: rt_pixel.c:148
void rt_raster_set_srid(rt_raster raster, int32_t srid)
Set raster&#39;s SRID.
Definition: rt_raster.c:363
uint32_t index_max
Definition: librtcore.h:2403
int32_t rt_raster_get_srid(rt_raster raster)
Get raster&#39;s SRID.
Definition: rt_raster.c:356
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition: rt_raster.c:82
rt_raster raster
Definition: librtcore.h:2443
rt_band rt_raster_replace_band(rt_raster raster, rt_band band, int index)
Replace band at provided index with new band.
Definition: rt_raster.c:1498
uint8_t can_write
Definition: librtcore.h:2477
rt_errorstate rt_raster_geopoint_to_cell(rt_raster raster, double xw, double yw, double *xr, double *yr, double *igt)
Convert an xw, yw map point to a xr, yr raster point.
Definition: rt_raster.c:806
rt_bandstats rt_band_get_summary_stats(rt_band band, int exclude_nodata_value, double sample, int inc_vals, uint64_t *cK, double *cM, double *cQ)
Compute summary statistics for a band.
uint8_t nodata
Definition: librtcore.h:2337
double rt_raster_get_y_scale(rt_raster raster)
Get scale Y in projection units.
Definition: rt_raster.c:159
rt_raster rt_raster_new(uint32_t width, uint32_t height)
Construct a raster with given dimensions.
Definition: rt_raster.c:48
uint16_t width
Definition: librtcore.h:2316
double rt_raster_get_x_skew(rt_raster raster)
Get skew about the X axis.
Definition: rt_raster.c:181
rt_band rt_band_new_inline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t *data)
Create an in-db rt_band with no data.
Definition: rt_band.c:63
struct rt_histogram_t * rt_histogram
Definition: librtcore.h:151
Datum distance(PG_FUNCTION_ARGS)
rt_errorstate rt_band_get_ext_band_num(rt_band band, uint8_t *bandnum)
Return bands&#39; external band number (only valid when rt_band_is_offline returns non-zero).
Definition: rt_band.c:376
uint16_t nband
Definition: librtcore.h:2444
uint8_t rt_util_clamp_to_4BUI(double value)
Definition: rt_util.c:44
void rt_band_set_hasnodata_flag(rt_band band, int flag)
Set hasnodata flag value.
Definition: rt_band.c:681
uint8_t rt_util_clamp_to_8BUI(double value)
Definition: rt_util.c:54
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition: rt_pixel.c:39
uint8_t rt_util_clamp_to_1BB(double value)
Definition: rt_util.c:34
struct rt_geomval_t * rt_geomval
Definition: librtcore.h:149
void rt_raster_calc_phys_params(double xscale, double xskew, double yskew, double yscale, double *i_mag, double *j_mag, double *theta_i, double *theta_ij)
Calculates the physically significant descriptors embodied in an arbitrary geotransform.
Definition: rt_raster.c:250
struct rt_mask_t * rt_mask
Definition: librtcore.h:148
struct rt_valuecount_t * rt_valuecount
Definition: librtcore.h:153
void default_rt_error_handler(const char *fmt, va_list ap)
Definition: rt_context.c:67
void(* rt_deallocator)(void *mem)
Definition: librtcore.h:231
rt_errorstate rt_pixel_set_to_array(rt_pixel npixel, uint32_t count, rt_mask mask, int x, int y, uint16_t distancex, uint16_t distancey, double ***value, int ***nodata, int *dimx, int *dimy)
Definition: rt_pixel.c:286
struct rt_bandstats_t * rt_bandstats
Definition: librtcore.h:150
uint16_t rt_raster_get_width(rt_raster raster)
Definition: rt_raster.c:121
rt_valuecount rt_band_get_value_count(rt_band band, int exclude_nodata_value, double *search_values, uint32_t search_values_count, double roundto, uint32_t *rtn_total, uint32_t *rtn_count)
Count the number of times provided value(s) occur in the band.
rt_raster rt_raster_from_hexwkb(const char *hexwkb, uint32_t hexwkbsize)
Construct an rt_raster from a text HEXWKB representation.
Definition: rt_wkb.c:406
int32_t offline
Definition: librtcore.h:2315
double *** values
Definition: librtcore.h:2459
void default_rt_deallocator(void *mem)
Definition: rt_context.c:61
rt_errorstate rt_band_set_isnodata_flag(rt_band band, int flag)
Set isnodata flag value.
Definition: rt_band.c:695
void rtdealloc(void *mem)
Definition: rt_context.c:186
Definition: librtcore.h:2481
int32_t isnodata
Definition: librtcore.h:2319
uint8_t * rt_raster_to_gdal(rt_raster raster, const char *srs, char *format, char **options, uint64_t *gdalsize)
Return formatted GDAL raster from raster.
Definition: rt_raster.c:1598
uint8_t nbnodata
Definition: librtcore.h:2445
double MinX
Definition: librtcore.h:165
rt_band rt_band_duplicate(rt_band band)
Create a new band duplicated from source band.
Definition: rt_band.c:287
Struct definitions.
Definition: librtcore.h:2250
rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc)
Returns a set of available GDAL drivers.
Definition: rt_raster.c:1716
double rt_band_get_min_value(rt_band band)
Returns the minimal possible value for the band according to the pixel type.
Definition: rt_band.c:1745
rt_errorstate rt_raster_touches(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *touches)
Return ES_ERROR if error occurred in function.
rt_errorstate rt_raster_get_inverse_geotransform_matrix(rt_raster raster, double *gt, double *igt)
Get 6-element array of raster inverse geotransform matrix.
Definition: rt_raster.c:676
char * rt_util_gdal_convert_sr(const char *srs, int proj4)
Definition: rt_util.c:212
const char * rt_pixtype_name(rt_pixtype pixtype)
Definition: rt_pixel.c:110
rt_errorstate rt_raster_iterator(rt_iterator itrset, uint16_t itrcount, rt_extenttype extenttype, rt_raster customextent, rt_pixtype pixtype, uint8_t hasnodata, double nodataval, uint16_t distancex, uint16_t distancey, rt_mask mask, void *userarg, int(*callback)(rt_iterator_arg arg, void *userarg, double *value, int *nodata), rt_raster *rtnraster)
n-raster iterator.
void * default_rt_allocator(size_t size)
The default memory/logging handlers installed by lwgeom_install_default_allocators() ...
Definition: rt_context.c:47
rt_band * bands
Definition: librtcore.h:2303
char * create_options
Definition: librtcore.h:2475
struct quantile_llist_index * index
Definition: librtcore.h:2402
rt_pixtype rt_band_get_pixtype(rt_band band)
Return pixeltype of this band.
Definition: rt_band.c:631
uint64_t rt_band_get_file_timestamp(rt_band band)
Return file timestamp.
Definition: rt_band.c:608
uint8_t bandNum
Definition: librtcore.h:2308
rt_errorstate rt_band_set_pixel_line(rt_band band, int x, int y, void *vals, uint32_t len)
Set values of multiple pixels.
Definition: rt_band.c:853
void * mem
Definition: librtcore.h:2327
rt_raster rt_raster_compute_skewed_raster(rt_envelope extent, double *skew, double *scale, double tolerance)
Definition: rt_raster.c:960
char * long_name
Definition: librtcore.h:2474
uint32_t has_value
Definition: librtcore.h:2388
int rt_raster_add_band(rt_raster raster, rt_band band, int index)
Add band data to a raster.
Definition: rt_raster.c:405
uint8_t algeq
Definition: librtcore.h:2393
int32_t hasnodata
Definition: librtcore.h:2318
rt_errorstate rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode)
Get auth name and code.
Definition: rt_util.c:270
uint32_t count
Definition: librtcore.h:2399
void rt_util_from_ogr_envelope(OGREnvelope env, rt_envelope *ext)
Definition: rt_util.c:408
double ipX
Definition: librtcore.h:2295
struct rt_iterator_arg_t * rt_iterator_arg
Definition: librtcore.h:158
uint8_t rt_util_clamp_to_2BUI(double value)
Definition: rt_util.c:39
int rt_band_get_isnodata_flag(rt_band band)
Get isnodata flag value.
Definition: rt_band.c:714
struct rt_colormap_t * rt_colormap
Definition: librtcore.h:161
rt_errorstate rt_raster_fully_within_distance(rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dfwithin)
Return ES_ERROR if error occurred in function.
float rt_util_clamp_to_32F(double value)
Definition: rt_util.c:79
rt_errorstate rt_band_set_pixel(rt_band band, int x, int y, double val, int *converted)
Set single pixel&#39;s value.
Definition: rt_band.c:974
int rt_util_gdal_configured(void)
Definition: rt_util.c:315
int value
Definition: genraster.py:61
const char * rt_util_gdal_version(const char *request)
Definition: rt_util.c:180
rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds)
Return a raster from a GDAL dataset.
Definition: rt_raster.c:2182
struct quantile_llist_element * head
Definition: librtcore.h:2397
rt_errorstate rt_raster_get_perimeter(rt_raster raster, int nband, LWGEOM **perimeter)
Get raster perimeter.
Definition: rt_geometry.c:182
rt_band rt_band_reclass(rt_band srcband, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, rt_reclassexpr *exprset, int exprcount)
Returns new band with values reclassified.
Definition: rt_mapalgebra.c:50
rt_errorstate rt_raster_coveredby(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *coveredby)
Return ES_ERROR if error occurred in function.
uint16_t rt_raster_get_height(rt_raster raster)
Definition: rt_raster.c:129
double scaleX
Definition: librtcore.h:2293
struct rt_iterator_t * rt_iterator
Definition: librtcore.h:157
GDALResampleAlg rt_util_gdal_resample_alg(const char *algname)
Convert cstring name to GDAL Resample Algorithm.
Definition: rt_util.c:91
char * path
Definition: librtcore.h:2309
int isnodata
Definition: librtcore.h:2482
uint32_t rt_band_get_nearest_pixel(rt_band band, int x, int y, uint16_t distancex, uint16_t distancey, int exclude_nodata_value, rt_pixel *npixels)
Get nearest pixel(s) with value (not NODATA) to specified pixel.
Definition: rt_band.c:1374
rt_raster rt_raster_colormap(rt_raster raster, int nband, rt_colormap colormap)
Returns a new raster with up to four 8BUI bands (RGBA) from applying a colormap to the user-specified...
unsigned char uint8_t
Definition: uthash.h:79
rt_errorstate rt_raster_within_distance(rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dwithin)
Return ES_ERROR if error occurred in function.
double UpperLeftY
Definition: librtcore.h:171
uint8_t can_read
Definition: librtcore.h:2476
uint16_t dimx
Definition: librtcore.h:2344
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
Definition: rt_serialize.c:725
rt_errorstate rt_raster_get_envelope(rt_raster raster, rt_envelope *env)
Get raster&#39;s envelope.
Definition: rt_raster.c:873
GDALDatasetH rt_util_gdal_open(const char *fn, GDALAccess fn_access, int shared)
Definition: rt_util.c:381
double rt_raster_get_y_offset(rt_raster raster)
Get raster y offset, in projection units.
Definition: rt_raster.c:222
rt_errorstate rt_util_hsv_to_rgb(double hsv[3], double rgb[3])
Definition: rt_util.c:559
double value
Definition: librtcore.h:2483
uint64_t sum2
Definition: librtcore.h:2406
void(*) voi rt_install_default_allocators)(void)
Apply the default memory management (malloc() and free()) and error handlers.
double scaleY
Definition: librtcore.h:2294
rt_errorstate rt_pixtype_compare_clamped_values(rt_pixtype pixtype, double val, double refval, int *isequal)
Test to see if two values are equal when clamped.
Definition: rt_pixel.c:200
This library is the generic geometry handling section of PostGIS.
uint32_t count
Definition: librtcore.h:2374
rt_band rt_band_new_offline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t bandNum, const char *path)
Create an out-db rt_band.
Definition: rt_band.c:124
int16_t rt_util_clamp_to_16BSI(double value)
Definition: rt_util.c:59
rt_errorstate rt_raster_contains_properly(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains)
Return ES_ERROR if error occurred in function.
enum rt_colormap_t::@9 method
rt_errorstate rt_raster_overlaps(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *overlaps)
Return ES_ERROR if error occurred in function.