PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ 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 
901  return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
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 
947  return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
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
#define MULTISURFACETYPE
Definition: liblwgeom.h:113
LWGEOM * lwgeom_stroke(const LWGEOM *geom, uint32_t perQuad)
Convert type with arcs into equivalent linearized type.
Definition: lwstroke.c:871
#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
LWPOLY * lwpoly_from_lwlines(const LWLINE *shell, uint32_t nholes, const LWLINE **holes)
Definition: lwpoly.c:359
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition: lwgeom.c:337
LWGEOM * lwpoly_as_lwgeom(const LWPOLY *obj)
Definition: lwgeom.c:357
LWGEOM * lwgeom_force_sfs(LWGEOM *geom, int version)
Definition: lwgeom.c:877
LWGEOM * lwmpoly_as_lwgeom(const LWMPOLY *obj)
Definition: lwgeom.c:322
void lwgeom_free(LWGEOM *lwgeom)
Definition: lwgeom.c:1246
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: