PostGIS  2.1.10dev-r@@SVN_REVISION@@
int lwgeom_is_closed ( const LWGEOM geom)

Return true or false depending on whether a geometry is a linear feature that closes on itself.

Definition at line 903 of file lwgeom.c.

References CIRCSTRINGTYPE, COMPOUNDTYPE, LWCOLLECTION::geoms, LINETYPE, LW_FALSE, LW_TRUE, lwcircstring_is_closed(), lwcompound_is_closed(), lwgeom_as_lwcollection(), lwgeom_is_collection(), lwgeom_is_empty(), lwline_is_closed(), lwpoly_is_closed(), lwpsurface_is_closed(), lwtin_is_closed(), LWCOLLECTION::ngeoms, POLYGONTYPE, POLYHEDRALSURFACETYPE, TINTYPE, and LWGEOM::type.

Referenced by lwgeom_dimensionality(), and LWGEOM_isclosed().

904 {
905  int type = geom->type;
906 
907  if( lwgeom_is_empty(geom) )
908  return LW_FALSE;
909 
910  /* Test linear types for closure */
911  switch (type)
912  {
913  case LINETYPE:
914  return lwline_is_closed((LWLINE*)geom);
915  case POLYGONTYPE:
916  return lwpoly_is_closed((LWPOLY*)geom);
917  case CIRCSTRINGTYPE:
918  return lwcircstring_is_closed((LWCIRCSTRING*)geom);
919  case COMPOUNDTYPE:
920  return lwcompound_is_closed((LWCOMPOUND*)geom);
921  case TINTYPE:
922  return lwtin_is_closed((LWTIN*)geom);
924  return lwpsurface_is_closed((LWPSURFACE*)geom);
925  }
926 
927  /* Recurse into collections and see if anything is not closed */
928  if ( lwgeom_is_collection(geom) )
929  {
931  int i;
932  int closed;
933  for ( i = 0; i < col->ngeoms; i++ )
934  {
935  closed = lwgeom_is_closed(col->geoms[i]);
936  if ( ! closed )
937  return LW_FALSE;
938  }
939  return LW_TRUE;
940  }
941 
942  /* All non-linear non-collection types we will call closed */
943  return LW_TRUE;
944 }
#define LINETYPE
Definition: liblwgeom.h:61
int lwtin_is_closed(const LWTIN *tin)
Definition: lwtin.c:80
#define POLYGONTYPE
Definition: liblwgeom.h:62
#define COMPOUNDTYPE
Definition: liblwgeom.h:68
#define POLYHEDRALSURFACETYPE
Definition: liblwgeom.h:72
int lwcompound_is_closed(const LWCOMPOUND *curve)
Definition: lwcompound.c:22
int lwgeom_is_closed(const LWGEOM *geom)
Return true or false depending on whether a geometry is a linear feature that closes on itself...
Definition: lwgeom.c:903
#define LW_FALSE
Definition: liblwgeom.h:52
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:51
LWGEOM ** geoms
Definition: liblwgeom.h:465
int lwpoly_is_closed(const LWPOLY *poly)
Definition: lwpoly.c:455
int lwcircstring_is_closed(const LWCIRCSTRING *curve)
Definition: lwcircstring.c:255
#define TINTYPE
Definition: liblwgeom.h:74
int lwpsurface_is_closed(const LWPSURFACE *psurface)
Definition: lwpsurface.c:86
LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom)
Definition: lwgeom.c:143
int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members) ...
Definition: lwgeom.c:1229
int lwgeom_is_collection(const LWGEOM *geom)
Determine whether a LWGEOM can contain sub-geometries or not.
Definition: lwgeom.c:947
int lwline_is_closed(const LWLINE *line)
Definition: lwline.c:435
uint8_t type
Definition: liblwgeom.h:352
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:67

Here is the call graph for this function:

Here is the caller graph for this function: