diff --git a/python/core/geometry/qgscurvev2.sip b/python/core/geometry/qgscurvev2.sip index f503a5901b0..7de886d780f 100644 --- a/python/core/geometry/qgscurvev2.sip +++ b/python/core/geometry/qgscurvev2.sip @@ -17,7 +17,6 @@ class QgsCurveV2: public QgsAbstractGeometryV2 virtual void points( QList& pt ) const = 0; virtual int numPoints() const = 0; - virtual double area() const; virtual void sumUpArea( double& sum ) const = 0; virtual void coordinateSequence( QList< QList< QList< QgsPointV2 > > >& coord /Out/ ) const; diff --git a/src/core/geometry/qgscompoundcurvev2.cpp b/src/core/geometry/qgscompoundcurvev2.cpp index c69a83ba9fb..de6c9bd7573 100644 --- a/src/core/geometry/qgscompoundcurvev2.cpp +++ b/src/core/geometry/qgscompoundcurvev2.cpp @@ -161,6 +161,23 @@ bool QgsCompoundCurveV2::fromWkt( const QString& wkt ) return false; } } + + //scan through curves and check if dimensionality of curves is different to compound curve. + //if so, update the type dimensionality of the compound curve to match + bool hasZ = false; + bool hasM = false; + Q_FOREACH ( const QgsCurveV2* curve, mCurves ) + { + hasZ = hasZ || curve->is3D(); + hasM = hasM || curve->isMeasure(); + if ( hasZ && hasM ) + break; + } + if ( hasZ ) + addZValue( 0 ); + if ( hasM ) + addMValue( 0 ); + return true; } diff --git a/src/core/geometry/qgscurvepolygonv2.cpp b/src/core/geometry/qgscurvepolygonv2.cpp index 581826c4445..6dd222885f7 100644 --- a/src/core/geometry/qgscurvepolygonv2.cpp +++ b/src/core/geometry/qgscurvepolygonv2.cpp @@ -176,6 +176,27 @@ bool QgsCurvePolygonV2::fromWkt( const QString& wkt ) mExteriorRing = mInteriorRings.first(); mInteriorRings.removeFirst(); + //scan through rings and check if dimensionality of rings is different to CurvePolygon. + //if so, update the type dimensionality of the CurvePolygon to match + bool hasZ = false; + bool hasM = false; + if ( mExteriorRing ) + { + hasZ = hasZ || mExteriorRing->is3D(); + hasM = hasM || mExteriorRing->isMeasure(); + } + Q_FOREACH ( const QgsCurveV2* curve, mInteriorRings ) + { + hasZ = hasZ || curve->is3D(); + hasM = hasM || curve->isMeasure(); + if ( hasZ && hasM ) + break; + } + if ( hasZ ) + addZValue( 0 ); + if ( hasM ) + addMValue( 0 ); + return true; } @@ -327,13 +348,26 @@ double QgsCurvePolygonV2::area() const return 0.0; } - double area = mExteriorRing->area(); + double totalArea = 0.0; + + if ( mExteriorRing->isClosed() ) + { + double area = 0.0; + mExteriorRing->sumUpArea( area ); + totalArea += qAbs( area ); + } + QList::const_iterator ringIt = mInteriorRings.constBegin(); for ( ; ringIt != mInteriorRings.constEnd(); ++ringIt ) { - area -= ( *ringIt )->area(); + double area = 0.0; + if (( *ringIt )->isClosed() ) + { + ( *ringIt )->sumUpArea( area ); + totalArea -= qAbs( area ); + } } - return area; + return totalArea; } double QgsCurvePolygonV2::perimeter() const diff --git a/src/core/geometry/qgscurvev2.cpp b/src/core/geometry/qgscurvev2.cpp index 28217651c19..a7fa759f344 100644 --- a/src/core/geometry/qgscurvev2.cpp +++ b/src/core/geometry/qgscurvev2.cpp @@ -26,7 +26,15 @@ QgsCurveV2::~QgsCurveV2() bool QgsCurveV2::isClosed() const { - return ( numPoints() > 0 && ( startPoint() == endPoint() ) ); + if ( numPoints() == 0 ) + return false; + + //don't consider M-coordinates when testing closedness + QgsPointV2 start = startPoint(); + QgsPointV2 end = endPoint(); + return ( qgsDoubleNear( start.x(), end.x(), 1E-8 ) && + qgsDoubleNear( start.y(), end.y(), 1E-8 ) && + qgsDoubleNear( start.z(), end.z(), 1E-8 ) ); } bool QgsCurveV2::isRing() const @@ -69,18 +77,6 @@ bool QgsCurveV2::nextVertex( QgsVertexId& id, QgsPointV2& vertex ) const return pointAt( id.vertex, vertex, id.type ); } -double QgsCurveV2::area() const -{ - if ( !isClosed() ) - { - return 0.0; - } - - double area = 0.0; - sumUpArea( area ); - return qAbs( area ); -} - QgsAbstractGeometryV2* QgsCurveV2::segmentize() const { return curveToLine(); diff --git a/src/core/geometry/qgscurvev2.h b/src/core/geometry/qgscurvev2.h index c6c15d2ba8c..4639a5b81c4 100644 --- a/src/core/geometry/qgscurvev2.h +++ b/src/core/geometry/qgscurvev2.h @@ -75,8 +75,6 @@ class CORE_EXPORT QgsCurveV2: public QgsAbstractGeometryV2 */ virtual int numPoints() const = 0; - virtual double area() const override; - /** Calculates the area of the curve. Derived classes should override this * to return the correct area of the curve. */ diff --git a/src/core/geometry/qgsgeometrycollectionv2.cpp b/src/core/geometry/qgsgeometrycollectionv2.cpp index 18827f2382b..3d5bce8e78a 100644 --- a/src/core/geometry/qgsgeometrycollectionv2.cpp +++ b/src/core/geometry/qgsgeometrycollectionv2.cpp @@ -502,6 +502,23 @@ bool QgsGeometryCollectionV2::fromCollectionWkt( const QString &wkt, const QList } } qDeleteAll( subtypes ); + + //scan through geometries and check if dimensionality of geometries is different to collection. + //if so, update the type dimensionality of the collection to match + bool hasZ = false; + bool hasM = false; + Q_FOREACH ( QgsAbstractGeometryV2* geom, mGeometries ) + { + hasZ = hasZ || geom->is3D(); + hasM = hasM || geom->isMeasure(); + if ( hasZ && hasM ) + break; + } + if ( hasZ ) + addZValue( 0 ); + if ( hasM ) + addMValue( 0 ); + return true; } diff --git a/src/core/geometry/qgsgeometryfactory.cpp b/src/core/geometry/qgsgeometryfactory.cpp index 9b7a95c04bc..1abdfb6aaca 100644 --- a/src/core/geometry/qgsgeometryfactory.cpp +++ b/src/core/geometry/qgsgeometryfactory.cpp @@ -61,7 +61,7 @@ QgsAbstractGeometryV2* QgsGeometryFactory::geomFromWkt( const QString& text ) { geom = new QgsLineStringV2(); } - else if ( text .startsWith( "CircularString", Qt::CaseInsensitive ) ) + else if ( text.startsWith( "CircularString", Qt::CaseInsensitive ) ) { geom = new QgsCircularStringV2(); } diff --git a/src/core/geometry/qgsgeometryutils.cpp b/src/core/geometry/qgsgeometryutils.cpp index 8c29b22212a..eea25daafb0 100644 --- a/src/core/geometry/qgsgeometryutils.cpp +++ b/src/core/geometry/qgsgeometryutils.cpp @@ -464,7 +464,30 @@ QList QgsGeometryUtils::pointsFromWKT( const QString &wktCoordinateL { int dim = 2 + is3D + isMeasure; QList points; - Q_FOREACH ( const QString& pointCoordinates, wktCoordinateList.split( ",", QString::SkipEmptyParts ) ) + QStringList coordList = wktCoordinateList.split( ",", QString::SkipEmptyParts ); + + //first scan through for extra unexpected dimensions + bool foundZ = false; + bool foundM = false; + Q_FOREACH ( const QString& pointCoordinates, coordList ) + { + QStringList coordinates = pointCoordinates.split( " ", QString::SkipEmptyParts ); + if ( coordinates.size() == 3 && !foundZ && !foundM && !is3D && !isMeasure ) + { + // 3 dimensional coordinates, but not specifically marked as such. We allow this + // anyway and upgrade geometry to have Z dimension + foundZ = true; + } + else if ( coordinates.size() >= 4 && ( !( is3D || foundZ ) || !( isMeasure || foundM ) ) ) + { + // 4 (or more) dimensional coordinates, but not specifically marked as such. We allow this + // anyway and upgrade geometry to have Z&M dimensions + foundZ = true; + foundM = true; + } + } + + Q_FOREACH ( const QString& pointCoordinates, coordList ) { QStringList coordinates = pointCoordinates.split( " ", QString::SkipEmptyParts ); if ( coordinates.size() < dim ) @@ -474,20 +497,25 @@ QList QgsGeometryUtils::pointsFromWKT( const QString &wktCoordinateL double x = coordinates[idx++].toDouble(); double y = coordinates[idx++].toDouble(); - double z = is3D ? coordinates[idx++].toDouble() : 0.; - double m = isMeasure ? coordinates[idx++].toDouble() : 0.; + double z = 0; + if (( is3D || foundZ ) && coordinates.length() >= idx ) + z = coordinates[idx++].toDouble(); + + double m = 0; + if (( isMeasure || foundM ) && coordinates.length() >= idx ) + m = coordinates[idx++].toDouble(); QgsWKBTypes::Type t = QgsWKBTypes::Point; - if ( is3D ) + if ( is3D || foundZ ) { - if ( isMeasure ) + if ( isMeasure || foundM ) t = QgsWKBTypes::PointZM; else t = QgsWKBTypes::PointZ; } else { - if ( isMeasure ) + if ( isMeasure || foundM ) t = QgsWKBTypes::PointM; else t = QgsWKBTypes::Point; @@ -495,6 +523,7 @@ QList QgsGeometryUtils::pointsFromWKT( const QString &wktCoordinateL points.append( QgsPointV2( t, x, y, z, m ) ); } + return points; } diff --git a/src/core/geometry/qgspointv2.cpp b/src/core/geometry/qgspointv2.cpp index c6e170d1637..699e69e2d34 100644 --- a/src/core/geometry/qgspointv2.cpp +++ b/src/core/geometry/qgspointv2.cpp @@ -94,6 +94,19 @@ bool QgsPointV2::fromWkt( const QString& wkt ) clear(); return false; } + else if ( coordinates.size() == 3 && !is3D() && !isMeasure() ) + { + // 3 dimensional coordinates, but not specifically marked as such. We allow this + // anyway and upgrade geometry to have Z dimension + mWkbType = QgsWKBTypes::addZ( mWkbType ); + } + else if ( coordinates.size() >= 4 && ( !is3D() || !isMeasure() ) ) + { + // 4 (or more) dimensional coordinates, but not specifically marked as such. We allow this + // anyway and upgrade geometry to have Z&M dimensions + mWkbType = QgsWKBTypes::addZ( mWkbType ); + mWkbType = QgsWKBTypes::addM( mWkbType ); + } int idx = 0; mX = coordinates[idx++].toDouble(); diff --git a/tests/src/python/test_qgsgeometry.py b/tests/src/python/test_qgsgeometry.py index 2435b99a950..2751a676318 100644 --- a/tests/src/python/test_qgsgeometry.py +++ b/tests/src/python/test_qgsgeometry.py @@ -134,7 +134,7 @@ class TestQgsGeometry(TestCase): #test exporting to WKT results in expected string result = geom.exportToWkt() exp = row['valid_wkt'] - assert compareWkt(result, exp), "WKT conversion {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, exp, result) + assert compareWkt(result, exp, 0.000001), "WKT conversion {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, exp, result) #test num points in geometry exp_nodes = int(row['num_points']) @@ -149,13 +149,20 @@ class TestQgsGeometry(TestCase): assert exp_geometries <= 1, "Geometry count {}: Expected:\n{} geometries but could not call numGeometries()\n".format(i + 1, exp_geometries) #test count of rings - if row['num_rings']: - exp_rings = int(row['num_rings']) - try: - assert geom.geometry().numInteriorRings() == exp_geometries, "Ring count {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, exp_geometries, geom.geometry().numInteriorRings()) - except: - #some geometry types don't have numInteriorRings() - assert exp_geometries <= 1, "Ring count {}: Expected:\n{} rings but could not call numInteriorRings()\n".format(i + 1, exp_geometries) + exp_rings = int(row['num_rings']) + try: + assert geom.geometry().numInteriorRings() == exp_rings, "Ring count {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, exp_rings, geom.geometry().numInteriorRings()) + except: + #some geometry types don't have numInteriorRings() + assert exp_rings <= 1, "Ring count {}: Expected:\n{} rings but could not call numInteriorRings()\n{}".format(i + 1, exp_rings, geom.geometry()) + + #test isClosed + exp = (row['is_closed'] == '1') + try: + assert geom.geometry().isClosed() == exp, "isClosed {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, True, geom.geometry().isClosed()) + except: + #some geometry types don't have isClosed() + assert not exp, "isClosed {}: Expected:\n isClosed() but could not call isClosed()\n".format(i + 1) #test geometry centroid exp = row['centroid'] @@ -186,7 +193,7 @@ class TestQgsGeometry(TestCase): exp = float(row['length']) result = geom.geometry().length() assert doubleNear(result, exp, 0.00001), "Length {}: mismatch Expected:\n{}\nGot:\n{}\n".format(i + 1, exp, result) - + #test perimeter calculation exp = float(row['perimeter']) result = geom.geometry().perimeter() @@ -1512,7 +1519,7 @@ class TestQgsGeometry(TestCase): p = QgsGeometry.fromWkt('Polygon((0 0 0, 0 1 0, 1 1 0, 0 0 0 ))') assert p is not None - expWkt = 'Polygon ((0 0, 0 1, 1 1, 0 0))' + expWkt = 'PolygonZ ((0 0 0, 0 1 0, 1 1 0, 0 0 0 ))' wkt = p.exportToWkt() assert compareWkt(expWkt, wkt), "testRegression13055 failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt) diff --git a/tests/src/python/utilities.py b/tests/src/python/utilities.py index 6dfa0b4db6d..fe182241dd4 100644 --- a/tests/src/python/utilities.py +++ b/tests/src/python/utilities.py @@ -226,16 +226,14 @@ def compareWkt(a, b, tol=0.000001): a0 = r.sub(r'\1', a0) b0 = r.sub(r'\1', b0) - #ignore the z/m flag on GeometryCollections - #NOTE - I'm not sure about this, possibly the flag is required and there's a bug in QGIS omitting this - r = re.compile("geometrycollection\s*[zm]*") - a0 = r.sub('geometrycollection', a0) - b0 = r.sub('geometrycollection', b0) - #spaces before brackets are optional - r = re.compile("\s*\(") + r = re.compile("\s*\(\s*") a0 = r.sub('(', a0) b0 = r.sub('(', b0) + #spaces after brackets are optional + r = re.compile("\s*\)\s*") + a0 = r.sub(')', a0) + b0 = r.sub(')', b0) # compare the structure r0 = re.compile("-?\d+(?:\.\d+)?(?:[eE]\d+)?") diff --git a/tests/testdata/geom_data.csv b/tests/testdata/geom_data.csv index ca9e84301f8..3c5f9733aa6 100644 --- a/tests/testdata/geom_data.csv +++ b/tests/testdata/geom_data.csv @@ -1,71 +1,115 @@ -"wkt","valid_wkt","num_points","length","area","perimeter","num_geometries","num_rings","centroid","x_min","y_min","x_max","y_max" -"MultiPointZ (1 2 0, 1 2 3, 4 5 0, 6 7 8)","MULTIPOINT Z ((1 2 0),(1 2 3),(4 5 0),(6 7 8))",4,0,0,0,4,,"POINT(3 4)",1,2,6,7 -"MultiPoint Z (1 2 3)","MULTIPOINT Z ((1 2 3))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (GeometryCollection (Point (1 1)))","GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1)))",1,0,0,0,1,,"POINT(1 1)",1,1,1,1 -"GeometryCollection (LineString (0 0, 1 1, 2 2, 3 3 , 4 4))","GEOMETRYCOLLECTION(LINESTRING(0 0,1 1,2 2,3 3,4 4))",5,5.65685424949238,0,0,1,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (LineStringZ (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (LINESTRING Z (0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),POINT Z (1 2 3))",6,5.65685424949238,0,0,2,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","GEOMETRYCOLLECTION Z (LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",5,16.9705627484771,0,0,1,,"POINT(7 8)",1,2,13,14 -"GeometryCollection (MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4)))","GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,2 2,3 3,4 4)))",5,5.65685424949238,0,0,1,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (MultiLineStringM ((0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0)),PointM (1 2 3))","GEOMETRYCOLLECTION M (MULTILINESTRING M ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)),POINT M (1 2 3))",6,5.65685424949238,0,0,2,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (MultiLineStringZ ((1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0)))","GEOMETRYCOLLECTION Z (MULTILINESTRING Z ((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)))",15,28.2842712474619,0,0,1,,"POINT(5 5.6)",0,0,13,14 -"GeometryCollection (MultiPoint ((1 2)))","GEOMETRYCOLLECTION(MULTIPOINT((1 2)))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (MultiPoint (1 2))","GEOMETRYCOLLECTION(MULTIPOINT((1 2)))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (MultiPointM ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))","GEOMETRYCOLLECTION M (MULTIPOINT M ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))",4,0,0,0,1,,"POINT(6.25 7.25)",1,2,11,12 -"GeometryCollection (MultiPointZ ((1 2 0),(3 4 0),(5 6 0)),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (MULTIPOINT Z ((1 2 0),(3 4 0),(5 6 0)),POINT Z (1 2 3))",4,0,0,0,2,,"POINT(2.5 3.5)",1,2,5,6 -"GeometryCollection (MultiPointZ ((1 2 3)))","GEOMETRYCOLLECTION Z (MULTIPOINT Z ((1 2 3)))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))))","GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))))",30,0,291,140,1,,"POINT(4.98453608247423 4.98453608247423)",0,0,10,10 -"GeometryCollection (MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))),MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)),MultiPointZ ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))","GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))),MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)),MULTIPOINT Z ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))",49,28.2842712474619,291,140,3,,"POINT(4.98453608247423 4.98453608247423)",0,0,13,14 -"GeometryCollection (Point (10 10),Point (30 30),LineString (15 15, 20 20))","GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))",4,7.07106781186548,0,0,3,,"POINT(17.5 17.5)",10,10,30,30 -"GeometryCollection (Point (1 2))","GEOMETRYCOLLECTION(POINT(1 2))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (Point (1 2),LineString (0 0, 1 1, 2 2, 3 3 , 4 4))","GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,1 1,2 2,3 3,4 4))",6,5.65685424949238,0,0,2,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (PointM (1 2 0),PointM (1 2 3),PolygonM ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","GEOMETRYCOLLECTION M (POINT M (1 2 0),POINT M (1 2 3),POLYGON M ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))",17,0,95,52,3,,"POINT(4.99473684210526 4.99473684210526)",0,0,10,10 -"GeometryCollection (PointM (1 2 3), MultiPolygonM (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))))","GEOMETRYCOLLECTION M (POINT M (1 2 3),MULTIPOLYGON M (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))))",31,0,291,140,2,,"POINT(4.98453608247423 4.98453608247423)",0,0,10,10 -"GeometryCollection (PointZ (1 2 0),MultiPointZ (1 2 3))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),MULTIPOINT Z ((1 2 3)))",2,0,0,0,2,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),POINT Z (1 2 3))",2,0,0,0,2,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3),LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),POINT Z (1 2 3),LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",7,16.9705627484771,0,0,3,,"POINT(7 8)",1,2,13,14 -"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3),LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),PolygonZ ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),POINT Z (1 2 3),LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)))",12,16.9705627484771,100,40,4,,"POINT(5 5)",0,0,13,14 -"GeometryCollection (PointZ (1 2 3))","GEOMETRYCOLLECTION Z (POINT Z (1 2 3))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"GeometryCollection (PointZ (1 2 3),MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0)))","GEOMETRYCOLLECTION Z (POINT Z (1 2 3),MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)))",6,5.65685424949238,0,0,2,,"POINT(2 2)",0,0,4,4 -"GeometryCollection (PolygonZ ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1)))","GEOMETRYCOLLECTION Z (POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1)))",10,0,96,48,1,,"POINT(4.95833333333333 4.95833333333333)",0,0,10,10 -"LineString (0 0, 10 10, 20 0)","LINESTRING(0 0,10 10,20 0)",3,28.2842712474619,0,0,1,,"POINT(10 5)",0,0,20,10 -"LineString (0 0, 1 1, 2 2, 3 3 , 4 4)","LINESTRING(0 0,1 1,2 2,3 3,4 4)",5,5.65685424949238,0,0,1,,"POINT(2 2)",0,0,4,4 -"LineString (0 0,3 4)","LINESTRING(0 0,3 4)",2,5,0,0,1,,"POINT(1.5 2)",0,0,3,4 -"LineString (0 0,3 4,4 3)","LINESTRING(0 0,3 4,4 3)",3,6.41421356237309,0,0,1,,"POINT(1.94096241842308 2.33072181381731)",0,0,4,4 -"LineString(1 2,2 3,3 4)","LINESTRING(1 2,2 3,3 4)",3,2.82842712474619,0,0,1,,"POINT(2 3)",1,2,3,4 -"LineString M (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)","LINESTRING M (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)",5,16.9705627484771,0,0,1,,"POINT(7 8)",1,2,13,14 -"LineStringZ (0 0 0 , 1 1 1 , 2 2 2 , 3 3 3, 4 4 4)","LINESTRING Z (0 0 0,1 1 1,2 2 2,3 3 3,4 4 4)",5,5.65685424949238,0,0,1,,"POINT(2 2)",0,0,4,4 -"MultiLineString ((0 0, 1 0, 1 1, 2 1, 2 0), (3 1, 5 1, 5 0, 6 0))","MULTILINESTRING((0 0,1 0,1 1,2 1,2 0),(3 1,5 1,5 0,6 0))",9,8,0,0,2,,"POINT(2.9375 0.5625)",0,0,6,1 -"MultiLineString((0 0, 1 1),(0 0, 1 1, 2 2) )","MULTILINESTRING((0 0,1 1),(0 0,1 1,2 2))",5,4.24264068711929,0,0,2,,"POINT(0.833333333333333 0.833333333333333)",0,0,2,2 -"MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4))","MULTILINESTRING((0 0,1 1,2 2,3 3,4 4))",5,5.65685424949238,0,0,1,,"POINT(2 2)",0,0,4,4 -"MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4),(0 0, 1 1, 2 2, 3 3 , 4 4))","MULTILINESTRING((0 0,1 1,2 2,3 3,4 4),(0 0,1 1,2 2,3 3,4 4))",10,11.3137084989848,0,0,2,,"POINT(2 2)",0,0,4,4 -"MultiLineStringM ((1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0))","MULTILINESTRING M ((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))",15,28.2842712474619,0,0,3,,"POINT(5 5.6)",0,0,13,14 -"MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",15,28.2842712474619,0,0,3,,"POINT(5 5.6)",0,0,13,14 -"MultiPoint ((10 30),(40 20),(30 10),(20 10))","MULTIPOINT((10 30),(40 20),(30 10),(20 10))",4,0,0,0,4,,"POINT(25 17.5)",10,10,40,30 -"MultiPoint ((1 2),(2 3))","MULTIPOINT((1 2),(2 3))",2,0,0,0,2,,"POINT(1.5 2.5)",1,2,2,3 -"MultiPoint (1 2, 3 4, 5 6)","MULTIPOINT((1 2),(3 4),(5 6))",3,0,0,0,3,,"POINT(3 4)",1,2,5,6 -"MultiPoint (1 2)","MULTIPOINT((1 2))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"MultiPointM (1 2 3,4 5 0)","MULTIPOINT M ((1 2 3),(4 5 0))",2,0,0,0,2,,"POINT(2.5 3.5)",1,2,4,5 -"MultiPointZ ((-1 -2 -3),(5.4 6.6 7.77),(-5.4 -6.6 -7.77),(1000000 0.000001 -1000000),(-0.0000013 -0.000014 0))","MULTIPOINT Z ((-1 -2 -3),(5.4 6.6 7.77),(-5.4 -6.6 -7.77),(1000000 0.000001 -1000000),(-0.0000013 -0.000014 0))",5,0,0,0,5,,"POINT(199999.79999974 -0.4000026)",-5.4,-6.6,1000000,6.6 -"MultiPointZ (1 2 3, 5 6 7, 8 9 10, 11 12 13)","MULTIPOINT Z ((1 2 3),(5 6 7),(8 9 10),(11 12 13))",4,0,0,0,4,,"POINT(6.25 7.25)",1,2,11,12 -"MultiPointZ (1 2 3)","MULTIPOINT Z ((1 2 3))",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"MultiPolygon (((0 0, 10 0, 10 10, 0 10, 0 0)))","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",5,0,100,40,1,,"POINT(5 5)",0,0,10,10 -"MultiPolygon (((0 0, 10 0, 10 10, 0 10, 0 0)),((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5)))","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)))",15,0,196,88,2,,"POINT(4.97959183673469 4.97959183673469)",0,0,10,10 -"MultiPolygon( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1)))",30,0,291,140,3,,"POINT(4.98453608247423 4.98453608247423)",0,0,10,10 -"MultiPolygon (((0 0, 1 0, 1 1, 2 1, 2 2, 0 2, 0 0)),((4 0, 5 0, 5 2, 3 2, 3 1, 4 1, 4 0)))","MULTIPOLYGON(((0 0,1 0,1 1,2 1,2 2,0 2,0 0)),((4 0,5 0,5 2,3 2,3 1,4 1,4 0)))",14,0,6,16,2,,"POINT(2.5 1.16666666666667)",0,0,5,2 -"MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))",30,0,291,140,3,,"POINT(4.98453608247423 4.98453608247423)",0,0,10,10 -"Point (1 2)","POINT(1 2)",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"Point(1 2)","POINT(1 2)",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"PointZ (1 2 3)","POINT Z (1 2 3)",1,0,0,0,1,,"POINT(1 2)",1,2,1,2 -"Polygon ((0 0,0 7,4 2,2 0,0 0))","POLYGON((0 0,0 7,4 2,2 0,0 0))",5,0,16,18.231551362179,1,0,"POINT(1.41666666666667 2.70833333333333)",0,0,4,7 -"Polygon ((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))","POLYGON((0 0,0 7,4 2,2 0,0 0),(1 1,2 1,2 2,1 2,1 1))",10,0,15,22.231551362179,1,1,"POINT(1.41111111111111 2.78888888888889)",0,0,4,7 -"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0))","POLYGON((0 0,10 0,10 10,0 10,0 0))",5,0,100,40,1,0,"POINT(5 5)",0,0,10,10 -"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5))","POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))",10,0,96,48,1,1,"POINT(4.95833333333333 4.95833333333333)",0,0,10,10 -"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1))","POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1))",15,0,95,52,1,2,"POINT(4.99473684210526 4.99473684210526)",0,0,10,10 -"Polygon ((1 1,2 2,3 1,2 0,1 1))","POLYGON((1 1,2 2,3 1,2 0,1 1))",5,0,2,5.65685424949238,1,0,"POINT(2 1)",1,0,3,2 -"Polygon ((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))","POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))",9,0,338587368000,2687641.02107292,1,0,"POINT(1592016.64149202 583949.860499226)",1200000,192000,1872000,863880 -"Polygon ((60 180, 140 120, 100 180, 140 240, 140 240, 60 180))","POLYGON((60 180,140 120,100 180,140 240,140 240,60 180))",6,0,2400,344.22205101856,1,0,"POINT(100 180)",60,120,140,240 -"Polygon ((60 180, 140 120, 100 180, 140 240, 60 180))","POLYGON((60 180,140 120,100 180,140 240,60 180))",5,0,2400,344.22205101856,1,0,"POINT(100 180)",60,120,140,240 -"Polygon ((60 180, 140 240, 140 240, 140 240, 200 180, 120 120, 60 180))","POLYGON((60 180,140 240,140 240,140 240,200 180,120 120,60 180))",7,0,8400,369.705627484771,1,0,"POINT(130 180)",60,120,200,240 -"PolygonM ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))","POLYGON M ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))",15,0,95,52,1,2,"POINT(4.99473684210526 4.99473684210526)",0,0,10,10 -"PolygonZ ((0 0 1 , 10 0 1, 10 10 1, 0 10 1, 0 0 1))","POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1))",5,0,100,40,1,0,"POINT(5 5)",0,0,10,10 -"PolygonZ ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1))","POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1))",10,0,96,48,1,1,"POINT(4.95833333333333 4.95833333333333)",0,0,10,10 +wkt,valid_wkt,num_points,length,area,perimeter,num_geometries,num_rings,is_closed,centroid,x_min,y_min,x_max,y_max,notes +"CIRCULARSTRING(268 415,227 505,227 406)","CIRCULARSTRING(268 415,227 505,227 406)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327, +"CIRCULARSTRINGZ(268 415 1,227 505 2,227 406 3)","CIRCULARSTRINGZ(268 415 1,227 505 2,227 406 3)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327, +"CIRCULARSTRINGM(268 415 4,227 505 5,227 406 6)","CIRCULARSTRINGM(268 415 4,227 505 5,227 406 6)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327, +"CIRCULARSTRINGZM(268 415 1 6,227 505 2 8,227 406 3 9)","CIRCULARSTRINGZM(268 415 1 6,227 505 2 8,227 406 3 9)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327, +"CIRCULARSTRING(268 415 1,227 505 2,227 406 3)","CIRCULARSTRINGZ(268 415 1,227 505 2,227 406 3)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"CIRCULARSTRING(268 415 1 6,227 505 2 8,227 406 3 9)","CIRCULARSTRINGZM(268 415 1 6,227 505 2 8,227 406 3 9)",3,274.8154245399,0,0,1,0,0,Point (235.96400242068907005 463.05287766717373188),186.9951218925,406,288.2487805466,506.126829327,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +"COMPOUNDCURVE((5 3, 5 13), CIRCULARSTRING(5 13, 7 15, 9 13), (9 13, 9 3), CIRCULARSTRING(9 3, 7 1, 5 3))","COMPOUNDCURVE((5 3, 5 13), CIRCULARSTRING(5 13, 7 15, 9 13), (9 13, 9 3), CIRCULARSTRING(9 3, 7 1, 5 3))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,Unsure about accuracy of numpoints – PostGIS reports 10 for same geometry +"COMPOUNDCURVEZ((5 3 1, 5 13 2), CIRCULARSTRINGZ(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRINGZ(9 3 5, 7 1 6, 5 3 1))","COMPOUNDCURVEZ((5 3 1, 5 13 2), CIRCULARSTRINGZ(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRINGZ(9 3 5, 7 1 6, 5 3 1))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,Unsure about accuracy of numpoints – PostGIS reports 10 for same geometry +"COMPOUNDCURVEM((5 3 1, 5 13 2), CIRCULARSTRINGM(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRINGM(9 3 5, 7 1 6, 5 3 1))","COMPOUNDCURVEM((5 3 1, 5 13 2), CIRCULARSTRINGM(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRINGM(9 3 5, 7 1 6, 5 3 1))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,Unsure about accuracy of numpoints – PostGIS reports 10 for same geometry +"COMPOUNDCURVEZM((5 3 1 11, 5 13 2 12), CIRCULARSTRINGZM(5 13 2 12, 7 15 3 13, 9 13 4 14), (9 13 4 14, 9 3 5 15), CIRCULARSTRINGZM(9 3 5 15, 7 1 6 16, 5 3 1 11))","COMPOUNDCURVEZM((5 3 1 11, 5 13 2 12), CIRCULARSTRINGZM(5 13 2 12, 7 15 3 13, 9 13 4 14), (9 13 4 14, 9 3 5 15), CIRCULARSTRINGZM(9 3 5 15, 7 1 6 16, 5 3 1 11))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,Unsure about accuracy of numpoints – PostGIS reports 10 for same geometry +"COMPOUNDCURVE((5 3 1, 5 13 2), CIRCULARSTRING(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRING(9 3 5, 7 1 6, 5 3 1))","COMPOUNDCURVEZ((5 3 1, 5 13 2), CIRCULARSTRINGZ(5 13 2, 7 15 3, 9 13 4), (9 13 4, 9 3 5), CIRCULARSTRINGZ(9 3 5, 7 1 6, 5 3 1))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"COMPOUNDCURVE((5 3 1 11, 5 13 2 12), CIRCULARSTRING(5 13 2 12, 7 15 3 13, 9 13 4 14), (9 13 4 14, 9 3 5 15), CIRCULARSTRING(9 3 5 15, 7 1 6 16, 5 3 1 11))","COMPOUNDCURVEZM((5 3 1 11, 5 13 2 12), CIRCULARSTRINGZM(5 13 2 12, 7 15 3 13, 9 13 4 14), (9 13 4 14, 9 3 5 15), CIRCULARSTRINGZM(9 3 5 15, 7 1 6 16, 5 3 1 11))",7,32.5663706144,0,0,1,0,1,POINT(7 8),5,1,9,15,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +"CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))","CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7, +"CURVEPOLYGONZ(CIRCULARSTRINGZ(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))","CURVEPOLYGONZ(CIRCULARSTRINGZ(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7, +"CURVEPOLYGONM(CIRCULARSTRINGM(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))","CURVEPOLYGONM(CIRCULARSTRINGM(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7, +"CURVEPOLYGONZM(CIRCULARSTRINGZM(1 3 1 11, 3 5 2 12, 4 7 3 13, 7 3 4 14, 1 3 1 11))","CURVEPOLYGONZM(CIRCULARSTRINGZM(1 3 1 11, 3 5 2 12, 4 7 3 13, 7 3 4 14, 1 3 1 11))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7, +"CURVEPOLYGON(CIRCULARSTRING(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))","CURVEPOLYGONZ(CIRCULARSTRINGZ(1 3 1, 3 5 2, 4 7 3, 7 3 4, 1 3 1))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"CURVEPOLYGON(CIRCULARSTRING(1 3 1 11, 3 5 2 12, 4 7 3 13, 7 3 4 14, 1 3 1 11))","CURVEPOLYGONZM(CIRCULARSTRINGZM(1 3 1 11, 3 5 2 12, 4 7 3 13, 7 3 4 14, 1 3 1 11))",5,0,24.9520887446,18.926681924,1,0,0,Point (4.40851485241232677 3.56861296120545823),1,0.75,7.125,7,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +GeometryCollection (GeometryCollection (Point (1 1))),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1))),1,0,0,0,1,0,0,POINT(1 1),1,1,1,1, +"GeometryCollection (LineString (0 0, 1 1, 2 2, 3 3 , 4 4))","GEOMETRYCOLLECTION(LINESTRING(0 0,1 1,2 2,3 3,4 4))",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"GeometryCollection (LineStringZ (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (LINESTRING Z (0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),POINT Z (1 2 3))",6,5.6568542495,0,0,2,0,0,POINT(2 2),0,0,4,4, +"GeometryCollection (LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","GEOMETRYCOLLECTION Z (LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",5,16.9705627485,0,0,1,0,0,POINT(7 8),1,2,13,14, +"GeometryCollection (MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4)))","GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,2 2,3 3,4 4)))",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"GeometryCollection (MultiLineStringM ((0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0)),PointM (1 2 3))","GEOMETRYCOLLECTION M (MULTILINESTRING M ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)),POINT M (1 2 3))",6,5.6568542495,0,0,2,0,0,POINT(2 2),0,0,4,4, +"GeometryCollection (MultiLineStringZ ((1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0)))","GEOMETRYCOLLECTION Z (MULTILINESTRING Z ((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)))",15,28.2842712475,0,0,1,0,0,POINT(5 5.6),0,0,13,14, +GeometryCollection (MultiPoint ((1 2))),GEOMETRYCOLLECTION(MULTIPOINT((1 2))),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +GeometryCollection (MultiPoint (1 2)),GEOMETRYCOLLECTION(MULTIPOINT((1 2))),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (MultiPointM ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))","GEOMETRYCOLLECTION M (MULTIPOINT M ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))",4,0,0,0,1,0,0,POINT(6.25 7.25),1,2,11,12, +"GeometryCollection (MultiPointZ ((1 2 0),(3 4 0),(5 6 0)),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (MULTIPOINT Z ((1 2 0),(3 4 0),(5 6 0)),POINT Z (1 2 3))",4,0,0,0,2,0,0,POINT(2.5 3.5),1,2,5,6, +GeometryCollection (MultiPointZ ((1 2 3))),GEOMETRYCOLLECTION Z (MULTIPOINT Z ((1 2 3))),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))),MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)),MultiPointZ ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))","GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))),MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)),MULTIPOINT Z ((1 2 3),(5 6 7),(8 9 10),(11 12 13)))",49,28.2842712475,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,13,14, +"GeometryCollection (MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))))","GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))))",30,0,291,140,1,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"GeometryCollection (Point (1 2),LineString (0 0, 1 1, 2 2, 3 3 , 4 4))","GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,1 1,2 2,3 3,4 4))",6,5.6568542495,0,0,2,0,0,POINT(2 2),0,0,4,4, +GeometryCollection (Point (1 2)),GEOMETRYCOLLECTION(POINT(1 2)),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (Point (10 10),Point (30 30),LineString (15 15, 20 20))","GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))",4,7.0710678119,0,0,3,0,0,POINT(17.5 17.5),10,10,30,30, +"GeometryCollection (PointM (1 2 0),PointM (1 2 3),PolygonM ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","GEOMETRYCOLLECTION M (POINT M (1 2 0),POINT M (1 2 3),POLYGON M ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))",17,0,95,52,3,0,0,POINT(4.99473684210526 4.99473684210526),0,0,10,10, +"GeometryCollection (PointM (1 2 3), MultiPolygonM (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))))","GEOMETRYCOLLECTION M (POINT M (1 2 3),MULTIPOLYGON M (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))))",31,0,291,140,2,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"GeometryCollection (PointZ (1 2 0),MultiPointZ (1 2 3))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),MULTIPOINT Z ((1 2 3)))",2,0,0,0,2,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3),LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),PolygonZ ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)))","GEOMETRYCOLLECTIONZ (POINT Z (1 2 0),POINT Z (1 2 3),LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)))",12,16.9705627485,100,40,4,0,0,POINT(5 5),0,0,13,14, +"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3),LineStringZ (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),POINT Z (1 2 3),LINESTRING Z (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",7,16.9705627485,0,0,3,0,0,POINT(7 8),1,2,13,14, +"GeometryCollection (PointZ (1 2 0),PointZ (1 2 3))","GEOMETRYCOLLECTION Z (POINT Z (1 2 0),POINT Z (1 2 3))",2,0,0,0,2,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (PointZ (1 2 3),MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0)))","GEOMETRYCOLLECTION Z (POINT Z (1 2 3),MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)))",6,5.6568542495,0,0,2,0,0,POINT(2 2),0,0,4,4, +GeometryCollection (PointZ (1 2 3)),GEOMETRYCOLLECTION Z (POINT Z (1 2 3)),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"GeometryCollection (PolygonZ ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1)))","GEOMETRYCOLLECTION Z (POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1)))",10,0,96,48,1,0,0,POINT(4.95833333333333 4.95833333333333),0,0,10,10, +"LineString (0 0, 1 1, 2 2, 3 3 , 4 4)","LINESTRING(0 0,1 1,2 2,3 3,4 4)",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"LineString (0 0, 10 10, 20 0)","LINESTRING(0 0,10 10,20 0)",3,28.2842712475,0,0,1,0,0,POINT(10 5),0,0,20,10, +"LineString (0 0,3 4,4 3)","LINESTRING(0 0,3 4,4 3)",3,6.4142135624,0,0,1,0,0,POINT(1.94096241842308 2.33072181381731),0,0,4,4, +"LineString (0 0,3 4)","LINESTRING(0 0,3 4)",2,5,0,0,1,0,0,POINT(1.5 2),0,0,3,4, +"LineString M (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)","LINESTRING M (1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)",5,16.9705627485,0,0,1,0,0,POINT(7 8),1,2,13,14, +"LineString( 1 2 3, 4 5 6 )","LineStringZ( 1 2 3, 4 5 6 )",2,4.2426406871,0,0,1,0,0,Point (2.5 3.5),1,2,4,5,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"LineString( 1 2 3 4, 5 6 7 8 )","LineStringZM( 1 2 3 4, 5 6 7 8)",2,5.6568542495,0,0,0,0,0,POINT( 3 4 ),1,2,5,6,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +"LineString(1 2,2 3,3 4)","LINESTRING(1 2,2 3,3 4)",3,2.8284271247,0,0,1,0,0,POINT(2 3),1,2,3,4, +"LineStringZ (0 0 0 , 1 1 1 , 2 2 2 , 3 3 3, 4 4 4)","LINESTRING Z (0 0 0,1 1 1,2 2 2,3 3 3,4 4 4)",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"LineStringZM (0 0 0 2 , 1 1 1 3 , 2 2 2 4, 3 3 3 5, 4 4 4 6)","LineStringZM (0 0 0 2, 1 1 1 3, 2 2 2 4, 3 3 3 5, 4 4 4 6)",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"LineString( 0 2, 3 2, 3 4, 0 4, 0 2 )","LineString( 0 2, 3 2, 3 4, 0 4, 0 2 )",5,10,0,0,1,0,1,POINT(1.5 3),0,2,3,4, +"LineStringZ( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1 )","LineStringZ( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1 )",5,10,0,0,1,0,1,POINT(1.5 3),0,2,3,4, +"LineStringZ( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 2 )","LineStringZ( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 2 )",5,10,0,0,1,0,0,POINT(1.5 3),0,2,3,4,Not closed due to z coordinate difference +"LineStringM( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 20 )","LineStringM( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 20 )",5,10,0,0,1,0,1,POINT(1.5 3),0,2,3,4,"M coordinate differs, but that should NOT be considered when testing for closedness" +"MultiLineString ((0 0, 1 0, 1 1, 2 1, 2 0), (3 1, 5 1, 5 0, 6 0))","MULTILINESTRING((0 0,1 0,1 1,2 1,2 0),(3 1,5 1,5 0,6 0))",9,8,0,0,2,0,0,POINT(2.9375 0.5625),0,0,6,1, +"MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4),(0 0, 1 1, 2 2, 3 3 , 4 4))","MULTILINESTRING((0 0,1 1,2 2,3 3,4 4),(0 0,1 1,2 2,3 3,4 4))",10,11.313708499,0,0,2,0,0,POINT(2 2),0,0,4,4, +"MultiLineString ((0 0, 1 1, 2 2, 3 3 , 4 4))","MULTILINESTRING((0 0,1 1,2 2,3 3,4 4))",5,5.6568542495,0,0,1,0,0,POINT(2 2),0,0,4,4, +"MultiLineString((0 0, 1 1),(0 0, 1 1, 2 2) )","MULTILINESTRING((0 0,1 1),(0 0,1 1,2 2))",5,4.2426406871,0,0,2,0,0,POINT(0.833333333333333 0.833333333333333),0,0,2,2, +"MultiLineStringM ((1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0))","MULTILINESTRING M ((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))",15,28.2842712475,0,0,3,0,0,POINT(5 5.6),0,0,13,14, +"MultiLineStringZ ((0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",15,28.2842712475,0,0,3,0,0,POINT(5 5.6),0,0,13,14, +"MultiLineStringZM ((0 0 0 1, 1 1 0 2, 2 2 0 3, 3 3 0 4, 4 4 0 5),(0 0 0 6, 1 1 0 7, 2 2 0 8, 3 3 0 9, 4 4 0 10),(1 2 3 11, 4 5 6 12, 7 8 9 13, 10 11 12 14, 13 14 15 15))","MultiLineStringZM ((0 0 0 1, 1 1 0 2, 2 2 0 3, 3 3 0 4, 4 4 0 5),(0 0 0 6, 1 1 0 7, 2 2 0 8, 3 3 0 9, 4 4 0 10),(1 2 3 11, 4 5 6 12, 7 8 9 13, 10 11 12 14, 13 14 15 15))",15,28.2842712475,0,0,3,0,0,POINT(5 5.6),0,0,13,14, +"MultiLineString ((0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))","MULTILINESTRING Z ((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15))",15,28.2842712475,0,0,3,0,0,POINT(5 5.6),0,0,13,14,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"MultiLineString ((0 0 0 1, 1 1 0 2, 2 2 0 3, 3 3 0 4, 4 4 0 5),(0 0 0 6, 1 1 0 7, 2 2 0 8, 3 3 0 9, 4 4 0 10),(1 2 3 11, 4 5 6 12, 7 8 9 13, 10 11 12 14, 13 14 15 15))","MultiLineStringZM ((0 0 0 1, 1 1 0 2, 2 2 0 3, 3 3 0 4, 4 4 0 5),(0 0 0 6, 1 1 0 7, 2 2 0 8, 3 3 0 9, 4 4 0 10),(1 2 3 11, 4 5 6 12, 7 8 9 13, 10 11 12 14, 13 14 15 15))",15,28.2842712475,0,0,3,0,0,POINT(5 5.6),0,0,13,14,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +"MultiPoint ((1 2),(2 3))","MULTIPOINT((1 2),(2 3))",2,0,0,0,2,0,0,POINT(1.5 2.5),1,2,2,3, +"MultiPoint ((10 30),(40 20),(30 10),(20 10))","MULTIPOINT((10 30),(40 20),(30 10),(20 10))",4,0,0,0,4,0,0,POINT(25 17.5),10,10,40,30, +"MultiPointZ(( 1 2 3 ),(4 5 6))","MultiPointZ(( 1 2 3 ),(4 5 6))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5, +"MultiPointM(( 1 2 3 ),(4 5 6))","MultiPointM(( 1 2 3 ),(4 5 6))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5, +"MultiPointZM(( 1 2 3 11),(4 5 6 12))","MultiPointZM(( 1 2 3 11),(4 5 6 12))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5, +"MultiPoint(( 1 2 3 ),(4 5 6))","MultiPointZ(( 1 2 3 ),(4 5 6))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"MultiPoint(( 1 2 3 11),(4 5 6 12))","MultiPointZM(( 1 2 3 11),(4 5 6 12))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +"MultiPoint (1 2, 3 4, 5 6)","MULTIPOINT((1 2),(3 4),(5 6))",3,0,0,0,3,0,0,POINT(3 4),1,2,5,6, +MultiPoint (1 2),MULTIPOINT((1 2)),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +MultiPoint Z (1 2 3),MULTIPOINT Z ((1 2 3)),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"MultiPointM (1 2 3,4 5 0)","MULTIPOINT M ((1 2 3),(4 5 0))",2,0,0,0,2,0,0,POINT(2.5 3.5),1,2,4,5, +"MultiPointZ ((-1 -2 -3),(5.4 6.6 7.77),(-5.4 -6.6 -7.77),(1000000 0.000001 -1000000),(-0.0000013 -0.000014 0))","MULTIPOINT Z ((-1 -2 -3),(5.4 6.6 7.77),(-5.4 -6.6 -7.77),(1000000 0.000001 -1000000),(-0.0000013 -0.000014 0))",5,0,0,0,5,0,0,POINT(199999.79999974 -0.4000026),-5.4,-6.6,1000000,6.6, +"MultiPointZ (1 2 0, 1 2 3, 4 5 0, 6 7 8)","MULTIPOINT Z ((1 2 0),(1 2 3),(4 5 0),(6 7 8))",4,0,0,0,4,0,0,POINT(3 4),1,2,6,7, +"MultiPointZ (1 2 3, 5 6 7, 8 9 10, 11 12 13)","MULTIPOINT Z ((1 2 3),(5 6 7),(8 9 10),(11 12 13))",4,0,0,0,4,0,0,POINT(6.25 7.25),1,2,11,12, +MultiPointZ (1 2 3),MULTIPOINT Z ((1 2 3)),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +"MultiPolygon (((0 0, 1 0, 1 1, 2 1, 2 2, 0 2, 0 0)),((4 0, 5 0, 5 2, 3 2, 3 1, 4 1, 4 0)))","MULTIPOLYGON(((0 0,1 0,1 1,2 1,2 2,0 2,0 0)),((4 0,5 0,5 2,3 2,3 1,4 1,4 0)))",14,0,6,16,2,0,0,POINT(2.5 1.16666666666667),0,0,5,2, +"MultiPolygon (((0 0, 10 0, 10 10, 0 10, 0 0)),((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5)))","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)))",15,0,196,88,2,0,0,POINT(4.97959183673469 4.97959183673469),0,0,10,10, +"MultiPolygon (((0 0, 10 0, 10 10, 0 10, 0 0)))","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",5,0,100,40,1,0,0,POINT(5 5),0,0,10,10, +"MultiPolygon( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )","MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"MultiPolygonZ (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"MultiPolygonM (((0 0 1, 10 0 2, 10 10 3, 0 10 4, 0 0 1)),((0 0 5, 10 0 6, 10 10 7, 0 10 8, 0 0 5),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","MultiPolygonM (((0 0 1, 10 0 2, 10 10 3, 0 10 4, 0 0 1)),((0 0 5, 10 0 6, 10 10 7, 0 10 8, 0 0 5),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"MultiPolygonZM (((0 0 1 2, 10 0 2 3, 10 10 3 4, 0 10 4 5, 0 0 1 2)),((0 0 5 7, 10 0 6 8, 10 10 7 9, 0 10 8 10, 0 0 5 7),(5 5 0 1, 7 5 0 2, 7 7 0 3, 5 7 0 4, 5 5 0 1)) ,((0 0 1 1, 10 0 1 3, 10 10 1 4, 0 10 1 3, 0 0 1 1),(5 5 1 1, 7 5 1 2, 7 7 1 3, 5 7 1 5, 5 5 1 1),(1 1 1 0,2 1 1 0, 2 2 1 0, 1 2 1 0, 1 1 1 0)))","MultiPolygonZM (((0 0 1 2, 10 0 2 3, 10 10 3 4, 0 10 4 5, 0 0 1 2)),((0 0 5 7, 10 0 6 8, 10 10 7 9, 0 10 8 10, 0 0 5 7),(5 5 0 1, 7 5 0 2, 7 7 0 3, 5 7 0 4, 5 5 0 1)) ,((0 0 1 1, 10 0 1 3, 10 10 1 4, 0 10 1 3, 0 0 1 1),(5 5 1 1, 7 5 1 2, 7 7 1 3, 5 7 1 5, 5 5 1 1),(1 1 1 0,2 1 1 0, 2 2 1 0, 1 2 1 0, 1 1 1 0)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10, +"MultiPolygon (((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0)) ,((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1)))","MULTIPOLYGON Z (((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"MultiPolygon (((0 0 1 2, 10 0 2 3, 10 10 3 4, 0 10 4 5, 0 0 1 2)),((0 0 5 7, 10 0 6 8, 10 10 7 9, 0 10 8 10, 0 0 5 7),(5 5 0 1, 7 5 0 2, 7 7 0 3, 5 7 0 4, 5 5 0 1)) ,((0 0 1 1, 10 0 1 3, 10 10 1 4, 0 10 1 3, 0 0 1 1),(5 5 1 1, 7 5 1 2, 7 7 1 3, 5 7 1 5, 5 5 1 1),(1 1 1 0,2 1 1 0, 2 2 1 0, 1 2 1 0, 1 1 1 0)))","MultiPolygonZM (((0 0 1 2, 10 0 2 3, 10 10 3 4, 0 10 4 5, 0 0 1 2)),((0 0 5 7, 10 0 6 8, 10 10 7 9, 0 10 8 10, 0 0 5 7),(5 5 0 1, 7 5 0 2, 7 7 0 3, 5 7 0 4, 5 5 0 1)) ,((0 0 1 1, 10 0 1 3, 10 10 1 4, 0 10 1 3, 0 0 1 1),(5 5 1 1, 7 5 1 2, 7 7 1 3, 5 7 1 5, 5 5 1 1),(1 1 1 0,2 1 1 0, 2 2 1 0, 1 2 1 0, 1 1 1 0)))",30,0,291,140,3,0,0,POINT(4.98453608247423 4.98453608247423),0,0,10,10,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +Point (1 2),POINT(1 2),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +Point( 1 2 3 ),PointZ( 1 2 3),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +Point( 1 2 3 4 ),PointZM( 1 2 3 4 ),1,0,0,0,1,0,0,Point( 1 2 ),1,2,1,2,"4d coordinates, but geometry not explicitly marked as such. Should be upgraded to have ZM dimension" +PointM( 4 5 6 ),PointM ( 4 5 6 ),1,0,0,0,1,0,0,POINT(4 5),4,5,4,5, +PointZ (1 2 3),POINT Z (1 2 3),1,0,0,0,1,0,0,POINT(1 2),1,2,1,2, +PointZM( 7 8 9 10 ),PointZM( 7 8 9 10 ),1,0,0,0,1,0,0,POINT( 7 8 ),7,8,7,8, +"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1))","POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1))",15,0,95,52,1,2,0,POINT(4.99473684210526 4.99473684210526),0,0,10,10, +"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5))","POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))",10,0,96,48,1,1,0,POINT(4.95833333333333 4.95833333333333),0,0,10,10, +"Polygon ((0 0, 10 0, 10 10, 0 10, 0 0))","POLYGON((0 0,10 0,10 10,0 10,0 0))",5,0,100,40,1,0,0,POINT(5 5),0,0,10,10, +"Polygon ((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))","POLYGON((0 0,0 7,4 2,2 0,0 0),(1 1,2 1,2 2,1 2,1 1))",10,0,15,22.2315513622,1,1,0,POINT(1.41111111111111 2.78888888888889),0,0,4,7, +"Polygon ((0 0,0 7,4 2,2 0,0 0))","POLYGON((0 0,0 7,4 2,2 0,0 0))",5,0,16,18.2315513622,1,0,0,POINT(1.41666666666667 2.70833333333333),0,0,4,7, +"Polygon ((1 1,2 2,3 1,2 0,1 1))","POLYGON((1 1,2 2,3 1,2 0,1 1))",5,0,2,5.6568542495,1,0,0,POINT(2 1),1,0,3,2, +"Polygon ((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))","POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))",9,0,338587368000,2687641.02107292,1,0,0,POINT(1592016.64149202 583949.860499226),1200000,192000,1872000,863880, +"Polygon ((60 180, 140 120, 100 180, 140 240, 140 240, 60 180))","POLYGON((60 180,140 120,100 180,140 240,140 240,60 180))",6,0,2400,344.2220510186,1,0,0,POINT(100 180),60,120,140,240, +"Polygon ((60 180, 140 120, 100 180, 140 240, 60 180))","POLYGON((60 180,140 120,100 180,140 240,60 180))",5,0,2400,344.2220510186,1,0,0,POINT(100 180),60,120,140,240, +"Polygon ((60 180, 140 240, 140 240, 140 240, 200 180, 120 120, 60 180))","POLYGON((60 180,140 240,140 240,140 240,200 180,120 120,60 180))",7,0,8400,369.7056274848,1,0,0,POINT(130 180),60,120,200,240, +"Polygon(( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1),(0.5 2.5 8, 0.6 2.7 9, 0.5 2.7 10, 0.5 2.5 8))","PolygonZ(( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1),(0.5 2.5 8, 0.6 2.7 9, 0.5 2.7 10, 0.5 2.5 8))",9,0,5.99,10.5236067978,1,1,0,POINT(1.50161380077908 3.00061213132999),0,2,3,4,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"Polygon(( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1))","PolygonZ(( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1))",5,0,6,10,1,0,0,Point (1.5 3),0,2,3,4,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"Polygon((0 2 1 5, 3 2 2 6, 3 4 5 7, 0 4 6 8, 0 2 1 5),(0.5 2.5 8 10, 1.0 2.5 9 11, 0.5 2.5 10 12, 0.5 2.5 8 10))","PolygonZM((0 2 1 5, 3 2 2 6, 3 4 5 7, 0 4 6 8, 0 2 1 5),(0.5 2.5 8 10, 1.0 2.5 9 11, 0.5 2.5 10 12, 0.5 2.5 8 10))",9,0,6,11,1,1,0,Point (1.5 3),0,2,3,4,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"Polygon(( 0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1))","PolygonZ((0 2 1, 3 2 2, 3 4 5, 0 4 6, 0 2 1))",5,0,6,10,1,0,0,Point (1.5 3),0,2,3,4,"z coordinate, but geometry not explicitly marked as such. Should be upgraded to have Z dimension" +"PolygonM ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1))","POLYGON M ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))",15,0,95,52,1,2,0,POINT(4.99473684210526 4.99473684210526),0,0,10,10, +"PolygonZ ((0 0 1 , 10 0 1, 10 10 1, 0 10 1, 0 0 1))","POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1))",5,0,100,40,1,0,0,POINT(5 5),0,0,10,10, +"PolygonZ ((0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1))","POLYGON Z ((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1))",10,0,96,48,1,1,0,POINT(4.95833333333333 4.95833333333333),0,0,10,10,