PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches
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
145typedef struct rt_raster_t* rt_raster;
146typedef struct rt_band_t* rt_band;
147typedef struct rt_pixel_t* rt_pixel;
148typedef struct rt_mask_t* rt_mask;
149typedef struct rt_geomval_t* rt_geomval;
156
159
162
163/* envelope information */
164typedef struct {
165 double MinX;
166 double MaxX;
167 double MinY;
168 double MaxY;
169
173
178/* function return error states */
179typedef enum {
180 ES_NONE = 0, /* no error */
181 ES_ERROR = 1 /* generic error */
183
184/* Pixel types */
185typedef 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 */
197 PT_END=13
199
208
225
229typedef void* (*rt_allocator)(size_t size);
230typedef void* (*rt_reallocator)(void *mem, size_t size);
231typedef void (*rt_deallocator)(void *mem);
232typedef 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 *******************************************************************/
242extern void rt_install_default_allocators(void);
243
244
249extern void* rtalloc(size_t size);
250extern void* rtrealloc(void* mem, size_t size);
251extern void rtdealloc(void* mem);
252
253/******************************************************************/
254
255
259void rterror(const char *fmt, ...);
260void rtinfo(const char *fmt, ...);
261void rtwarn(const char *fmt, ...);
262
263
267void * default_rt_allocator(size_t size);
268void * default_rt_reallocator(void * mem, size_t size);
269void default_rt_deallocator(void * mem);
270void default_rt_error_handler(const char * fmt, va_list ap);
271void default_rt_warning_handler(const char * fmt, va_list ap);
272void 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
306void 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
321int rt_pixtype_size(rt_pixtype pixtype);
322
333
334/* Return human-readable name of pixel type */
335const char* rt_pixtype_name(rt_pixtype pixtype);
336
337/* Return pixel type index from human-readable name */
338rt_pixtype rt_pixtype_index_from_name(const char* pixname);
339
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
421 uint16_t width, uint16_t height,
422 rt_pixtype pixtype,
423 uint32_t hasnodata, double nodataval,
424 uint8_t* data
425);
426
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
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
493
504
513const char* rt_band_get_ext_path(rt_band band);
514
523uint64_t rt_band_get_file_size(rt_band band);
524
534
544rt_errorstate rt_band_get_ext_band_num(rt_band band, uint8_t *bandnum);
545
554
562uint16_t rt_band_get_width(rt_band band);
563
571uint16_t rt_band_get_height(rt_band band);
572
583
584/* set ownsdata flag */
585void rt_band_set_ownsdata_flag(rt_band band, int flag);
586
594void* rt_band_get_data(rt_band band);
595
606
612void rt_band_destroy(rt_band band);
613
622
628void rt_band_set_hasnodata_flag(rt_band band, int flag);
629
639
648
659rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted);
660
669rt_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
809double rt_band_get_min_value(rt_band band);
810
819
830int 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
865 rt_band band,
866 int exclude_nodata_value, double sample, int inc_vals,
867 uint64_t *cK, double *cM, double *cQ
868);
869
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
907 double *quantiles, int quantiles_count, uint32_t *rtn_count);
908
909struct quantile_llist;
911 struct quantile_llist **list,
912 uint32_t list_count
913);
914
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
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
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
1002rt_raster rt_raster_new(uint32_t width, uint32_t height);
1003
1014rt_raster rt_raster_from_wkb(const uint8_t* wkb, uint32_t wkbsize);
1015
1026rt_raster rt_raster_from_hexwkb(const char* hexwkb, uint32_t hexwkbsize);
1027
1037uint8_t *rt_raster_to_wkb(rt_raster raster, int outasin, uint32_t *wkbsize);
1038
1049char *rt_raster_to_hexwkb(rt_raster raster, int outasin, uint32_t *hexwkbsize);
1050
1061void rt_raster_destroy(rt_raster raster);
1062
1063/* Get number of bands */
1064uint16_t rt_raster_get_num_bands(rt_raster raster);
1065
1074rt_band rt_raster_get_band(rt_raster raster, int bandNum);
1075
1076/* Get number of rows */
1077uint16_t rt_raster_get_width(rt_raster raster);
1078
1079/* Get number of columns */
1080uint16_t rt_raster_get_height(rt_raster raster);
1081
1092int 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
1123void rt_raster_set_scale(rt_raster raster,
1124 double scaleX, double scaleY);
1125
1133double rt_raster_get_x_scale(rt_raster raster);
1134
1142double rt_raster_get_y_scale(rt_raster raster);
1143
1154 double x, double y);
1155
1164double rt_raster_get_x_offset(rt_raster raster);
1165
1174double rt_raster_get_y_offset(rt_raster raster);
1175
1183void rt_raster_set_skews(rt_raster raster,
1184 double skewX, double skewY);
1185
1192double rt_raster_get_x_skew(rt_raster raster);
1193
1200double rt_raster_get_y_skew(rt_raster raster);
1201
1215 double *i_mag, double *j_mag, double *theta_i, double *theta_ij) ;
1216
1233 double i_mag, double j_mag, double theta_i, double theta_ij) ;
1234
1235
1251void 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
1272int 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
1282void rt_raster_set_srid(rt_raster raster, int32_t srid);
1283
1290int32_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 */
1431 rt_envelope extent,
1432 double *skew,
1433 double *scale,
1434 double tolerance
1435);
1436
1451LWPOLY* rt_raster_pixel_as_polygon(rt_raster raster, int x, int y);
1452
1466rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface);
1467
1487 rt_raster raster, int nband,
1488 int exclude_nodata_value,
1489 int * pnElements
1490);
1491
1498void* rt_raster_serialize(rt_raster raster);
1499
1508rt_raster rt_raster_deserialize(void* serialized, int header_only);
1509
1517int rt_raster_is_empty(rt_raster raster);
1518
1527int rt_raster_has_band(rt_raster raster, int nband);
1528
1544 rt_raster torast, rt_raster fromrast,
1545 int fromindex, int toindex
1546);
1547
1559rt_raster rt_raster_from_band(rt_raster raster, uint32_t *bandNums,
1560 int count);
1561
1572 int index);
1573
1582rt_raster rt_raster_clone(rt_raster raster, uint8_t deep);
1583
1596uint8_t *rt_raster_to_gdal(rt_raster raster, const char *srs,
1597 char *format, char **options, uint64_t *gdalsize);
1598
1608rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc);
1609
1626GDALDatasetH 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
1642rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds);
1643
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
1710rt_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
2031 rt_raster raster, int nband,
2032 rt_colormap colormap
2033);
2034
2035/*- utilities -------------------------------------------------------*/
2036
2037/*
2038 * rt_core memory functions
2039 */
2040extern void *rtalloc(size_t size);
2041extern void *rtrealloc(void *mem, size_t size);
2042extern 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
2064uint8_t
2065rt_util_clamp_to_1BB(double value);
2066
2067uint8_t
2068rt_util_clamp_to_2BUI(double value);
2069
2070uint8_t
2071rt_util_clamp_to_4BUI(double value);
2072
2073int8_t
2074rt_util_clamp_to_8BSI(double value);
2075
2076uint8_t
2077rt_util_clamp_to_8BUI(double value);
2078
2079int16_t
2080rt_util_clamp_to_16BSI(double value);
2081
2082uint16_t
2083rt_util_clamp_to_16BUI(double value);
2084
2085int32_t
2086rt_util_clamp_to_32BSI(double value);
2087
2088uint32_t
2089rt_util_clamp_to_32BUI(double value);
2090
2091float
2092rt_util_clamp_to_32F(double value);
2093
2094int
2096 double initialvalue,
2097 int32_t checkvalint, uint32_t checkvaluint,
2098 float checkvalfloat, double checkvaldouble,
2099 rt_pixtype pixtype
2100);
2101
2109GDALResampleAlg
2110rt_util_gdal_resample_alg(const char *algname);
2111
2119GDALDataType
2121
2130rt_util_gdal_datatype_to_pixtype(GDALDataType gdt);
2131
2132/*
2133 get GDAL runtime version information
2134*/
2135const char*
2136rt_util_gdal_version(const char *request);
2137
2138/*
2139 computed extent type from c string
2140*/
2142rt_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*/
2147char*
2148rt_util_gdal_convert_sr(const char *srs, int proj4);
2149
2150/*
2151 is the spatial reference string supported by GDAL
2152*/
2153int
2154rt_util_gdal_supported_sr(const char *srs);
2155
2167rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode);
2168
2169/*
2170 is GDAL configured correctly?
2171*/
2172int
2174
2175/*
2176 register all GDAL drivers
2177*/
2178int
2179rt_util_gdal_register_all(int force_register_all);
2180
2181/*
2182 is the driver registered?
2183*/
2184int
2185rt_util_gdal_driver_registered(const char *drv);
2186
2187/*
2188 wrapper for GDALOpen and GDALOpenShared
2189*/
2190GDALDatasetH
2191rt_util_gdal_open(const char *fn, GDALAccess fn_access, int shared);
2192
2193void
2195 OGREnvelope env,
2196 rt_envelope *ext
2197);
2198
2199void
2201 rt_envelope ext,
2202 OGREnvelope *env
2203);
2204
2205LWPOLY *
2207 rt_envelope ext
2208);
2209
2210int
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 NaN equals NaN for NODATA support.
2233*/
2234#define FLT_NEQ(x, y) ((x != y) && !(isnan(x) && isnan(y)) && (fabs(x - y) > FLT_EPSILON))
2235#define FLT_EQ(x, y) ((x == y) || (isnan(x) && isnan(y)) || (fabs(x - y) <= FLT_EPSILON))
2236#define DBL_NEQ(x, y) ((x != y) && !(isnan(x) && isnan(y)) && (fabs(x - y) > DBL_EPSILON))
2237#define DBL_EQ(x, y) ((x == y) || (isnan(x) && isnan(y)) || (fabs(x - y) <= DBL_EPSILON))
2238
2239/*
2240 helper macro for symmetrical rounding
2241*/
2242#define ROUND(x, y) (((x > 0.0) ? floor((x * pow(10, y) + 0.5)) : ceil((x * pow(10, y) - 0.5))) / pow(10, y))
2243
2252 /*---[ 8 byte boundary ]---{ */
2253 uint32_t size; /* required by postgresql: 4 bytes */
2254 uint16_t version; /* format version (this is version 0): 2 bytes */
2255 uint16_t numBands; /* Number of bands: 2 bytes */
2256
2257 /* }---[ 8 byte boundary ]---{ */
2258 double scaleX; /* pixel width: 8 bytes */
2259
2260 /* }---[ 8 byte boundary ]---{ */
2261 double scaleY; /* pixel height: 8 bytes */
2262
2263 /* }---[ 8 byte boundary ]---{ */
2264 double ipX; /* insertion point X: 8 bytes */
2265
2266 /* }---[ 8 byte boundary ]---{ */
2267 double ipY; /* insertion point Y: 8 bytes */
2268
2269 /* }---[ 8 byte boundary ]---{ */
2270 double skewX; /* skew about the X axis: 8 bytes */
2271
2272 /* }---[ 8 byte boundary ]---{ */
2273 double skewY; /* skew about the Y axis: 8 bytes */
2274
2275 /* }---[ 8 byte boundary ]--- */
2276 int32_t srid; /* Spatial reference id: 4 bytes */
2277 uint16_t width; /* pixel columns: 2 bytes */
2278 uint16_t height; /* pixel rows: 2 bytes */
2279};
2280
2281/* NOTE: the initial part of this structure matches the layout
2282 * of data in the serialized form version 0, starting
2283 * from the numBands element
2284 */
2286 uint32_t size;
2287 uint16_t version;
2288
2289 /* Number of bands, all share the same dimension
2290 * and georeference */
2291 uint16_t numBands;
2292
2293 /* Georeference (in projection units) */
2294 double scaleX; /* pixel width */
2295 double scaleY; /* pixel height */
2296 double ipX; /* geo x ordinate of the corner of upper-left pixel */
2297 double ipY; /* geo y ordinate of the corner of bottom-right pixel */
2298 double skewX; /* skew about the X axis*/
2299 double skewY; /* skew about the Y axis */
2300
2301 int32_t srid; /* spatial reference id */
2302 uint16_t width; /* pixel columns - max 65535 */
2303 uint16_t height; /* pixel rows - max 65535 */
2304 rt_band *bands; /* actual bands */
2305
2306};
2307
2309 uint8_t bandNum; /* 0-based */
2310 char* path; /* internally owned */
2311 void *mem; /* loaded external band data, internally owned */
2312};
2313
2316 int32_t offline;
2317 uint16_t width;
2318 uint16_t height;
2319 int32_t hasnodata; /* a flag indicating if this band contains nodata values */
2320 int32_t isnodata; /* a flag indicating if this band is filled only with
2321 nodata values. flag CANNOT be TRUE if hasnodata is FALSE */
2322 double nodataval; /* int will be converted ... */
2323 int8_t ownsdata; /* 0, externally owned. 1, internally owned. only applies to data.mem */
2324
2325 rt_raster raster; /* reference to parent raster */
2326
2327 union {
2328 void* mem; /* actual data, externally owned */
2331
2332};
2333
2335 int x; /* column */
2336 int y; /* line */
2337
2338 uint8_t nodata;
2339 double value;
2340
2342};
2343
2345 uint16_t dimx;
2346 uint16_t dimy;
2347 double **values;
2348 int **nodata;
2349 int weighted; /* 0 if not weighted values 1 if weighted values */
2350};
2351
2352/* polygon as LWPOLY with associated value */
2355 double val;
2356};
2357
2358/* summary stats of specified band */
2360 double sample;
2361 uint32_t count;
2362
2363 double min;
2364 double max;
2365 double sum;
2366 double mean;
2367 double stddev;
2368
2369 double *values;
2370 int sorted; /* flag indicating that values is sorted ascending by value */
2371};
2372
2373/* histogram bin(s) of specified band */
2375 uint32_t count;
2376 double percent;
2377
2378 double min;
2379 double max;
2380
2383};
2384
2385/* quantile(s) of the specified band */
2387 double quantile;
2388 double value;
2389 uint32_t has_value;
2390};
2391
2392/* listed-list structures for rt_band_get_quantiles_stream */
2394 uint8_t algeq; /* AL-GEQ (1) or AL-GT (0) */
2395 double quantile;
2396 uint64_t tau; /* position in sequence */
2397
2398 struct quantile_llist_element *head; /* H index 0 */
2399 struct quantile_llist_element *tail; /* H index last */
2400 uint32_t count; /* # of elements in H */
2401
2402 /* faster access to elements at specific intervals */
2404 uint32_t index_max; /* max # of elements in index */
2405
2406 uint64_t sum1; /* N1H */
2407 uint64_t sum2; /* N2H */
2408};
2409
2417
2422
2423/* number of times a value occurs */
2425 double value;
2426 uint32_t count;
2427 double percent;
2428};
2429
2430/* reclassification expression */
2433 double min;
2434 double max;
2435 int inc_min; /* include min */
2436 int inc_max; /* include max */
2437 int exc_min; /* exceed min */
2438 int exc_max; /* exceed max */
2440};
2441
2442/* raster iterator */
2445 uint16_t nband; /* 0-based */
2446 uint8_t nbnodata; /* no band = treat as NODATA */
2447};
2448
2449/* callback argument from raster iterator */
2451 /* # of rasters, Z-axis */
2452 uint16_t rasters;
2453 /* # of rows, Y-axis */
2454 uint32_t rows;
2455 /* # of columns, X-axis */
2456 uint32_t columns;
2457
2458 /* axis order: Z,X,Y */
2459 /* individual pixel values */
2460 double ***values;
2461 /* 0,1 value of nodata flag */
2462 int ***nodata;
2463
2464 /* X,Y of pixel from each input raster */
2466
2467 /* X,Y of pixel from output raster */
2469};
2470
2471/* gdal driver information */
2480
2481/* raster colormap entry */
2484 double value;
2485 uint8_t color[4]; /* RGBA */
2486};
2487
2499
2500#endif /* LIBRTCORE_H_INCLUDED */
This library is the generic geometry handling section of PostGIS.
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.
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
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition rt_band.c:667
void(* rt_message_handler)(const char *string, va_list ap) __attribute__((format(printf
Definition librtcore.h:232
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.
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
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
Definition rt_context.c:199
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition rt_context.c:171
rt_pixtype rt_util_gdal_datatype_to_pixtype(GDALDataType gdt)
Convert GDALDataType to rt_pixtype.
Definition rt_util.c:155
rt_band rt_band_duplicate(rt_band band)
Create a new band duplicated from source band.
Definition rt_band.c:287
uint16_t rt_band_get_width(rt_band band)
Return width of this band.
Definition rt_band.c:640
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.
void rt_band_set_hasnodata_flag(rt_band band, int flag)
Set hasnodata flag value.
Definition rt_band.c:681
rt_errorstate rt_band_set_isnodata_flag(rt_band band, int flag)
Set isnodata flag value.
Definition rt_band.c:695
void default_rt_error_handler(const char *fmt, va_list ap)
Definition rt_context.c:67
LWPOLY * rt_util_envelope_to_lwpoly(rt_envelope ext)
Definition rt_util.c:439
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
int32_t rt_raster_get_srid(rt_raster raster)
Get raster's SRID.
Definition rt_raster.c:356
void * default_rt_allocator(size_t size)
The default memory/logging handlers installed by lwgeom_install_default_allocators()
Definition rt_context.c:47
rt_errorstate rt_util_rgb_to_hsv(double rgb[3], double hsv[3])
Definition rt_util.c:507
int rt_util_gdal_register_all(int force_register_all)
Definition rt_util.c:338
double rt_raster_get_x_skew(rt_raster raster)
Get skew about the X axis.
Definition rt_raster.c:181
double rt_raster_get_x_offset(rt_raster raster)
Get raster x offset, in projection units.
Definition rt_raster.c:213
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
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
int rt_util_gdal_configured(void)
Definition rt_util.c:317
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
LWPOLY * rt_raster_pixel_as_polygon(rt_raster raster, int x, int y)
Get a raster pixel as a polygon.
void rt_raster_set_geotransform_matrix(rt_raster raster, double *gt)
Set raster's geotransform using 6-element array.
Definition rt_raster.c:727
int8_t rt_util_clamp_to_8BSI(double value)
Definition rt_util.c:49
struct rt_quantile_t * rt_quantile
Definition librtcore.h:152
uint8_t rt_util_clamp_to_1BB(double value)
Definition rt_util.c:34
void rtinfo(const char *fmt,...)
Definition rt_context.c:211
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...
rt_errorstate rt_band_load_offline_data(rt_band band)
Load offline band's data.
Definition rt_band.c:429
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.
rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc)
Returns a set of available GDAL drivers.
Definition rt_raster.c:1711
int32_t rt_util_clamp_to_32BSI(double value)
Definition rt_util.c:69
struct rt_reclassexpr_t * rt_reclassexpr
Definition librtcore.h:155
void rt_raster_set_scale(rt_raster raster, double scaleX, double scaleY)
Set scale in projection units.
Definition rt_raster.c:137
int rt_raster_add_band(rt_raster raster, rt_band band, int index)
Add band data to a raster.
Definition rt_raster.c:405
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
void(* rt_deallocator)(void *mem)
Definition librtcore.h:231
int rt_band_get_hasnodata_flag(rt_band band)
Get hasnodata flag value.
Definition rt_band.c:674
rt_pixtype rt_pixtype_index_from_name(const char *pixname)
Definition rt_pixel.c:80
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:1593
void * rt_band_get_data(rt_band band)
Get pointer to raster band data.
Definition rt_band.c:400
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:804
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
struct rt_mask_t * rt_mask
Definition librtcore.h:148
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition rt_raster.c:82
rt_pixtype
Definition librtcore.h:185
@ PT_32BUI
Definition librtcore.h:194
@ PT_2BUI
Definition librtcore.h:187
@ PT_32BSI
Definition librtcore.h:193
@ PT_END
Definition librtcore.h:197
@ PT_4BUI
Definition librtcore.h:188
@ PT_32BF
Definition librtcore.h:195
@ PT_1BB
Definition librtcore.h:186
@ PT_16BUI
Definition librtcore.h:192
@ PT_8BSI
Definition librtcore.h:189
@ PT_16BSI
Definition librtcore.h:191
@ PT_64BF
Definition librtcore.h:196
@ PT_8BUI
Definition librtcore.h:190
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
int rt_band_get_isnodata_flag(rt_band band)
Get isnodata flag value.
Definition rt_band.c:714
rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface)
Get a raster as a surface (multipolygon).
rt_raster rt_raster_new(uint32_t width, uint32_t height)
Construct a raster with given dimensions.
Definition rt_raster.c:48
char * rt_util_gdal_convert_sr(const char *srs, int proj4)
Definition rt_util.c:214
rt_extenttype rt_util_extent_type(const char *name)
Definition rt_util.c:193
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:629
GDALDataType rt_util_pixtype_to_gdal_datatype(rt_pixtype pt)
Convert rt_pixtype to GDALDataType.
Definition rt_util.c:120
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_raster_coveredby(rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *coveredby)
Return ES_ERROR if error occurred in function.
double rt_pixtype_get_min_value(rt_pixtype pixtype)
Return minimum value possible for pixel type.
Definition rt_pixel.c:148
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:1342
rt_raster rt_raster_compute_skewed_raster(rt_envelope extent, double *skew, double *scale, double tolerance)
Definition rt_raster.c:958
struct rt_pixel_t * rt_pixel
Definition librtcore.h:147
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_raster rt_raster_from_gdal_dataset(GDALDatasetH ds)
Return a raster from a GDAL dataset.
Definition rt_raster.c:2177
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.
struct rt_colormap_entry_t * rt_colormap_entry
Definition librtcore.h:160
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...
double rt_raster_get_x_scale(rt_raster raster)
Get scale X in projection units.
Definition rt_raster.c:150
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:1493
uint8_t rt_util_clamp_to_2BUI(double value)
Definition rt_util.c:39
void default_rt_deallocator(void *mem)
Definition rt_context.c:61
const char * rt_pixtype_name(rt_pixtype pixtype)
Definition rt_pixel.c:110
int rt_pixtype_alignment(rt_pixtype pixtype)
Return alignment requirements for data in the given pixel type.
Definition rt_pixel.c:75
void rtwarn(const char *fmt,...)
Definition rt_context.c:224
void * default_rt_reallocator(void *mem, size_t size)
Definition rt_context.c:54
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
const char * rt_util_gdal_version(const char *request)
Definition rt_util.c:182
uint8_t rt_util_clamp_to_8BUI(double value)
Definition rt_util.c:54
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
uint64_t rt_band_get_file_size(rt_band band)
Return file size in bytes.
Definition rt_band.c:586
struct rt_bandstats_t * rt_bandstats
Definition librtcore.h:150
GDALDatasetH rt_util_gdal_open(const char *fn, GDALAccess fn_access, int shared)
Definition rt_util.c:383
int quantile_llist_destroy(struct quantile_llist **list, uint32_t list_count)
int rt_band_check_is_nodata(rt_band band)
Returns TRUE if the band is only nodata values.
Definition rt_band.c:1752
rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted)
Set nodata value.
Definition rt_band.c:733
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_band_set_pixel(rt_band band, int x, int y, double val, int *converted)
Set single pixel's value.
Definition rt_band.c:974
rt_errorstate
Enum definitions.
Definition librtcore.h:179
@ ES_NONE
Definition librtcore.h:180
@ ES_ERROR
Definition librtcore.h:181
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
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
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:2504
void rt_band_destroy(rt_band band)
Destroy a raster band.
Definition rt_band.c:340
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.
int rt_util_gdal_supported_sr(const char *srs)
Definition rt_util.c:245
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
int16_t rt_util_clamp_to_16BSI(double value)
Definition rt_util.c:59
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
void * rtrealloc(void *mem, size_t size)
Definition rt_context.c:179
GDALResampleAlg rt_util_gdal_resample_alg(const char *algname)
Convert cstring name to GDAL Resample Algorithm.
Definition rt_util.c:93
uint16_t rt_raster_get_num_bands(rt_raster raster)
Definition rt_raster.c:372
struct rt_valuecount_t * rt_valuecount
Definition librtcore.h:153
struct rt_gdaldriver_t * rt_gdaldriver
Definition librtcore.h:154
rt_raster rt_raster_clone(rt_raster raster, uint8_t deep)
Clone an existing raster.
Definition rt_raster.c:1535
rt_errorstate rt_raster_get_convex_hull(rt_raster raster, LWGEOM **hull)
Get raster's convex hull.
uint16_t rt_raster_get_height(rt_raster raster)
Definition rt_raster.c:129
void *(* rt_reallocator)(void *mem, size_t size)
Definition librtcore.h:230
int rt_util_gdal_driver_registered(const char *drv)
Definition rt_util.c:357
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
rt_errorstate rt_band_get_ext_band_num(rt_band band, uint8_t *bandnum)
Return bands' external band number (only valid when rt_band_is_offline returns non-zero).
Definition rt_band.c:376
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.
uint64_t rt_band_get_file_timestamp(rt_band band)
Return file timestamp.
Definition rt_band.c:608
struct rt_iterator_arg_t * rt_iterator_arg
Definition librtcore.h:158
void rt_raster_set_srid(rt_raster raster, int32_t srid)
Set raster's SRID.
Definition rt_raster.c:363
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
rt_extenttype
Definition librtcore.h:200
@ ET_CUSTOM
Definition librtcore.h:206
@ ET_LAST
Definition librtcore.h:205
@ ET_INTERSECTION
Definition librtcore.h:201
@ ET_UNION
Definition librtcore.h:202
@ ET_SECOND
Definition librtcore.h:204
@ ET_FIRST
Definition librtcore.h:203
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
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:1430
struct rt_geomval_t * rt_geomval
Definition librtcore.h:149
rt_errorstate rt_band_get_nodata(rt_band band, double *nodata)
Get NODATA value.
Definition rt_band.c:1730
uint8_t rt_util_clamp_to_4BUI(double value)
Definition rt_util.c:44
rt_errorstate rt_util_hsv_to_rgb(double hsv[3], double rgb[3])
Definition rt_util.c:561
void rt_util_to_ogr_envelope(rt_envelope ext, OGREnvelope *env)
Definition rt_util.c:426
rt_pixtype rt_band_get_pixtype(rt_band band)
Return pixeltype of this band.
Definition rt_band.c:631
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
void *(* rt_allocator)(size_t size)
Global functions for memory/logging handlers.
Definition librtcore.h:229
const char * rt_band_get_ext_path(rt_band band)
Return band's external path (only valid when rt_band_is_offline returns non-zero).
Definition rt_band.c:363
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
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.
uint16_t rt_raster_get_width(rt_raster raster)
Definition rt_raster.c:121
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
void rtdealloc(void *mem)
Definition rt_context.c:186
rt_errorstate rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode)
Get auth name and code.
Definition rt_util.c:272
uint16_t rt_util_clamp_to_16BUI(double value)
Definition rt_util.c:64
rt_errorstate rt_raster_get_envelope_geom(rt_raster raster, LWGEOM **env)
Get raster's envelope as a geometry.
struct rt_colormap_t * rt_colormap
Definition librtcore.h:161
struct rt_iterator_t * rt_iterator
Definition librtcore.h:157
int rt_band_clamped_value_is_nodata(rt_band band, double val)
Compare clamped value to band's clamped NODATA value.
Definition rt_band.c:1798
void * rt_raster_serialize(rt_raster raster)
Return this raster in serialized form.
uint32_t rt_util_clamp_to_32BUI(double value)
Definition rt_util.c:74
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
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
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:1821
void default_rt_warning_handler(const char *fmt, va_list ap)
Definition rt_context.c:80
rt_errorstate rt_raster_get_perimeter(rt_raster raster, int nband, LWGEOM **perimeter)
Get raster perimeter.
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
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.
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_errorstate rt_raster_from_two_rasters(rt_raster rast1, rt_raster rast2, rt_extenttype extenttype, rt_raster *rtnraster, double *offset)
Definition rt_raster.c:3350
void(*) voi rt_install_default_allocators)(void)
Apply the default memory management (malloc() and free()) and error handlers.
rt_geos_spatial_test
GEOS spatial relationship tests available.
Definition librtcore.h:217
@ GSR_TOUCHES
Definition librtcore.h:219
@ GSR_COVERS
Definition librtcore.h:222
@ GSR_COVEREDBY
Definition librtcore.h:223
@ GSR_CONTAINSPROPERLY
Definition librtcore.h:221
@ GSR_OVERLAPS
Definition librtcore.h:218
@ GSR_CONTAINS
Definition librtcore.h:220
struct rt_raster_t * rt_raster
Types definitions.
Definition librtcore.h:145
int rt_util_same_geotransform_matrix(double *gt1, double *gt2)
Definition rt_util.c:491
#define __attribute__
Definition librtcore.h:139
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:1365
double rt_raster_get_y_scale(rt_raster raster)
Get scale Y in projection units.
Definition rt_raster.c:159
float rt_util_clamp_to_32F(double value)
Definition rt_util.c:79
void default_rt_info_handler(const char *fmt, va_list ap)
Definition rt_context.c:93
rt_errorstate rt_raster_get_envelope(rt_raster raster, rt_envelope *env)
Get raster's envelope.
Definition rt_raster.c:871
rt_errorstate rt_raster_same_alignment(rt_raster rast1, rt_raster rast2, int *aligned, char **reason)
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.
double rt_raster_get_y_skew(rt_raster raster)
Get skew about the Y axis.
Definition rt_raster.c:190
void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt)
Get 6-element array of raster geotransform matrix.
Definition rt_raster.c:706
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...
void rt_raster_set_offsets(rt_raster raster, double x, double y)
Set insertion points in projection units.
Definition rt_raster.c:199
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.
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
void rt_util_from_ogr_envelope(OGREnvelope env, rt_envelope *ext)
Definition rt_util.c:410
struct rt_histogram_t * rt_histogram
Definition librtcore.h:151
uint16_t rt_band_get_height(rt_band band)
Return height of this band.
Definition rt_band.c:649
struct rt_band_t * rt_band
Definition librtcore.h:146
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition rt_pixel.c:39
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
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
double rt_raster_get_y_offset(rt_raster raster)
Get raster y offset, in projection units.
Definition rt_raster.c:222
int rt_raster_is_empty(rt_raster raster)
Return TRUE if the raster is empty.
Definition rt_raster.c:1329
rt_band rt_raster_get_band(rt_raster raster, int bandNum)
Return Nth band, or NULL if unavailable.
Definition rt_raster.c:381
static double distance(double x1, double y1, double x2, double y2)
Definition lwtree.c:1032
Datum contains(PG_FUNCTION_ARGS)
Datum coveredby(PG_FUNCTION_ARGS)
Datum covers(PG_FUNCTION_ARGS)
Datum touches(PG_FUNCTION_ARGS)
Datum overlaps(PG_FUNCTION_ARGS)
struct quantile_llist_element * prev
Definition librtcore.h:2414
struct quantile_llist_element * next
Definition librtcore.h:2415
struct quantile_llist_element * element
Definition librtcore.h:2419
uint32_t count
Definition librtcore.h:2400
uint64_t sum1
Definition librtcore.h:2406
uint64_t sum2
Definition librtcore.h:2407
uint32_t index_max
Definition librtcore.h:2404
struct quantile_llist_element * head
Definition librtcore.h:2398
struct quantile_llist_element * tail
Definition librtcore.h:2399
struct quantile_llist_index * index
Definition librtcore.h:2403
rt_pixtype pixtype
Definition librtcore.h:2315
union rt_band_t::@8 data
int32_t hasnodata
Definition librtcore.h:2319
int32_t offline
Definition librtcore.h:2316
uint16_t height
Definition librtcore.h:2318
rt_raster raster
Definition librtcore.h:2325
double nodataval
Definition librtcore.h:2322
uint16_t width
Definition librtcore.h:2317
void * mem
Definition librtcore.h:2328
int32_t isnodata
Definition librtcore.h:2320
int8_t ownsdata
Definition librtcore.h:2323
uint32_t count
Definition librtcore.h:2361
double * values
Definition librtcore.h:2369
uint8_t color[4]
Definition librtcore.h:2485
double value
Definition librtcore.h:2484
int isnodata
Definition librtcore.h:2483
Definition librtcore.h:2482
rt_colormap_entry entry
Definition librtcore.h:2497
enum rt_colormap_t::@9 method
uint16_t nentry
Definition librtcore.h:2496
double MinX
Definition librtcore.h:165
double UpperLeftY
Definition librtcore.h:171
double UpperLeftX
Definition librtcore.h:170
double MaxX
Definition librtcore.h:166
double MinY
Definition librtcore.h:167
double MaxY
Definition librtcore.h:168
uint8_t bandNum
Definition librtcore.h:2309
uint8_t can_write
Definition librtcore.h:2478
char * create_options
Definition librtcore.h:2476
LWPOLY * geom
Definition librtcore.h:2354
uint32_t count
Definition librtcore.h:2375
double *** values
Definition librtcore.h:2460
rt_raster raster
Definition librtcore.h:2444
uint16_t nband
Definition librtcore.h:2445
uint8_t nbnodata
Definition librtcore.h:2446
double ** values
Definition librtcore.h:2347
uint16_t dimy
Definition librtcore.h:2346
uint16_t dimx
Definition librtcore.h:2345
int ** nodata
Definition librtcore.h:2348
LWGEOM * geom
Definition librtcore.h:2341
double value
Definition librtcore.h:2339
uint8_t nodata
Definition librtcore.h:2338
double quantile
Definition librtcore.h:2387
uint32_t has_value
Definition librtcore.h:2389
Struct definitions.
Definition librtcore.h:2251
double scaleX
Definition librtcore.h:2294
rt_band * bands
Definition librtcore.h:2304
uint16_t width
Definition librtcore.h:2302
uint16_t version
Definition librtcore.h:2287
double skewY
Definition librtcore.h:2299
uint16_t numBands
Definition librtcore.h:2291
int32_t srid
Definition librtcore.h:2301
uint16_t height
Definition librtcore.h:2303
uint32_t size
Definition librtcore.h:2286
double scaleY
Definition librtcore.h:2295
double skewX
Definition librtcore.h:2298
struct rt_reclassexpr_t::rt_reclassrange src
struct rt_reclassexpr_t::rt_reclassrange dst