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

◆ ST_Scroll()

Datum ST_Scroll ( PG_FUNCTION_ARGS  )

Definition at line 1081 of file lwgeom_functions_basic.c.

1082{
1083 Datum datum_line, datum_point;
1084 GSERIALIZED *ser_line, *ser_point;
1085 LWGEOM *lwgeom_line, *lwgeom_point;
1086 LWLINE *line;
1087 LWPOINT *point;
1088 POINT4D p;
1089 GSERIALIZED *ser_out;
1090 int rv;
1091
1092 POSTGIS_DEBUG(2, "ST_Scroll called.");
1093
1094 datum_line = PG_GETARG_DATUM(0);
1095 datum_point = PG_GETARG_DATUM(1);
1096
1097 ser_line = ((GSERIALIZED *)PG_DETOAST_DATUM(datum_line));
1098 lwgeom_line = lwgeom_from_gserialized(ser_line);
1099 line = lwgeom_as_lwline(lwgeom_line);
1100 if ( ! line ) {
1101 lwpgerror("First argument must be a line");
1102 PG_RETURN_NULL();
1103 }
1104
1105 ser_point = ((GSERIALIZED *)PG_DETOAST_DATUM(datum_point));
1106 lwgeom_point = lwgeom_from_gserialized(ser_point);
1107 point = lwgeom_as_lwpoint(lwgeom_point);
1108 if ( ! point ) {
1109 lwpgerror("Second argument must be a point");
1110 PG_RETURN_NULL();
1111 }
1112 if ( ! lwpoint_getPoint4d_p(point, &p) ) {
1113 lwpgerror("Second argument must be a non-empty point");
1114 PG_RETURN_NULL();
1115 }
1116
1117 rv = ptarray_scroll_in_place(line->points, &p);
1118 if ( LW_FAILURE == rv ) {
1119 PG_RETURN_NULL();
1120 }
1121
1122 ser_out = geometry_serialize(lwgeom_line);
1123
1124 lwgeom_free(lwgeom_point);
1125 PG_FREE_IF_COPY(ser_line, 0);
1126 PG_FREE_IF_COPY(ser_point, 0);
1127
1128 PG_RETURN_POINTER(ser_out);
1129}
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out)
Definition lwpoint.c:57
#define LW_FAILURE
Definition liblwgeom.h:96
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition lwgeom.c:207
int ptarray_scroll_in_place(POINTARRAY *pa, const POINT4D *newbase)
Definition ptarray.c:2337
static LWPOINT * lwgeom_as_lwpoint(const LWGEOM *lwgeom)
Definition lwinline.h:127
POINTARRAY * points
Definition liblwgeom.h:483

References LW_FAILURE, lwgeom_as_lwline(), lwgeom_as_lwpoint(), lwgeom_free(), lwgeom_from_gserialized(), lwpoint_getPoint4d_p(), LWLINE::points, and ptarray_scroll_in_place().

Here is the call graph for this function: