PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ lwgeom_force_sfs()

LWGEOM* lwgeom_force_sfs ( LWGEOM geom,
int  version 
)

Definition at line 832 of file lwgeom.c.

833 {
834  LWCOLLECTION *col;
835  uint32_t i;
836  LWGEOM *g;
837 
838  /* SFS 1.2 version */
839  if (version == 120)
840  {
841  switch(geom->type)
842  {
843  /* SQL/MM types */
844  case CIRCSTRINGTYPE:
845  case COMPOUNDTYPE:
846  case CURVEPOLYTYPE:
847  case MULTICURVETYPE:
848  case MULTISURFACETYPE:
849  return lwgeom_stroke(geom, 32);
850 
851  case COLLECTIONTYPE:
852  col = (LWCOLLECTION*)geom;
853  for ( i = 0; i < col->ngeoms; i++ )
854  col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
855 
856  return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
857 
858  default:
859  return (LWGEOM *)geom;
860  }
861  }
862 
863 
864  /* SFS 1.1 version */
865  switch(geom->type)
866  {
867  /* SQL/MM types */
868  case CIRCSTRINGTYPE:
869  case COMPOUNDTYPE:
870  case CURVEPOLYTYPE:
871  case MULTICURVETYPE:
872  case MULTISURFACETYPE:
873  return lwgeom_stroke(geom, 32);
874 
875  /* SFS 1.2 types */
876  case TRIANGLETYPE:
877  g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)geom, 0, NULL));
878  lwgeom_free(geom);
879  return g;
880 
881  case TINTYPE:
882  col = (LWCOLLECTION*) geom;
883  for ( i = 0; i < col->ngeoms; i++ )
884  {
885  g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)col->geoms[i], 0, NULL));
886  lwgeom_free(col->geoms[i]);
887  col->geoms[i] = g;
888  }
889  col->type = COLLECTIONTYPE;
890  return lwmpoly_as_lwgeom((LWMPOLY*)geom);
891 
893  geom->type = COLLECTIONTYPE;
894  return (LWGEOM *)geom;
895 
896  /* Collection */
897  case COLLECTIONTYPE:
898  col = (LWCOLLECTION*)geom;
899  for ( i = 0; i < col->ngeoms; i++ )
900  col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
901 
902  return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
903 
904  default:
905  return (LWGEOM *)geom;
906  }
907 }
#define COLLECTIONTYPE
Definition: liblwgeom.h:122
#define COMPOUNDTYPE
Definition: liblwgeom.h:124
#define CURVEPOLYTYPE
Definition: liblwgeom.h:125
#define MULTISURFACETYPE
Definition: liblwgeom.h:127
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:130
#define POLYHEDRALSURFACETYPE
Definition: liblwgeom.h:128
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:123
#define MULTICURVETYPE
Definition: liblwgeom.h:126
#define TRIANGLETYPE
Definition: liblwgeom.h:129
LWPOLY * lwpoly_from_lwlines(const LWLINE *shell, uint32_t nholes, const LWLINE **holes)
Definition: lwpoly.c:360
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition: lwgeom.c:292
LWGEOM * lwpoly_as_lwgeom(const LWPOLY *obj)
Definition: lwgeom.c:312
LWGEOM * lwgeom_force_sfs(LWGEOM *geom, int version)
Definition: lwgeom.c:832
LWGEOM * lwmpoly_as_lwgeom(const LWMPOLY *obj)
Definition: lwgeom.c:277
void lwgeom_free(LWGEOM *lwgeom)
Definition: lwgeom.c:1138
uint32_t ngeoms
Definition: liblwgeom.h:594
uint8_t type
Definition: liblwgeom.h:592
LWGEOM ** geoms
Definition: liblwgeom.h:589
uint8_t type
Definition: liblwgeom.h:476

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: