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

◆ wkt_parser_collection_finalize()

LWGEOM * wkt_parser_collection_finalize ( int  lwtype,
LWGEOM geom,
char *  dimensionality 
)

Definition at line 805 of file lwin_wkt.c.

806{
807 lwflags_t flags = wkt_dimensionality(dimensionality);
808 int flagdims = FLAGS_NDIMS(flags);
809
810 /* No geometry means it is empty */
811 if( ! geom )
812 {
814 }
815
816 /* There are 'Z' or 'M' tokens in the signature */
817 if ( flagdims > 2 )
818 {
820 uint32_t i;
821
822 for ( i = 0 ; i < col->ngeoms; i++ )
823 {
824 LWGEOM *subgeom = col->geoms[i];
825 if ( FLAGS_NDIMS(flags) != FLAGS_NDIMS(subgeom->flags) &&
826 ! lwgeom_is_empty(subgeom) )
827 {
828 lwgeom_free(geom);
830 return NULL;
831 }
832
833 if ( lwtype == COLLECTIONTYPE &&
834 ( (FLAGS_GET_Z(flags) != FLAGS_GET_Z(subgeom->flags)) ||
835 (FLAGS_GET_M(flags) != FLAGS_GET_M(subgeom->flags)) ) &&
836 ! lwgeom_is_empty(subgeom) )
837 {
838 lwgeom_free(geom);
840 return NULL;
841 }
842 }
843
844 /* Harmonize the collection dimensionality */
845 if( LW_FAILURE == wkt_parser_set_dims(geom, flags) )
846 {
847 lwgeom_free(geom);
849 return NULL;
850 }
851 }
852
853 /* Set the collection type */
854 geom->type = lwtype;
855
856 return geom;
857}
#define PARSER_ERROR_MIXDIMS
Definition liblwgeom.h:2086
#define COLLECTIONTYPE
Definition liblwgeom.h:122
#define LW_FAILURE
Definition liblwgeom.h:110
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1138
LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom)
Definition lwgeom.c:215
uint16_t lwflags_t
Definition liblwgeom.h:313
#define PARSER_ERROR_OTHER
Definition liblwgeom.h:2092
#define FLAGS_GET_Z(flags)
Definition liblwgeom.h:179
#define FLAGS_NDIMS(flags)
Definition liblwgeom.h:193
#define FLAGS_GET_M(flags)
Definition liblwgeom.h:180
LWCOLLECTION * lwcollection_construct_empty(uint8_t type, int32_t srid, char hasz, char hasm)
#define SRID_UNKNOWN
Unknown SRID value.
Definition liblwgeom.h:229
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition lwgeom.c:291
#define SET_PARSER_ERROR(errno)
Definition lwin_wkt.c:52
static int wkt_parser_set_dims(LWGEOM *geom, lwflags_t flags)
Force the dimensionality of a geometry to match the dimensionality of a set of flags (usually derived...
Definition lwin_wkt.c:101
static lwflags_t wkt_dimensionality(char *dimensionality)
Definition lwin_wkt.c:75
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:193
uint32_t ngeoms
Definition liblwgeom.h:566
LWGEOM ** geoms
Definition liblwgeom.h:561
uint8_t type
Definition liblwgeom.h:448
lwflags_t flags
Definition liblwgeom.h:447

References COLLECTIONTYPE, LWGEOM::flags, FLAGS_GET_M, FLAGS_GET_Z, FLAGS_NDIMS, LWCOLLECTION::geoms, LW_FAILURE, lwcollection_as_lwgeom(), lwcollection_construct_empty(), lwgeom_as_lwcollection(), lwgeom_free(), lwgeom_is_empty(), LWCOLLECTION::ngeoms, PARSER_ERROR_MIXDIMS, PARSER_ERROR_OTHER, SET_PARSER_ERROR, SRID_UNKNOWN, LWGEOM::type, wkt_dimensionality(), and wkt_parser_set_dims().

Here is the call graph for this function: