From 854e2947218b6b47d4d05d1924e3e7378368e473 Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Wed, 24 Feb 2010 14:40:17 +0000 Subject: [PATCH] Change dimensionality indicators to have spaces between type indicators for WKT_ISO output form. git-svn-id: http://svn.osgeo.org/postgis/trunk@5335 b70326c6-7e19-0410-871a-916f4a2858ee --- liblwgeom/cunit/cu_wkt.c | 95 +++++++++++++++++++++++----------------- liblwgeom/lwout_wkt.c | 2 + 2 files changed, 57 insertions(+), 40 deletions(-) diff --git a/liblwgeom/cunit/cu_wkt.c b/liblwgeom/cunit/cu_wkt.c index bd830b043..8b16f6a41 100644 --- a/liblwgeom/cunit/cu_wkt.c +++ b/liblwgeom/cunit/cu_wkt.c @@ -23,7 +23,6 @@ */ char *s; - /* ** The suite initialization function. ** Create any re-used objects. @@ -56,11 +55,11 @@ static char* cu_wkt(char *wkt, uchar variant) static void test_wkt_point(void) { - CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0.1111 0.1111 0.1111 0)",WKT_ISO), "POINTZM(0.1111 0.1111 0.1111 0)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0.1111 0.1111 0.1111 0)",WKT_ISO), "POINT ZM (0.1111 0.1111 0.1111 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0 0 0 0)",WKT_EXTENDED), "POINT(0 0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0 0 0 0)",WKT_SFSQL), "POINT(0 0)"); - CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_ISO), "POINTM(0 0 0)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_ISO), "POINT M (0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_EXTENDED), "POINTM(0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_SFSQL), "POINT(0 0)"); @@ -68,7 +67,7 @@ static void test_wkt_point(void) 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)"); - 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_ISO), "POINT ZM (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)"); @@ -80,105 +79,121 @@ static void test_wkt_point(void) static void test_wkt_linestring(void) { - CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3 4,5 6 7 8)",WKT_ISO), "LINESTRINGZM(1 2 3 4,5 6 7 8)"); - CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3,5 6 7)",WKT_ISO), "LINESTRINGZ(1 2 3,5 6 7)"); - CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRINGM(1 2 3,5 6 7)",WKT_ISO), "LINESTRINGM(1 2 3,5 6 7)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3 4,5 6 7 8)",WKT_ISO), "LINESTRING ZM (1 2 3 4,5 6 7 8)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3,5 6 7)",WKT_ISO), "LINESTRING Z (1 2 3,5 6 7)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRINGM(1 2 3,5 6 7)",WKT_ISO), "LINESTRING M (1 2 3,5 6 7)"); } static void test_wkt_polygon(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_ISO), - "POLYGONZ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))"); + cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_ISO), + "POLYGON Z ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_EXTENDED), - "POLYGON((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))"); + cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_EXTENDED), + "POLYGON((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))" + ); } static void test_wkt_multipoint(void) { - CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3 4,5 6 7 8)",WKT_ISO), "MULTIPOINTZM(1 2 3 4,5 6 7 8)"); - CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINTZ(1 2 3,5 6 7)"); - CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINTM(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINTM(1 2 3,5 6 7)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3 4,5 6 7 8)",WKT_ISO), "MULTIPOINT ZM (1 2 3 4,5 6 7 8)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINT Z (1 2 3,5 6 7)"); + CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINTM(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINT M (1 2 3,5 6 7)"); } static void test_wkt_multilinestring(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTILINESTRING((1 2 3 4,5 6 7 8))",WKT_ISO), - "MULTILINESTRINGZM((1 2 3 4,5 6 7 8))"); + cu_wkt("MULTILINESTRING((1 2 3 4,5 6 7 8))",WKT_ISO), + "MULTILINESTRING ZM ((1 2 3 4,5 6 7 8))" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTILINESTRING((1 2 3,5 6 7))",WKT_ISO), - "MULTILINESTRINGZ((1 2 3,5 6 7))"); + cu_wkt("MULTILINESTRING((1 2 3,5 6 7))",WKT_ISO), + "MULTILINESTRING Z ((1 2 3,5 6 7))" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTILINESTRINGM((1 2 3,5 6 7))",WKT_ISO), - "MULTILINESTRINGM((1 2 3,5 6 7))"); + cu_wkt("MULTILINESTRINGM((1 2 3,5 6 7))",WKT_ISO), + "MULTILINESTRING M ((1 2 3,5 6 7))" + ); } static void test_wkt_multipolygon(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_ISO), - "MULTIPOLYGONZ(((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))"); + cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_ISO), + "MULTIPOLYGON Z (((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_EXTENDED), - "MULTIPOLYGON(((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))"); + cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_EXTENDED), + "MULTIPOLYGON(((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))" + ); } static void test_wkt_collection(void) { //printf("%s\n",cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO)); CU_ASSERT_STRING_EQUAL( - cu_wkt("GEOMETRYCOLLECTION(POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)),POINT(.5 .5 .5),CIRCULARSTRING(.8 .8 .8,.8 .8 .8,.8 .8 .8))",WKT_ISO), - "GEOMETRYCOLLECTIONZ(POLYGONZ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)),POINTZ(0.5 0.5 0.5),CIRCULARSTRINGZ(0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8))"); + cu_wkt("GEOMETRYCOLLECTION(POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)),POINT(.5 .5 .5),CIRCULARSTRING(.8 .8 .8,.8 .8 .8,.8 .8 .8))",WKT_ISO), + "GEOMETRYCOLLECTION Z (POLYGON Z ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)),POINT Z (0.5 0.5 0.5),CIRCULARSTRING Z (0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8))" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO), - "GEOMETRYCOLLECTIONZ(MULTIPOLYGONZ(((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))),MULTIPOINTZ(0.5 0.5 0.5,1 1 1),CURVEPOLYGONZ((0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8)))"); + cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO), + "GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))),MULTIPOINT Z (0.5 0.5 0.5,1 1 1),CURVEPOLYGON Z ((0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8)))" + ); } static void test_wkt_circularstring(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_ISO), - "CIRCULARSTRINGZM(1 2 3 4,4 5 6 7,7 8 9 0)"); + cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_ISO), + "CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0)" + ); CU_ASSERT_STRING_EQUAL( - cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_EXTENDED), - "CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)"); + cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_EXTENDED), + "CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)" + ); //printf("%s\n",cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO)); } static void test_wkt_compoundcurve(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("COMPOUNDCURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), - "COMPOUNDCURVEZM((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRINGZM(1 2 3 4,4 5 6 7,7 8 9 0))"); + cu_wkt("COMPOUNDCURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), + "COMPOUNDCURVE ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0))" + ); } static void test_wkt_curvpolygon(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), - "CURVEPOLYGONZM((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRINGZM(1 2 3 4,4 5 6 7,7 8 9 0))"); + cu_wkt("CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), + "CURVEPOLYGON ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0))" + ); } static void test_wkt_multicurve(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTICURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), - "MULTICURVEZM((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRINGZM(1 2 3 4,4 5 6 7,7 8 9 0))"); + cu_wkt("MULTICURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), + "MULTICURVE ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0))" + ); } static void test_wkt_multisurface(void) { CU_ASSERT_STRING_EQUAL( - cu_wkt("MULTISURFACE(((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0)))",WKT_ISO), - "MULTISURFACEZM(((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGONZM((1 2 3 4,4 5 6 7,7 8 9 0)))"); + cu_wkt("MULTISURFACE(((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0)))",WKT_ISO), + "MULTISURFACE ZM (((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGON ZM ((1 2 3 4,4 5 6 7,7 8 9 0)))" + ); } /* ** Used by test harness to register the tests in this file. */ + CU_TestInfo wkt_tests[] = { PG_TEST(test_wkt_point), PG_TEST(test_wkt_linestring), diff --git a/liblwgeom/lwout_wkt.c b/liblwgeom/lwout_wkt.c index 355021ebc..102831c26 100644 --- a/liblwgeom/lwout_wkt.c +++ b/liblwgeom/lwout_wkt.c @@ -33,10 +33,12 @@ static void dimension_qualifiers_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *s /* ISO WKT: POINT ZM (0 0 0 0) */ if( (variant & WKT_ISO) && (TYPE_NDIMS(geom->type) > 2) ) { + stringbuffer_append(sb, " "); if( TYPE_HASZ(geom->type) ) stringbuffer_append(sb, "Z"); if( TYPE_HASM(geom->type) ) stringbuffer_append(sb, "M"); + stringbuffer_append(sb, " "); } } -- 2.40.0