PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ BOX3D_in()

Datum BOX3D_in ( PG_FUNCTION_ARGS  )

Definition at line 55 of file lwgeom_box3d.c.

56{
57 char *str = PG_GETARG_CSTRING(0);
58 int nitems;
59 BOX3D *box = (BOX3D *)palloc(sizeof(BOX3D));
60 box->zmin = 0;
61 box->zmax = 0;
62
63 if (strstr(str, "BOX3D(") != str)
64 {
65 pfree(box);
66 elog(ERROR, "BOX3D parser - doesn't start with BOX3D(");
67 PG_RETURN_NULL();
68 }
69
70 nitems = sscanf(str,
71 "BOX3D(%le %le %le ,%le %le %le)",
72 &box->xmin,
73 &box->ymin,
74 &box->zmin,
75 &box->xmax,
76 &box->ymax,
77 &box->zmax);
78 if (nitems != 6)
79 {
80 nitems = sscanf(str, "BOX3D(%le %le ,%le %le)", &box->xmin, &box->ymin, &box->xmax, &box->ymax);
81 if (nitems != 4)
82 {
83 pfree(box);
84 elog(
85 ERROR,
86 "BOX3D parser - couldn't parse. It should look like: BOX3D(xmin ymin zmin,xmax ymax zmax) or BOX3D(xmin ymin,xmax ymax)");
87 PG_RETURN_NULL();
88 }
89 }
90
91 if (box->xmin > box->xmax)
92 {
93 float tmp = box->xmin;
94 box->xmin = box->xmax;
95 box->xmax = tmp;
96 }
97 if (box->ymin > box->ymax)
98 {
99 float tmp = box->ymin;
100 box->ymin = box->ymax;
101 box->ymax = tmp;
102 }
103 if (box->zmin > box->zmax)
104 {
105 float tmp = box->zmin;
106 box->zmin = box->zmax;
107 box->zmax = tmp;
108 }
109 box->srid = SRID_UNKNOWN;
110 PG_RETURN_POINTER(box);
111}
#define SRID_UNKNOWN
Unknown SRID value.
Definition liblwgeom.h:215
#define str(s)
double xmax
Definition liblwgeom.h:340
double zmin
Definition liblwgeom.h:339
double ymax
Definition liblwgeom.h:340
double ymin
Definition liblwgeom.h:339
double zmax
Definition liblwgeom.h:340
double xmin
Definition liblwgeom.h:339
int32_t srid
Definition liblwgeom.h:341

References BOX3D::srid, SRID_UNKNOWN, str, BOX3D::xmax, BOX3D::xmin, BOX3D::ymax, BOX3D::ymin, BOX3D::zmax, and BOX3D::zmin.