]> granicus.if.org Git - postgis/commitdiff
Change lwgeom_is_empty to return spatial emptiness (#671)
authorSandro Santilli <strk@keybit.net>
Mon, 9 Jan 2012 18:01:15 +0000 (18:01 +0000)
committerSandro Santilli <strk@keybit.net>
Mon, 9 Jan 2012 18:01:15 +0000 (18:01 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@8725 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_libgeom.c
liblwgeom/lwcollection.c
regress/dump_expected
regress/tickets_expected

index 50bd27e167744aa3dac11dd44596d7df47cd783e..ad16ad8f101768a4041199189c27ae47ba2534a2 100644 (file)
@@ -693,6 +693,48 @@ static void test_lwgeom_force_clockwise(void)
        lwgeom_free(geom);
 }
 
+/*
+ * Test lwgeom_is_empty
+ */
+static void test_lwgeom_is_empty(void)
+{
+       LWGEOM *geom;
+       char *in_ewkt, *out_ewkt;
+
+       geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( !lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POLYGON EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOINT EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTILINESTRING EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOLYGON EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_is_empty(geom) );
+       lwgeom_free(geom);
+
+}
+
 
 /*
 ** Used by test harness to register the tests in this file.
@@ -715,6 +757,7 @@ CU_TestInfo libgeom_tests[] =
        PG_TEST(test_lwgeom_clone),
        PG_TEST(test_lwgeom_force_clockwise),
        PG_TEST(test_lwgeom_calculate_gbox),
+       PG_TEST(test_lwgeom_is_empty),
        CU_TEST_INFO_NULL
 };
 CU_SuiteInfo libgeom_suite = {"libgeom",  NULL,  NULL, libgeom_tests};
index f451f5aae7eed1a9f64f024ff57240bd6e12f14e..8b7c2a4cc29bfd9437a71221589f547ce1f87ae3 100644 (file)
@@ -457,9 +457,14 @@ lwcollection_force_dims(const LWCOLLECTION *col, int hasz, int hasm)
 
 int lwcollection_is_empty(const LWCOLLECTION *col)
 {
+       int i;
        if ( (col->ngeoms == 0) || (!col->geoms) )
                return LW_TRUE;
-       return LW_FALSE;
+       for( i = 0; i < col->ngeoms; i++ )
+       {
+               if ( ! lwgeom_is_empty(col->geoms[i]) ) return LW_FALSE;
+       }
+       return LW_TRUE;
 }
 
 
index 9f8738033d4ae259caaf406d3a0d03ae784345e4..97aba4af430413631998be1273622898d75c5ba3 100644 (file)
@@ -15,4 +15,4 @@ t9|{3}|POLYGON((0 0,0 1,1 1,0 0))
 t9|{4}|POLYGON((0 0,0 9,9 9,9 0,0 0),(5 5,5 6,6 6,5 5))
 t9|{5,1}|POLYGON((0 0,0 9,9 9,9 0,0 0),(5 5,5 6,6 6,5 5))
 t10|0
-t11|3
+t11|0
index b2533b991cf1c8b5b7af7f47c4af797c3ff777c7..704edf461cb78d6ebcc5d06b7f387f3acaf8b25d 100644 (file)
@@ -101,7 +101,7 @@ NOTICE:  IllegalArgumentException: Invalid number of points in LinearRing found
 #683|0103000020E610000000000000
 #684|0103000020E610000000000000
 #685|0103000020E610000000000000
-#686|0107000020E610000002000000010300000000000000011100000000000000
+#686|0107000020E610000000000000
 #687|f
 #689|f
 #690