]> granicus.if.org Git - postgis/commitdiff
Handled GEOS Geometry construction errors as FALSE results in isvalid(geom).
authorSandro Santilli <strk@keybit.net>
Tue, 18 Jan 2005 12:44:13 +0000 (12:44 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 18 Jan 2005 12:44:13 +0000 (12:44 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@1313 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom_geos.c

index 8a3205dfc96d85b04d411f8f60b0fb52f79ba28d..8df5aa4fb06a1865813606c4abd5db1c50ff1d88 100644 (file)
@@ -111,6 +111,7 @@ extern Geometry *PostGIS2GEOS_collection(int type, Geometry **geoms, int ngeoms,
 void NOTICE_MESSAGE(char *msg);
 PG_LWGEOM *GEOS2POSTGIS(Geometry *geom, char want3d);
 Geometry * POSTGIS2GEOS(PG_LWGEOM *g);
+Geometry * LWGEOM2GEOS(LWGEOM *g);
 void errorIfGeometryCollection(PG_LWGEOM *g1, PG_LWGEOM *g2);
 LWPOINT *lwpoint_from_geometry(Geometry *g, char want3d);
 LWLINE *lwline_from_geometry(Geometry *g, char want3d);
@@ -1068,6 +1069,7 @@ PG_FUNCTION_INFO_V1(isvalid);
 Datum isvalid(PG_FUNCTION_ARGS)
 {
        PG_LWGEOM       *geom1;
+       LWGEOM *lwgeom;
        bool result;
        Geometry *g1;
 
@@ -1082,7 +1084,19 @@ Datum isvalid(PG_FUNCTION_ARGS)
 #ifdef PROFILE
        profstart(PROF_P2G1);
 #endif
-       g1 = POSTGIS2GEOS(geom1);
+       lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
+       if ( ! lwgeom )
+       {
+               lwerror("unable to deserialize input");
+       }
+       g1 = LWGEOM2GEOS(lwgeom);
+       if ( ! g1 )
+       {
+               lwgeom_release(lwgeom);
+               PG_RETURN_BOOL(FALSE);
+       }
+       lwgeom_release(lwgeom);
+       //g1 = POSTGIS2GEOS(geom1);
 #ifdef PROFILE
        profstop(PROF_P2G1);
 #endif