PostGIS  3.0.0dev-r@@SVN_REVISION@@

◆ rt_util_envelope_to_lwpoly()

LWPOLY* rt_util_envelope_to_lwpoly ( rt_envelope  env)

Definition at line 437 of file rt_util.c.

References lwpoly_construct(), rt_envelope::MaxX, rt_envelope::MaxY, rt_envelope::MinX, rt_envelope::MinY, ptarray_construct(), ptarray_set_point4d(), rtalloc(), rterror(), SRID_UNKNOWN, POINT4D::x, and POINT4D::y.

Referenced by rt_raster_compute_skewed_raster(), and rt_raster_gdal_rasterize().

439  {
440  LWPOLY *npoly = NULL;
441  POINTARRAY **rings = NULL;
442  POINTARRAY *pts = NULL;
443  POINT4D p4d;
444 
445  rings = (POINTARRAY **) rtalloc(sizeof (POINTARRAY*));
446  if (!rings) {
447  rterror("rt_util_envelope_to_lwpoly: Out of memory building envelope's geometry");
448  return NULL;
449  }
450  rings[0] = ptarray_construct(0, 0, 5);
451  if (!rings[0]) {
452  rterror("rt_util_envelope_to_lwpoly: Out of memory building envelope's geometry ring");
453  return NULL;
454  }
455 
456  pts = rings[0];
457 
458  /* Upper-left corner (first and last points) */
459  p4d.x = env.MinX;
460  p4d.y = env.MaxY;
461  ptarray_set_point4d(pts, 0, &p4d);
462  ptarray_set_point4d(pts, 4, &p4d);
463 
464  /* Upper-right corner (we go clockwise) */
465  p4d.x = env.MaxX;
466  p4d.y = env.MaxY;
467  ptarray_set_point4d(pts, 1, &p4d);
468 
469  /* Lower-right corner */
470  p4d.x = env.MaxX;
471  p4d.y = env.MinY;
472  ptarray_set_point4d(pts, 2, &p4d);
473 
474  /* Lower-left corner */
475  p4d.x = env.MinX;
476  p4d.y = env.MinY;
477  ptarray_set_point4d(pts, 3, &p4d);
478 
479  npoly = lwpoly_construct(SRID_UNKNOWN, 0, 1, rings);
480  if (npoly == NULL) {
481  rterror("rt_util_envelope_to_lwpoly: Could not build envelope's geometry");
482  return NULL;
483  }
484 
485  return npoly;
486 }
double x
Definition: liblwgeom.h:354
double MinY
Definition: librtcore.h:167
POINTARRAY * ptarray_construct(char hasz, char hasm, uint32_t npoints)
Construct an empty pointarray, allocating storage and setting the npoints, but not filling in any inf...
Definition: ptarray.c:50
double MaxY
Definition: librtcore.h:168
double MaxX
Definition: librtcore.h:166
void ptarray_set_point4d(POINTARRAY *pa, uint32_t n, const POINT4D *p4d)
Definition: lwgeom_api.c:404
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
LWPOLY * lwpoly_construct(int srid, GBOX *bbox, uint32_t nrings, POINTARRAY **points)
Definition: lwpoly.c:43
#define SRID_UNKNOWN
Unknown SRID value.
Definition: liblwgeom.h:187
double MinX
Definition: librtcore.h:165
double y
Definition: liblwgeom.h:354
Here is the call graph for this function:
Here is the caller graph for this function: