extern void lwtriangle_reverse(LWTRIANGLE *triangle);
extern char* lwgeom_summary(const LWGEOM *lwgeom, int offset);
extern char* lwpoint_to_latlon(const LWPOINT *p, const char *format);
-extern int lwline_is_closed(const LWLINE *line);
-extern int lwcircstring_is_closed(const LWCIRCSTRING *curve);
-extern int lwcompound_is_closed(const LWCOMPOUND *curve);
-extern int lwpsurface_is_closed(const LWPSURFACE *psurface);
-extern int lwtin_is_closed(const LWTIN *tin);
/**
* Ensure the outer ring is clockwise oriented and all inner rings
LWGEOM* lwcollection_remove_repeated_points(LWCOLLECTION *in);
LWGEOM* lwpoly_remove_repeated_points(LWPOLY *in);
+/*
+* Closure test
+*/
+int lwline_is_closed(const LWLINE *line);
+int lwpoly_is_closed(const LWPOLY *poly);
+int lwcircstring_is_closed(const LWCIRCSTRING *curve);
+int lwcompound_is_closed(const LWCOMPOUND *curve);
+int lwpsurface_is_closed(const LWPSURFACE *psurface);
+int lwtin_is_closed(const LWTIN *tin);
+
/*
* Split a line by a point and push components to the provided multiline.
{
case LINETYPE:
return lwline_is_closed((LWLINE*)geom);
+ case POLYGONTYPE:
+ return lwpoly_is_closed((LWPOLY*)geom);
case CIRCSTRINGTYPE:
return lwcircstring_is_closed((LWCIRCSTRING*)geom);
case COMPOUNDTYPE:
int
lwline_is_closed(const LWLINE *line)
{
- if (FLAGS_GET_Z(line->type))
+ if (FLAGS_GET_Z(line->flags))
return ptarray_isclosed3d(line->points);
return ptarray_isclosed2d(line->points);
return result;
}
+
+int
+lwpoly_is_closed(const LWPOLY *poly)
+{
+ int i = 0;
+
+ if ( poly->nrings == 0 )
+ return LW_TRUE;
+
+ for ( i = 0; i < poly->nrings; i++ )
+ {
+ if (FLAGS_GET_Z(poly->flags))
+ {
+ if ( ! ptarray_isclosed3d(poly->rings[i]) )
+ return LW_FALSE;
+ }
+ else
+ {
+ if ( ! ptarray_isclosed2d(poly->rings[i]) )
+ return LW_FALSE;
+ }
+ }
+
+ return LW_TRUE;
+}
+
+
+