PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ RASTER_setPixelValuesGeomval()

Datum RASTER_setPixelValuesGeomval ( PG_FUNCTION_ARGS  )

Definition at line 1377 of file rtpg_pixel.c.

1378 {
1379  rt_pgraster *pgraster = NULL;
1380  rt_pgraster *pgrtn = NULL;
1381  rt_raster raster = NULL;
1382  rt_band band = NULL;
1383  rt_raster _raster = NULL;
1384  rt_band _band = NULL;
1385  int nband = 0; /* 1-based */
1386 
1387  int numbands = 0;
1388  int width = 0;
1389  int height = 0;
1390  int32_t srid = 0;
1391  double gt[6] = {0};
1392 
1393  rt_pixtype pixtype = PT_END;
1394  int hasnodata = 0;
1395  double nodataval = 0;
1396 
1397  rtpg_setvaluesgv_arg arg = NULL;
1398  int allpoint = 0;
1399 
1400  ArrayType *array;
1401  Oid etype;
1402  Datum *e;
1403  bool *nulls;
1404  int16 typlen;
1405  bool typbyval;
1406  char typalign;
1407  int n = 0;
1408 
1409  HeapTupleHeader tup;
1410  bool isnull;
1411  Datum tupv;
1412 
1413  GSERIALIZED *gser = NULL;
1414  uint8_t gtype;
1415  lwvarlena_t *wkb = NULL;
1416 
1417  int i = 0;
1418  uint32_t j = 0;
1419  int noerr = 1;
1420 
1421  /* pgraster is null, return null */
1422  if (PG_ARGISNULL(0))
1423  PG_RETURN_NULL();
1424  pgraster = (rt_pgraster *) PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0));
1425 
1426  /* raster */
1427  raster = rt_raster_deserialize(pgraster, FALSE);
1428  if (!raster) {
1429  PG_FREE_IF_COPY(pgraster, 0);
1430  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not deserialize raster");
1431  PG_RETURN_NULL();
1432  }
1433 
1434  /* raster attributes */
1435  numbands = rt_raster_get_num_bands(raster);
1436  width = rt_raster_get_width(raster);
1437  height = rt_raster_get_height(raster);
1440 
1441  /* nband */
1442  if (PG_ARGISNULL(1)) {
1443  elog(NOTICE, "Band index cannot be NULL. Value must be 1-based. Returning original raster");
1445  PG_RETURN_POINTER(pgraster);
1446  }
1447 
1448  nband = PG_GETARG_INT32(1);
1449  if (nband < 1 || nband > numbands) {
1450  elog(NOTICE, "Band index is invalid. Value must be 1-based. Returning original raster");
1452  PG_RETURN_POINTER(pgraster);
1453  }
1454 
1455  /* get band attributes */
1457  pixtype = rt_band_get_pixtype(band);
1458  hasnodata = rt_band_get_hasnodata_flag(band);
1459  if (hasnodata)
1460  rt_band_get_nodata(band, &nodataval);
1461 
1462  /* array of geomval (2) */
1463  if (PG_ARGISNULL(2)) {
1464  elog(NOTICE, "No values to set. Returning original raster");
1466  PG_RETURN_POINTER(pgraster);
1467  }
1468 
1469  array = PG_GETARG_ARRAYTYPE_P(2);
1470  etype = ARR_ELEMTYPE(array);
1471  get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign);
1472 
1473  deconstruct_array(
1474  array,
1475  etype,
1476  typlen, typbyval, typalign,
1477  &e, &nulls, &n
1478  );
1479 
1480  if (!n) {
1481  elog(NOTICE, "No values to set. Returning original raster");
1483  PG_RETURN_POINTER(pgraster);
1484  }
1485 
1486  /* init arg */
1487  arg = rtpg_setvaluesgv_arg_init();
1488  if (arg == NULL) {
1490  PG_FREE_IF_COPY(pgraster, 0);
1491  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not intialize argument structure");
1492  PG_RETURN_NULL();
1493  }
1494 
1495  arg->gv = palloc(sizeof(struct rtpg_setvaluesgv_geomval_t) * n);
1496  if (arg->gv == NULL) {
1499  PG_FREE_IF_COPY(pgraster, 0);
1500  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not allocate memory for geomval array");
1501  PG_RETURN_NULL();
1502  }
1503 
1504  /* process each element */
1505  arg->ngv = 0;
1506  for (i = 0; i < n; i++) {
1507  if (nulls[i])
1508  continue;
1509 
1510  arg->gv[arg->ngv].pixval.nodata = 0;
1511  arg->gv[arg->ngv].pixval.value = 0;
1512  arg->gv[arg->ngv].geom = NULL;
1513  arg->gv[arg->ngv].mask = NULL;
1514 
1515  /* each element is a tuple */
1516  tup = (HeapTupleHeader) DatumGetPointer(e[i]);
1517  if (NULL == tup) {
1520  PG_FREE_IF_COPY(pgraster, 0);
1521  elog(ERROR, "RASTER_setPixelValuesGeomval: Invalid argument for geomval at index %d", i);
1522  PG_RETURN_NULL();
1523  }
1524 
1525  /* first element, geometry */
1526  POSTGIS_RT_DEBUG(4, "Processing first element (geometry)");
1527  tupv = GetAttributeByName(tup, "geom", &isnull);
1528  if (isnull) {
1529  elog(NOTICE, "First argument (geom) of geomval at index %d is NULL. Skipping", i);
1530  continue;
1531  }
1532 
1533  gser = (GSERIALIZED *) PG_DETOAST_DATUM(tupv);
1534  arg->gv[arg->ngv].geom = lwgeom_from_gserialized(gser);
1535  if (arg->gv[arg->ngv].geom == NULL) {
1538  PG_FREE_IF_COPY(pgraster, 0);
1539  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not deserialize geometry of geomval at index %d", i);
1540  PG_RETURN_NULL();
1541  }
1542 
1543  /* empty geometry */
1544  if (lwgeom_is_empty(arg->gv[arg->ngv].geom)) {
1545  elog(NOTICE, "First argument (geom) of geomval at index %d is an empty geometry. Skipping", i);
1546  continue;
1547  }
1548 
1549  /* check SRID */
1550  if (clamp_srid(gserialized_get_srid(gser)) != srid) {
1551  elog(NOTICE, "Geometry provided for geomval at index %d does not have the same SRID as the raster: %d. Returning original raster", i, srid);
1554  PG_RETURN_POINTER(pgraster);
1555  }
1556 
1557  /* Get a 2D version of the geometry if necessary */
1558  if (lwgeom_ndims(arg->gv[arg->ngv].geom) > 2) {
1559  LWGEOM *geom2d = lwgeom_force_2d(arg->gv[arg->ngv].geom);
1560  lwgeom_free(arg->gv[arg->ngv].geom);
1561  arg->gv[arg->ngv].geom = geom2d;
1562  }
1563 
1564  /* filter for types */
1565  gtype = gserialized_get_type(gser);
1566 
1567  /* shortcuts for POINT and MULTIPOINT */
1568  if (gtype == POINTTYPE || gtype == MULTIPOINTTYPE)
1569  allpoint++;
1570 
1571  /* get wkb of geometry */
1572  POSTGIS_RT_DEBUG(3, "getting wkb of geometry");
1573  wkb = lwgeom_to_wkb_varlena(arg->gv[arg->ngv].geom, WKB_SFSQL);
1574 
1575  /* rasterize geometry */
1576  arg->gv[arg->ngv].mask = rt_raster_gdal_rasterize((unsigned char *)wkb->data,
1577  LWSIZE_GET(wkb->size) - LWVARHDRSZ,
1578  NULL,
1579  0,
1580  NULL,
1581  NULL,
1582  NULL,
1583  NULL,
1584  NULL,
1585  NULL,
1586  NULL,
1587  &(gt[1]),
1588  &(gt[5]),
1589  NULL,
1590  NULL,
1591  &(gt[0]),
1592  &(gt[3]),
1593  &(gt[2]),
1594  &(gt[4]),
1595  NULL);
1596 
1597  pfree(wkb);
1598  if (gtype != POINTTYPE && gtype != MULTIPOINTTYPE) {
1599  lwgeom_free(arg->gv[arg->ngv].geom);
1600  arg->gv[arg->ngv].geom = NULL;
1601  }
1602 
1603  if (arg->gv[arg->ngv].mask == NULL) {
1606  PG_FREE_IF_COPY(pgraster, 0);
1607  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not rasterize geometry of geomval at index %d", i);
1608  PG_RETURN_NULL();
1609  }
1610 
1611  /* set SRID */
1612  rt_raster_set_srid(arg->gv[arg->ngv].mask, srid);
1613 
1614  /* second element, value */
1615  POSTGIS_RT_DEBUG(4, "Processing second element (val)");
1616  tupv = GetAttributeByName(tup, "val", &isnull);
1617  if (isnull) {
1618  elog(NOTICE, "Second argument (val) of geomval at index %d is NULL. Treating as NODATA", i);
1619  arg->gv[arg->ngv].pixval.nodata = 1;
1620  }
1621  else
1622  arg->gv[arg->ngv].pixval.value = DatumGetFloat8(tupv);
1623 
1624  (arg->ngv)++;
1625  }
1626 
1627  /* redim arg->gv if needed */
1628  if (arg->ngv < n) {
1629  arg->gv = repalloc(arg->gv, sizeof(struct rtpg_setvaluesgv_geomval_t) * arg->ngv);
1630  if (arg->gv == NULL) {
1633  PG_FREE_IF_COPY(pgraster, 0);
1634  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not reallocate memory for geomval array");
1635  PG_RETURN_NULL();
1636  }
1637  }
1638 
1639  /* keepnodata */
1640  if (!PG_ARGISNULL(3))
1641  arg->keepnodata = PG_GETARG_BOOL(3);
1642  POSTGIS_RT_DEBUGF(3, "keepnodata = %d", arg->keepnodata);
1643 
1644  /* keepnodata = TRUE and band is NODATA */
1645  if (arg->keepnodata && rt_band_get_isnodata_flag(band)) {
1646  POSTGIS_RT_DEBUG(3, "keepnodata = TRUE and band is NODATA. Not doing anything");
1647  }
1648  /* all elements are points */
1649  else if (allpoint == arg->ngv) {
1650  double igt[6] = {0};
1651  double xy[2] = {0};
1652  double value = 0;
1653  int isnodata = 0;
1654 
1655  LWCOLLECTION *coll = NULL;
1656  LWPOINT *point = NULL;
1657  POINT2D p;
1658 
1659  POSTGIS_RT_DEBUG(3, "all geometries are points, using direct to pixel method");
1660 
1661  /* cache inverse gretransform matrix */
1663 
1664  /* process each geometry */
1665  for (i = 0; i < arg->ngv; i++) {
1666  /* convert geometry to collection */
1667  coll = lwgeom_as_lwcollection(lwgeom_as_multi(arg->gv[i].geom));
1668 
1669  /* process each point in collection */
1670  for (j = 0; j < coll->ngeoms; j++) {
1671  point = lwgeom_as_lwpoint(coll->geoms[j]);
1672  getPoint2d_p(point->point, 0, &p);
1673 
1674  if (rt_raster_geopoint_to_cell(raster, p.x, p.y, &(xy[0]), &(xy[1]), igt) != ES_NONE) {
1677  PG_FREE_IF_COPY(pgraster, 0);
1678  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not process coordinates of point");
1679  PG_RETURN_NULL();
1680  }
1681 
1682  /* skip point if outside raster */
1683  if (
1684  (xy[0] < 0 || xy[0] >= width) ||
1685  (xy[1] < 0 || xy[1] >= height)
1686  ) {
1687  elog(NOTICE, "Point is outside raster extent. Skipping");
1688  continue;
1689  }
1690 
1691  /* get pixel value */
1692  if (rt_band_get_pixel(band, xy[0], xy[1], &value, &isnodata) != ES_NONE) {
1695  PG_FREE_IF_COPY(pgraster, 0);
1696  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not get pixel value");
1697  PG_RETURN_NULL();
1698  }
1699 
1700  /* keepnodata = TRUE AND pixel value is NODATA */
1701  if (arg->keepnodata && isnodata)
1702  continue;
1703 
1704  /* set pixel */
1705  if (arg->gv[i].pixval.nodata)
1706  noerr = rt_band_set_pixel(band, xy[0], xy[1], nodataval, NULL);
1707  else
1708  noerr = rt_band_set_pixel(band, xy[0], xy[1], arg->gv[i].pixval.value, NULL);
1709 
1710  if (noerr != ES_NONE) {
1713  PG_FREE_IF_COPY(pgraster, 0);
1714  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not set pixel value");
1715  PG_RETURN_NULL();
1716  }
1717  }
1718  }
1719  }
1720  /* run iterator otherwise */
1721  else {
1722  rt_iterator itrset;
1723 
1724  POSTGIS_RT_DEBUG(3, "a mix of geometries, using iterator method");
1725 
1726  /* init itrset */
1727  itrset = palloc(sizeof(struct rt_iterator_t) * (arg->ngv + 1));
1728  if (itrset == NULL) {
1731  PG_FREE_IF_COPY(pgraster, 0);
1732  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not allocate memory for iterator arguments");
1733  PG_RETURN_NULL();
1734  }
1735 
1736  /* set first raster's info */
1737  itrset[0].raster = raster;
1738  itrset[0].nband = nband - 1;
1739  itrset[0].nbnodata = 1;
1740 
1741  /* set other raster's info */
1742  for (i = 0, j = 1; i < arg->ngv; i++, j++) {
1743  itrset[j].raster = arg->gv[i].mask;
1744  itrset[j].nband = 0;
1745  itrset[j].nbnodata = 1;
1746  }
1747 
1748  /* pass to iterator */
1749  noerr = rt_raster_iterator(
1750  itrset, arg->ngv + 1,
1751  ET_FIRST, NULL,
1752  pixtype,
1753  hasnodata, nodataval,
1754  0, 0,
1755  NULL,
1756  arg,
1758  &_raster
1759  );
1760  pfree(itrset);
1761 
1762  if (noerr != ES_NONE) {
1765  PG_FREE_IF_COPY(pgraster, 0);
1766  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not run raster iterator function");
1767  PG_RETURN_NULL();
1768  }
1769 
1770  /* copy band from _raster to raster */
1771  _band = rt_raster_get_band(_raster, 0);
1772  if (_band == NULL) {
1774  rt_raster_destroy(_raster);
1776  PG_FREE_IF_COPY(pgraster, 0);
1777  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not get band from working raster");
1778  PG_RETURN_NULL();
1779  }
1780 
1781  _band = rt_raster_replace_band(raster, _band, nband - 1);
1782  if (_band == NULL) {
1784  rt_raster_destroy(_raster);
1786  PG_FREE_IF_COPY(pgraster, 0);
1787  elog(ERROR, "RASTER_setPixelValuesGeomval: Could not replace band in output raster");
1788  PG_RETURN_NULL();
1789  }
1790 
1791  rt_band_destroy(_band);
1792  rt_raster_destroy(_raster);
1793  }
1794 
1796 
1797  pgrtn = rt_raster_serialize(raster);
1799  PG_FREE_IF_COPY(pgraster, 0);
1800 
1801  POSTGIS_RT_DEBUG(3, "Finished");
1802 
1803  if (!pgrtn)
1804  PG_RETURN_NULL();
1805 
1806  SET_VARSIZE(pgrtn, pgrtn->size);
1807  PG_RETURN_POINTER(pgrtn);
1808 }
#define FALSE
Definition: dbfopen.c:72
int32_t gserialized_get_srid(const GSERIALIZED *g)
Extract the SRID from the serialized form (it is packed into three bytes so this is a handy function)...
Definition: gserialized.c:126
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
uint32_t gserialized_get_type(const GSERIALIZED *g)
Extract the geometry type from the serialized form (it hides in the anonymous data area,...
Definition: gserialized.c:89
int lwgeom_ndims(const LWGEOM *geom)
Return the number of dimensions (2, 3, 4) in a geometry.
Definition: lwgeom.c:955
#define LWVARHDRSZ
Definition: liblwgeom.h:311
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
LWGEOM * lwgeom_as_multi(const LWGEOM *lwgeom)
Create a new LWGEOM of the appropriate MULTI* type.
Definition: lwgeom.c:380
#define LWSIZE_GET(varsize)
Macro for reading the size from the GSERIALIZED size attribute.
Definition: liblwgeom.h:324
#define MULTIPOINTTYPE
Definition: liblwgeom.h:105
int getPoint2d_p(const POINTARRAY *pa, uint32_t n, POINT2D *point)
Definition: lwgeom_api.c:342
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:102
LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom)
Definition: lwgeom.c:233
lwvarlena_t * lwgeom_to_wkb_varlena(const LWGEOM *geom, uint8_t variant)
Definition: lwout_wkb.c:851
#define WKB_SFSQL
Definition: liblwgeom.h:2176
int32_t clamp_srid(int32_t srid)
Return a valid SRID from an arbitrary integer Raises a notice if what comes out is different from wha...
Definition: lwutil.c:333
LWGEOM * lwgeom_force_2d(const LWGEOM *geom)
Strip out the Z/M components of an LWGEOM.
Definition: lwgeom.c:793
int32_t rt_raster_get_srid(rt_raster raster)
Get raster's SRID.
Definition: rt_raster.c:360
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:680
int rt_band_get_hasnodata_flag(rt_band band)
Get hasnodata flag value.
Definition: rt_band.c:674
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:808
rt_errorstate rt_band_get_pixel(rt_band band, int x, int y, double *value, int *nodata)
Get pixel value.
Definition: rt_band.c:1376
void rt_raster_destroy(rt_raster raster)
Release memory associated to a raster.
Definition: rt_raster.c:86
rt_pixtype
Definition: librtcore.h:187
@ PT_END
Definition: librtcore.h:199
int rt_band_get_isnodata_flag(rt_band band)
Get isnodata flag value.
Definition: rt_band.c:714
void * rt_raster_serialize(rt_raster raster)
Return this raster in serialized form.
Definition: rt_serialize.c:521
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:1526
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
@ ES_NONE
Definition: librtcore.h:182
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:2618
void rt_band_destroy(rt_band band)
Destroy a raster band.
Definition: rt_band.c:340
uint16_t rt_raster_get_num_bands(rt_raster raster)
Definition: rt_raster.c:376
uint16_t rt_raster_get_height(rt_raster raster)
Definition: rt_raster.c:133
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 rt_raster_set_srid(rt_raster raster, int32_t srid)
Set raster's SRID.
Definition: rt_raster.c:367
@ ET_FIRST
Definition: librtcore.h:205
rt_errorstate rt_band_get_nodata(rt_band band, double *nodata)
Get NODATA value.
Definition: rt_band.c:1887
rt_pixtype rt_band_get_pixtype(rt_band band)
Return pixeltype of this band.
Definition: rt_band.c:631
uint16_t rt_raster_get_width(rt_raster raster)
Definition: rt_raster.c:125
void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt)
Get 6-element array of raster geotransform matrix.
Definition: rt_raster.c:710
rt_raster rt_raster_deserialize(void *serialized, int header_only)
Return a raster from a serialized form.
Definition: rt_serialize.c:725
rt_band rt_raster_get_band(rt_raster raster, int bandNum)
Return Nth band, or NULL if unavailable.
Definition: rt_raster.c:385
static int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members)
Definition: lwinline.h:203
static LWPOINT * lwgeom_as_lwpoint(const LWGEOM *lwgeom)
Definition: lwinline.h:131
int value
Definition: genraster.py:62
band
Definition: ovdump.py:58
nband
Definition: pixval.py:53
raster
Be careful!! Zeros function's input parameter can be a (height x width) array, not (width x height): ...
Definition: rtrowdump.py:121
gt
Definition: window.py:78
static void rtpg_setvaluesgv_arg_destroy(rtpg_setvaluesgv_arg arg)
Definition: rtpg_pixel.c:1309
static int rtpg_setvalues_geomval_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata)
Definition: rtpg_pixel.c:1326
static rtpg_setvaluesgv_arg rtpg_setvaluesgv_arg_init()
Definition: rtpg_pixel.c:1295
#define POSTGIS_RT_DEBUG(level, msg)
Definition: rtpostgis.h:65
#define POSTGIS_RT_DEBUGF(level, msg,...)
Definition: rtpostgis.h:69
uint32_t ngeoms
Definition: liblwgeom.h:580
LWGEOM ** geoms
Definition: liblwgeom.h:575
POINTARRAY * point
Definition: liblwgeom.h:471
double y
Definition: liblwgeom.h:390
double x
Definition: liblwgeom.h:390
uint32_t size
Definition: liblwgeom.h:307
char data[]
Definition: liblwgeom.h:308
rt_raster raster
Definition: librtcore.h:2596
uint16_t nband
Definition: librtcore.h:2597
uint8_t nbnodata
Definition: librtcore.h:2598
Struct definitions.
Definition: librtcore.h:2403
rtpg_setvaluesgv_geomval gv
Definition: rtpg_pixel.c:1280
struct rtpg_setvaluesgv_geomval_t::@27 pixval

References ovdump::band, clamp_srid(), lwvarlena_t::data, ES_NONE, ET_FIRST, FALSE, rtpg_setvaluesgv_geomval_t::geom, LWCOLLECTION::geoms, getPoint2d_p(), gserialized_get_srid(), gserialized_get_type(), window::gt, rtpg_setvaluesgv_arg_t::gv, rtpg_setvaluesgv_arg_t::keepnodata, lwgeom_as_lwcollection(), lwgeom_as_lwpoint(), lwgeom_as_multi(), lwgeom_force_2d(), lwgeom_free(), lwgeom_from_gserialized(), lwgeom_is_empty(), lwgeom_ndims(), lwgeom_to_wkb_varlena(), LWSIZE_GET, LWVARHDRSZ, rtpg_setvaluesgv_geomval_t::mask, MULTIPOINTTYPE, rt_iterator_t::nband, pixval::nband, rt_iterator_t::nbnodata, LWCOLLECTION::ngeoms, rtpg_setvaluesgv_arg_t::ngv, rtpg_setvaluesgv_geomval_t::nodata, rtpg_setvaluesgv_geomval_t::pixval, LWPOINT::point, POINTTYPE, POSTGIS_RT_DEBUG, POSTGIS_RT_DEBUGF, PT_END, rt_iterator_t::raster, rtrowdump::raster, rt_band_destroy(), rt_band_get_hasnodata_flag(), rt_band_get_isnodata_flag(), rt_band_get_nodata(), rt_band_get_pixel(), rt_band_get_pixtype(), rt_band_set_pixel(), rt_raster_deserialize(), rt_raster_destroy(), rt_raster_gdal_rasterize(), rt_raster_geopoint_to_cell(), rt_raster_get_band(), rt_raster_get_geotransform_matrix(), rt_raster_get_height(), rt_raster_get_inverse_geotransform_matrix(), rt_raster_get_num_bands(), rt_raster_get_srid(), rt_raster_get_width(), rt_raster_iterator(), rt_raster_replace_band(), rt_raster_serialize(), rt_raster_set_srid(), rtpg_setvalues_geomval_callback(), rtpg_setvaluesgv_arg_destroy(), rtpg_setvaluesgv_arg_init(), lwvarlena_t::size, rt_raster_serialized_t::size, rtpg_setvaluesgv_geomval_t::value, genraster::value, WKB_SFSQL, POINT2D::x, and POINT2D::y.

Here is the call graph for this function: