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

◆ lwgeom_force_sfs()

LWGEOM * lwgeom_force_sfs ( LWGEOM geom,
int  version 
)

Definition at line 877 of file lwgeom.c.

878{
879 LWCOLLECTION *col;
880 uint32_t i;
881 LWGEOM *g;
882
883 /* SFS 1.2 version */
884 if (version == 120)
885 {
886 switch(geom->type)
887 {
888 /* SQL/MM types */
889 case CIRCSTRINGTYPE:
890 case COMPOUNDTYPE:
891 case CURVEPOLYTYPE:
892 case MULTICURVETYPE:
893 case MULTISURFACETYPE:
894 return lwgeom_stroke(geom, 32);
895
896 case COLLECTIONTYPE:
897 col = (LWCOLLECTION*)geom;
898 for ( i = 0; i < col->ngeoms; i++ )
899 col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
900
902
903 default:
904 return (LWGEOM *)geom;
905 }
906 }
907
908
909 /* SFS 1.1 version */
910 switch(geom->type)
911 {
912 /* SQL/MM types */
913 case CIRCSTRINGTYPE:
914 case COMPOUNDTYPE:
915 case CURVEPOLYTYPE:
916 case MULTICURVETYPE:
917 case MULTISURFACETYPE:
918 return lwgeom_stroke(geom, 32);
919
920 /* SFS 1.2 types */
921 case TRIANGLETYPE:
922 g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)geom, 0, NULL));
923 lwgeom_free(geom);
924 return g;
925
926 case TINTYPE:
927 col = (LWCOLLECTION*) geom;
928 for ( i = 0; i < col->ngeoms; i++ )
929 {
930 g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)col->geoms[i], 0, NULL));
931 lwgeom_free(col->geoms[i]);
932 col->geoms[i] = g;
933 }
934 col->type = COLLECTIONTYPE;
935 return lwmpoly_as_lwgeom((LWMPOLY*)geom);
936
938 geom->type = COLLECTIONTYPE;
939 return (LWGEOM *)geom;
940
941 /* Collection */
942 case COLLECTIONTYPE:
943 col = (LWCOLLECTION*)geom;
944 for ( i = 0; i < col->ngeoms; i++ )
945 col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
946
948
949 default:
950 return (LWGEOM *)geom;
951 }
952}
#define COLLECTIONTYPE
Definition liblwgeom.h:108
#define COMPOUNDTYPE
Definition liblwgeom.h:110
#define CURVEPOLYTYPE
Definition liblwgeom.h:111
LWPOLY * lwpoly_from_lwlines(const LWLINE *shell, uint32_t nholes, const LWLINE **holes)
Definition lwpoly.c:359
#define MULTISURFACETYPE
Definition liblwgeom.h:113
#define TINTYPE
Definition liblwgeom.h:116
#define POLYHEDRALSURFACETYPE
Definition liblwgeom.h:114
#define CIRCSTRINGTYPE
Definition liblwgeom.h:109
#define MULTICURVETYPE
Definition liblwgeom.h:112
#define TRIANGLETYPE
Definition liblwgeom.h:115
LWGEOM * lwgeom_stroke(const LWGEOM *geom, uint32_t perQuad)
Convert type with arcs into equivalent linearized type.
Definition lwstroke.c:871
LWGEOM * lwgeom_force_sfs(LWGEOM *geom, int version)
Definition lwgeom.c:877
void lwgeom_free(LWGEOM *lwgeom)
Definition lwgeom.c:1246
LWGEOM * lwmpoly_as_lwgeom(const LWMPOLY *obj)
Definition lwgeom.c:322
LWGEOM * lwpoly_as_lwgeom(const LWPOLY *obj)
Definition lwgeom.c:357
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition lwgeom.c:337
uint32_t ngeoms
Definition liblwgeom.h:580
uint8_t type
Definition liblwgeom.h:578
LWGEOM ** geoms
Definition liblwgeom.h:575
uint8_t type
Definition liblwgeom.h:462

References CIRCSTRINGTYPE, COLLECTIONTYPE, COMPOUNDTYPE, CURVEPOLYTYPE, LWCOLLECTION::geoms, lwcollection_as_lwgeom(), lwgeom_force_sfs(), lwgeom_free(), lwgeom_stroke(), lwmpoly_as_lwgeom(), lwpoly_as_lwgeom(), lwpoly_from_lwlines(), MULTICURVETYPE, MULTISURFACETYPE, LWCOLLECTION::ngeoms, POLYHEDRALSURFACETYPE, TINTYPE, TRIANGLETYPE, LWGEOM::type, LWLINE::type, and LWCOLLECTION::type.

Referenced by do_geom_test(), do_type_test(), lwgeom_force_sfs(), and LWGEOM_force_sfs().

Here is the call graph for this function:
Here is the caller graph for this function: