]> granicus.if.org Git - postgis/commitdiff
Add support from SRID= block on EWKT
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 24 Feb 2010 13:50:22 +0000 (13:50 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 24 Feb 2010 13:50:22 +0000 (13:50 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@5334 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_wkt.c
liblwgeom/liblwgeom.h
liblwgeom/lwgeom.c
liblwgeom/lwout_wkt.c

index 2b38fb4e1357f1e233d1cbaf862bb022739d0cd4..bd830b0437580a00ceebdc13e4e3aa422bde595d 100644 (file)
@@ -67,12 +67,15 @@ static void test_wkt_point(void)
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_ISO), "POINT(100 100)");
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_EXTENDED), "POINT(100 100)");
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_SFSQL), "POINT(100 100)");
-//     printf("%s\n",cu_wkt("POINT(100 100)",WKT_SFSQL));
 
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_ISO), "POINTZM(100.1 100 12 12)");
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_EXTENDED), "POINT(100.1 100 12 12)");
        CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_SFSQL), "POINT(100.1 100)");
 
+       CU_ASSERT_STRING_EQUAL(cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_SFSQL), "POINT(100.1 100)");
+       CU_ASSERT_STRING_EQUAL(cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_EXTENDED), "SRID=100;POINT(100.1 100 12 12)");
+//     printf("%s\n",cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_EXTENDED));
+
 }
 
 static void test_wkt_linestring(void) 
index 20035595b9fb4cac3584084bf2e4fd87397f6e45..8d84ca10a8a443cb13e8a24f626735580fdb3c1d 100644 (file)
@@ -1264,7 +1264,13 @@ extern int lwgeom_count_vertices(LWGEOM *geom);
 extern int32 lwgeom_npoints(uchar *serialized);
 
 /**
-* Return true of false depending on whether a geometry is an "empty"
+* Return true or false depending on whether a geometry has
+* a valid SRID set.
+*/
+extern int lwgeom_has_srid(const LWGEOM *geom);
+
+/**
+* Return true or false depending on whether a geometry is an "empty"
 * geometry (no vertices members)
 */
 extern int lwgeom_is_empty(const LWGEOM *geom);
index 93687c43d2e6718fbe65ca5750bff2da44ea4905..08f69193333e2e8748fcbab4df67e05f89e4a5a8 100644 (file)
@@ -1133,6 +1133,15 @@ int lwgeom_is_empty(const LWGEOM *geom)
        return result;
 }
 
+int lwgeom_has_srid(const LWGEOM *geom)
+{
+       if( (int)(geom->SRID) > 0 )
+               return LW_TRUE;
+       
+       return LW_FALSE;
+}
+
+
 static int lwcollection_dimensionality(LWCOLLECTION *col)
 {
        int i;
index 158a21621a0e5766b3e1c721b7ac797d1e2a9869..355021ebcf9290f591940c5eacde27c89e91b865 100644 (file)
@@ -529,6 +529,11 @@ char *lwgeom_to_wkt(const LWGEOM *geom, int precision, uchar variant)
        if( geom == NULL )
                return NULL;
        sb = stringbuffer_create();
+       /* Extended mode starts with an "SRID=" section for geoms that have one */
+       if( (variant & WKT_EXTENDED) && lwgeom_has_srid(geom) )
+       {
+               stringbuffer_vasbappend(sb, "SRID=%d;", geom->SRID);
+       }
        lwgeom_to_wkt_sb(geom, sb, precision, variant);
        if( stringbuffer_getstring(sb) == NULL )
        {