From 0d7f891b5cd446d752bcb7d5ee4f73b00fe738c7 Mon Sep 17 00:00:00 2001 From: Olivier Courtin Date: Thu, 29 Oct 2009 14:07:50 +0000 Subject: [PATCH] Add attribute dimension in gml:pos and gml:posList. Fix geometrycollection invalid GML output. Update units test. Cf #276 git-svn-id: http://svn.osgeo.org/postgis/branches/1.4@4695 b70326c6-7e19-0410-871a-916f4a2858ee --- postgis/lwgeom_gml.c | 533 +++++++++++++++++++++++++++++++------------ regress/gml.sql | 6 + regress/gml_expected | 66 +++--- 3 files changed, 427 insertions(+), 178 deletions(-) diff --git a/postgis/lwgeom_gml.c b/postgis/lwgeom_gml.c index aae854f88..1bc53660e 100644 --- a/postgis/lwgeom_gml.c +++ b/postgis/lwgeom_gml.c @@ -22,9 +22,8 @@ #include "lwgeom_pg.h" #include "liblwgeom.h" -Datum LWGEOM_asGML(PG_FUNCTION_ARGS); -char *geometry_to_gml2(uchar *srl, char *srs, int precision); +Datum LWGEOM_asGML(PG_FUNCTION_ARGS); static size_t asgml2_point_size(LWPOINT *point, char *srs, int precision); static char *asgml2_point(LWPOINT *point, char *srs, int precision); @@ -32,11 +31,12 @@ static size_t asgml2_line_size(LWLINE *line, char *srs, int precision); static char *asgml2_line(LWLINE *line, char *srs, int precision); static size_t asgml2_poly_size(LWPOLY *poly, char *srs, int precision); static char *asgml2_poly(LWPOLY *poly, char *srs, int precision); -static size_t asgml2_inspected_size(LWGEOM_INSPECTED *geom, char *srs, int precision); -static char *asgml2_inspected(LWGEOM_INSPECTED *geom, char *srs, int precision); +static size_t asgml2_multi_size(LWGEOM_INSPECTED *geom, char *srs, int precision); +static char *asgml2_multi(LWGEOM_INSPECTED *geom, char *srs, int precision); +static size_t asgml2_collection_size(LWGEOM_INSPECTED *geom, char *srs, int precision); +static char *asgml2_collection(LWGEOM_INSPECTED *geom, char *srs, int precision); static size_t pointArray_toGML2(POINTARRAY *pa, char *buf, int precision); - -char *geometry_to_gml3(uchar *srl, char *srs, int precision, bool is_deegree); +char *geometry_to_gml2(uchar *geom, char *srs, int precision); static size_t asgml3_point_size(LWPOINT *point, char *srs, int precision); static char *asgml3_point(LWPOINT *point, char *srs, int precision, bool is_deegree); @@ -44,13 +44,15 @@ static size_t asgml3_line_size(LWLINE *line, char *srs, int precision); static char *asgml3_line(LWLINE *line, char *srs, int precision, bool is_deegree); static size_t asgml3_poly_size(LWPOLY *poly, char *srs, int precision); static char *asgml3_poly(LWPOLY *poly, char *srs, int precision, bool is_deegree); -static size_t asgml3_inspected_size(LWGEOM_INSPECTED *geom, char *srs, int precision); -static char *asgml3_inspected(LWGEOM_INSPECTED *geom, char *srs, int precision, bool is_deegree); +static size_t asgml3_multi_size(LWGEOM_INSPECTED *geom, char *srs, int precision); +static char *asgml3_multi(LWGEOM_INSPECTED *geom, char *srs, int precision, bool is_deegree); +static size_t asgml3_collection_size(LWGEOM_INSPECTED *geom, char *srs, int precision); +static char *asgml3_collection(LWGEOM_INSPECTED *insp, char *srs, int precision, bool is_deegree); static size_t pointArray_toGML3(POINTARRAY *pa, char *buf, int precision, bool is_deegree); +char *geometry_to_gml3(uchar *geom, char *srs, int precisioni, bool is_deegree); -static size_t pointArray_GMLsize(POINTARRAY *pa, int precision); static char *getSRSbySRID(int SRID, bool short_crs); - +static size_t pointArray_GMLsize(POINTARRAY *pa, int precision); #define MAX_DOUBLE 1E15 #define SHOW_DIGS_DOUBLE 20 @@ -58,6 +60,7 @@ static char *getSRSbySRID(int SRID, bool short_crs); #define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */ + /** * Encode feature in GML */ @@ -160,9 +163,12 @@ geometry_to_gml2(uchar *geom, char *srs, int precision) case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: + inspected = lwgeom_inspect(geom); + return asgml2_multi(inspected, srs, precision); + case COLLECTIONTYPE: inspected = lwgeom_inspect(geom); - return asgml2_inspected(inspected, srs, precision); + return asgml2_collection(inspected, srs, precision); default: lwerror("geometry_to_gml2: '%s' geometry type not supported", lwgeom_typename(type)); @@ -318,7 +324,7 @@ asgml2_poly(LWPOLY *poly, char *srs, int precision) * Don't call this with single-geoms inspected. */ static size_t -asgml2_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) +asgml2_multi_size(LWGEOM_INSPECTED *insp, char *srs, int precision) { int i; size_t size; @@ -333,8 +339,6 @@ asgml2_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) LWPOINT *point; LWLINE *line; LWPOLY *poly; - LWGEOM_INSPECTED *subinsp; - uchar *subgeom; if ((point=lwgeom_getpoint_inspected(insp, i))) { @@ -354,13 +358,6 @@ asgml2_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) size += asgml2_poly_size(poly, 0, precision); lwpoly_release(poly); } - else - { - subgeom = lwgeom_getsubgeometry_inspected(insp, i); - subinsp = lwgeom_inspect(subgeom); - size += asgml2_inspected_size(subinsp, 0, precision); - lwinspected_release(subinsp); - } } return size; @@ -370,18 +367,18 @@ asgml2_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) * Don't call this with single-geoms inspected! */ static size_t -asgml2_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision) +asgml2_multi_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision) { int type = lwgeom_getType(insp->serialized_form[0]); char *ptr, *gmltype; int i; ptr = output; + gmltype=""; - if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; - else if (type == MULTILINETYPE) gmltype = "MultiLineString"; + if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; + else if (type == MULTILINETYPE) gmltype = "MultiLineString"; else if (type == MULTIPOLYGONTYPE) gmltype = "MultiPolygon"; - else gmltype = "MultiGeometry"; /* Open outmost tag */ if ( srs ) @@ -398,8 +395,6 @@ asgml2_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis LWPOINT *point; LWLINE *line; LWPOLY *poly; - LWGEOM_INSPECTED *subinsp; - uchar *subgeom; if ((point=lwgeom_getpoint_inspected(insp, i))) { @@ -422,17 +417,136 @@ asgml2_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis lwpoly_release(poly); ptr += sprintf(ptr, ""); } + } + + /* Close outmost tag */ + ptr += sprintf(ptr, "", gmltype); + + return (ptr-output); +} + +/* + * Don't call this with single-geoms inspected! + */ +static char * +asgml2_multi(LWGEOM_INSPECTED *insp, char *srs, int precision) +{ + char *gml; + size_t size; + + size = asgml2_multi_size(insp, srs, precision); + gml = palloc(size); + asgml2_multi_buf(insp, srs, gml, precision); + return gml; +} + + +static size_t +asgml2_collection_size(LWGEOM_INSPECTED *insp, char *srs, int precision) +{ + int i; + size_t size; + + size = sizeof(""); + + if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); + + for (i=0; ingeometries; i++) + { + LWPOINT *point; + LWLINE *line; + LWPOLY *poly; + LWGEOM_INSPECTED *subinsp; + uchar *subgeom; + + size += sizeof("/") * 2; + if ((point=lwgeom_getpoint_inspected(insp, i))) + { + size += asgml2_point_size(point, 0, precision); + lwpoint_release(point); + } + else if ((line=lwgeom_getline_inspected(insp, i))) + { + size += asgml2_line_size(line, 0, precision); + lwline_release(line); + } + else if ((poly=lwgeom_getpoly_inspected(insp, i))) + { + size += asgml2_poly_size(poly, 0, precision); + lwpoly_release(poly); + } else { subgeom = lwgeom_getsubgeometry_inspected(insp, i); subinsp = lwgeom_inspect(subgeom); - ptr += asgml2_inspected_buf(subinsp, 0, ptr, precision); + size += asgml2_collection_size(subinsp, 0, precision); lwinspected_release(subinsp); } } + return size; +} + +/* + * Don't call this with single-geoms inspected! + */ +static size_t +asgml2_collection_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision) +{ + char *ptr; + int i; + + ptr = output; + + /* Open outmost tag */ + if ( srs ) + { + ptr += sprintf(ptr, "", srs); + } + else + { + ptr += sprintf(ptr, ""); + } + + for (i=0; ingeometries; i++) + { + LWPOINT *point; + LWLINE *line; + LWPOLY *poly; + LWGEOM_INSPECTED *subinsp; + uchar *subgeom; + + ptr += sprintf(ptr, ""); + if ((point=lwgeom_getpoint_inspected(insp, i))) + { + ptr += asgml2_point_buf(point, 0, ptr, precision); + lwpoint_release(point); + } + else if ((line=lwgeom_getline_inspected(insp, i))) + { + ptr += asgml2_line_buf(line, 0, ptr, precision); + lwline_release(line); + } + else if ((poly=lwgeom_getpoly_inspected(insp, i))) + { + ptr += asgml2_poly_buf(poly, 0, ptr, precision); + lwpoly_release(poly); + } + else + { + subgeom = lwgeom_getsubgeometry_inspected(insp, i); + subinsp = lwgeom_inspect(subgeom); + if (lwgeom_getType(subgeom[0]) == COLLECTIONTYPE) + ptr += asgml2_collection_buf(subinsp, 0, ptr, precision); + else + ptr += asgml2_multi_buf(subinsp, 0, ptr, precision); + lwinspected_release(subinsp); + } + ptr += sprintf(ptr, ""); + } + /* Close outmost tag */ - ptr += sprintf(ptr, "", gmltype); + ptr += sprintf(ptr, ""); return (ptr-output); } @@ -441,17 +555,18 @@ asgml2_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis * Don't call this with single-geoms inspected! */ static char * -asgml2_inspected(LWGEOM_INSPECTED *insp, char *srs, int precision) +asgml2_collection(LWGEOM_INSPECTED *insp, char *srs, int precision) { char *gml; size_t size; - size = asgml2_inspected_size(insp, srs, precision); + size = asgml2_collection_size(insp, srs, precision); gml = palloc(size); - asgml2_inspected_buf(insp, srs, gml, precision); + asgml2_collection_buf(insp, srs, gml, precision); return gml; } + static size_t pointArray_toGML2(POINTARRAY *pa, char *output, int precision) { @@ -468,22 +583,22 @@ pointArray_toGML2(POINTARRAY *pa, char *output, int precision) for (i=0; inpoints; i++) { POINT2D pt; - getPoint2d_p(pa, i, &pt); - - if (fabs(pt.x) < MAX_DOUBLE) - sprintf(x, "%.*f", precision, pt.x); - else - sprintf(x, "%g", pt.x); - trim_trailing_zeros(x); - - if (fabs(pt.y) < MAX_DOUBLE) - sprintf(y, "%.*f", precision, pt.y); - else - sprintf(y, "%g", pt.y); - trim_trailing_zeros(y); - - if ( i ) ptr += sprintf(ptr, " "); - ptr += sprintf(ptr, "%s,%s", x, y); + getPoint2d_p(pa, i, &pt); + + if (fabs(pt.x) < MAX_DOUBLE) + sprintf(x, "%.*f", precision, pt.x); + else + sprintf(x, "%g", pt.x); + trim_trailing_zeros(x); + + if (fabs(pt.y) < MAX_DOUBLE) + sprintf(y, "%.*f", precision, pt.y); + else + sprintf(y, "%g", pt.y); + trim_trailing_zeros(y); + + if ( i ) ptr += sprintf(ptr, " "); + ptr += sprintf(ptr, "%s,%s", x, y); } } else @@ -491,28 +606,28 @@ pointArray_toGML2(POINTARRAY *pa, char *output, int precision) for (i=0; inpoints; i++) { POINT4D pt; - getPoint4d_p(pa, i, &pt); - - if (fabs(pt.x) < MAX_DOUBLE) - sprintf(x, "%.*f", precision, pt.x); - else - sprintf(x, "%g", pt.x); - trim_trailing_zeros(x); - - if (fabs(pt.y) < MAX_DOUBLE) - sprintf(y, "%.*f", precision, pt.y); - else - sprintf(y, "%g", pt.y); - trim_trailing_zeros(y); - - if (fabs(pt.z) < MAX_DOUBLE) - sprintf(z, "%.*f", precision, pt.z); - else - sprintf(z, "%g", pt.z); - trim_trailing_zeros(z); - - if ( i ) ptr += sprintf(ptr, " "); - ptr += sprintf(ptr, "%s,%s,%s", x, y, z); + getPoint4d_p(pa, i, &pt); + + if (fabs(pt.x) < MAX_DOUBLE) + sprintf(x, "%.*f", precision, pt.x); + else + sprintf(x, "%g", pt.x); + trim_trailing_zeros(x); + + if (fabs(pt.y) < MAX_DOUBLE) + sprintf(y, "%.*f", precision, pt.y); + else + sprintf(y, "%g", pt.y); + trim_trailing_zeros(y); + + if (fabs(pt.z) < MAX_DOUBLE) + sprintf(z, "%.*f", precision, pt.z); + else + sprintf(z, "%g", pt.z); + trim_trailing_zeros(z); + + if ( i ) ptr += sprintf(ptr, " "); + ptr += sprintf(ptr, "%s,%s,%s", x, y, z); } } @@ -551,9 +666,19 @@ geometry_to_gml3(uchar *geom, char *srs, int precision, bool is_deegree) poly = lwpoly_deserialize(geom); return asgml3_poly(poly, srs, precision, is_deegree); - default: + case MULTIPOINTTYPE: + case MULTILINETYPE: + case MULTIPOLYGONTYPE: + inspected = lwgeom_inspect(geom); + return asgml3_multi(inspected, srs, precision, is_deegree); + + case COLLECTIONTYPE: inspected = lwgeom_inspect(geom); - return asgml3_inspected(inspected, srs, precision, is_deegree); + return asgml3_collection(inspected, srs, precision, is_deegree); + + default: + lwerror("geometry_to_gml3: '%s' geometry type not supported", lwgeom_typename(type)); + return NULL; } } @@ -562,7 +687,7 @@ asgml3_point_size(LWPOINT *point, char *srs, int precision) { int size; size = pointArray_GMLsize(point->point, precision); - size += sizeof("/") * 2; + size += sizeof("/") * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); return size; } @@ -571,7 +696,9 @@ static size_t asgml3_point_buf(LWPOINT *point, char *srs, char *output, int precision, bool is_deegree) { char *ptr = output; + int dimension=2; + if (TYPE_HASZ(point->type)) dimension = 3; if ( srs ) { ptr += sprintf(ptr, "", srs); @@ -580,7 +707,7 @@ asgml3_point_buf(LWPOINT *point, char *srs, char *output, int precision, bool is { ptr += sprintf(ptr, ""); } - ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, "", dimension); ptr += pointArray_toGML3(point->point, ptr, precision, is_deegree); ptr += sprintf(ptr, ""); @@ -606,6 +733,7 @@ asgml3_line_size(LWLINE *line, char *srs, int precision) int size; size = pointArray_GMLsize(line->points, precision); size += sizeof("/") * 2; + size += sizeof(" dimension='x'"); if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); return size; } @@ -614,7 +742,9 @@ static size_t asgml3_line_buf(LWLINE *line, char *srs, char *output, int precision, bool is_deegree) { char *ptr=output; + int dimension=2; + if (TYPE_HASZ(line->type)) dimension = 3; if ( srs ) { ptr += sprintf(ptr, "", srs); @@ -625,7 +755,7 @@ asgml3_line_buf(LWLINE *line, char *srs, char *output, int precision, bool is_de } ptr += sprintf(ptr, ""); ptr += sprintf(ptr, ""); - ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, "", dimension); ptr += pointArray_toGML3(line->points, ptr, precision, is_deegree); ptr += sprintf(ptr, ""); ptr += sprintf(ptr, ""); @@ -655,7 +785,7 @@ asgml3_poly_size(LWPOLY *poly, char *srs, int precision) size = sizeof(""); - size += sizeof(""); + size += sizeof(""); size += sizeof(""); size += sizeof("") * (poly->nrings - 1); @@ -676,7 +806,9 @@ asgml3_poly_buf(LWPOLY *poly, char *srs, char *output, int precision, bool is_de { int i; char *ptr=output; + int dimension=2; + if (TYPE_HASZ(poly->type)) dimension = 3; if ( srs ) { ptr += sprintf(ptr, "", srs); @@ -685,12 +817,14 @@ asgml3_poly_buf(LWPOLY *poly, char *srs, char *output, int precision, bool is_de { ptr += sprintf(ptr, ""); } - ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, "", dimension); ptr += pointArray_toGML3(poly->rings[0], ptr, precision, is_deegree); ptr += sprintf(ptr, ""); for (i=1; inrings; i++) { - ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, ""); + ptr += sprintf(ptr, "", dimension); ptr += pointArray_toGML3(poly->rings[i], ptr, precision, is_deegree); ptr += sprintf(ptr, ""); } @@ -711,13 +845,14 @@ asgml3_poly(LWPOLY *poly, char *srs, int precision, bool is_deegree) return output; } + /* * Compute max size required for GML version of this * inspected geometry. Will recurse when needed. * Don't call this with single-geoms inspected. */ static size_t -asgml3_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) +asgml3_multi_size(LWGEOM_INSPECTED *insp, char *srs, int precision) { int i; size_t size; @@ -732,8 +867,6 @@ asgml3_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) LWPOINT *point; LWLINE *line; LWPOLY *poly; - LWGEOM_INSPECTED *subinsp; - uchar *subgeom; if ((point=lwgeom_getpoint_inspected(insp, i))) { @@ -752,14 +885,7 @@ asgml3_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) size += sizeof("/") * 2; size += asgml3_poly_size(poly, 0, precision); lwpoly_release(poly); - } - else - { - subgeom = lwgeom_getsubgeometry_inspected(insp, i); - subinsp = lwgeom_inspect(subgeom); - size += asgml3_inspected_size(subinsp, 0, precision); - lwinspected_release(subinsp); - } + } } return size; @@ -769,18 +895,18 @@ asgml3_inspected_size(LWGEOM_INSPECTED *insp, char *srs, int precision) * Don't call this with single-geoms inspected! */ static size_t -asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision, bool is_deegree) +asgml3_multi_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision, bool is_deegree) { int type = lwgeom_getType(insp->serialized_form[0]); char *ptr, *gmltype; int i; ptr = output; + gmltype=""; - if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; - else if (type == MULTILINETYPE) gmltype = "MultiCurve"; + if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; + else if (type == MULTILINETYPE) gmltype = "MultiCurve"; else if (type == MULTIPOLYGONTYPE) gmltype = "MultiSurface"; - else gmltype = "MultiGeometry"; /* Open outmost tag */ if ( srs ) @@ -797,8 +923,6 @@ asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis LWPOINT *point; LWLINE *line; LWPOLY *poly; - LWGEOM_INSPECTED *subinsp; - uchar *subgeom; if ((point=lwgeom_getpoint_inspected(insp, i))) { @@ -821,17 +945,133 @@ asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis lwpoly_release(poly); ptr += sprintf(ptr, ""); } + } + + /* Close outmost tag */ + ptr += sprintf(ptr, "", gmltype); + + return (ptr-output); +} + +/* + * Don't call this with single-geoms inspected! + */ +static char * +asgml3_multi(LWGEOM_INSPECTED *insp, char *srs, int precision, bool is_deegree) +{ + char *gml; + size_t size; + + size = asgml3_multi_size(insp, srs, precision); + gml = palloc(size); + asgml3_multi_buf(insp, srs, gml, precision, is_deegree); + return gml; +} + + +static size_t +asgml3_collection_size(LWGEOM_INSPECTED *insp, char *srs, int precision) +{ + int i; + size_t size; + + size = sizeof(""); + + if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); + + for (i=0; ingeometries; i++) + { + LWPOINT *point; + LWLINE *line; + LWPOLY *poly; + LWGEOM_INSPECTED *subinsp; + uchar *subgeom; + + size += sizeof("/") * 2; + if ((point=lwgeom_getpoint_inspected(insp, i))) + { + size += asgml3_point_size(point, 0, precision); + lwpoint_release(point); + } + else if ((line=lwgeom_getline_inspected(insp, i))) + { + size += asgml3_line_size(line, 0, precision); + lwline_release(line); + } + else if ((poly=lwgeom_getpoly_inspected(insp, i))) + { + size += asgml3_poly_size(poly, 0, precision); + lwpoly_release(poly); + } else { subgeom = lwgeom_getsubgeometry_inspected(insp, i); subinsp = lwgeom_inspect(subgeom); - ptr += asgml3_inspected_buf(subinsp, 0, ptr, precision, is_deegree); + size += asgml3_multi_size(subinsp, 0, precision); lwinspected_release(subinsp); } } + return size; +} + +static size_t +asgml3_collection_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision, bool is_deegree) +{ + char *ptr; + int i; + + ptr = output; + + /* Open outmost tag */ + if ( srs ) + { + ptr += sprintf(ptr, "", srs); + } + else + { + ptr += sprintf(ptr, ""); + } + + for (i=0; ingeometries; i++) + { + LWPOINT *point; + LWLINE *line; + LWPOLY *poly; + LWGEOM_INSPECTED *subinsp; + uchar *subgeom; + + ptr += sprintf(ptr, ""); + if ((point=lwgeom_getpoint_inspected(insp, i))) + { + ptr += asgml3_point_buf(point, 0, ptr, precision, is_deegree); + lwpoint_release(point); + } + else if ((line=lwgeom_getline_inspected(insp, i))) + { + ptr += asgml3_line_buf(line, 0, ptr, precision, is_deegree); + lwline_release(line); + } + else if ((poly=lwgeom_getpoly_inspected(insp, i))) + { + ptr += asgml3_poly_buf(poly, 0, ptr, precision, is_deegree); + lwpoly_release(poly); + } + else + { + subgeom = lwgeom_getsubgeometry_inspected(insp, i); + subinsp = lwgeom_inspect(subgeom); + if (lwgeom_getType(subgeom[0]) == COLLECTIONTYPE) + ptr += asgml3_collection_buf(subinsp, 0, ptr, precision, is_deegree); + else + ptr += asgml3_multi_buf(subinsp, 0, ptr, precision, is_deegree); + lwinspected_release(subinsp); + } + ptr += sprintf(ptr, ""); + } + /* Close outmost tag */ - ptr += sprintf(ptr, "", gmltype); + ptr += sprintf(ptr, ""); return (ptr-output); } @@ -840,17 +1080,18 @@ asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precis * Don't call this with single-geoms inspected! */ static char * -asgml3_inspected(LWGEOM_INSPECTED *insp, char *srs, int precision, bool is_deegree) +asgml3_collection(LWGEOM_INSPECTED *insp, char *srs, int precision, bool is_deegree) { char *gml; size_t size; - size = asgml3_inspected_size(insp, srs, precision); + size = asgml3_collection_size(insp, srs, precision); gml = palloc(size); - asgml3_inspected_buf(insp, srs, gml, precision, is_deegree); + asgml3_collection_buf(insp, srs, gml, precision, is_deegree); return gml; } + /* In GML3, inside or , coordinates are separated by a space separator * In GML3 also, lat/lon are reversed for geocentric data */ @@ -869,58 +1110,58 @@ pointArray_toGML3(POINTARRAY *pa, char *output, int precision, bool is_deegree) { for (i=0; inpoints; i++) { - POINT2D pt; - getPoint2d_p(pa, i, &pt); - - if (fabs(pt.x) < MAX_DOUBLE) - sprintf(x, "%.*f", precision, pt.x); - else - sprintf(x, "%g", pt.x); - trim_trailing_zeros(x); - - if (fabs(pt.y) < MAX_DOUBLE) - sprintf(y, "%.*f", precision, pt.y); - else - sprintf(y, "%g", pt.y); - trim_trailing_zeros(y); - - if ( i ) ptr += sprintf(ptr, " "); - if (is_deegree) - ptr += sprintf(ptr, "%s %s", y, x); - else - ptr += sprintf(ptr, "%s %s", x, y); + POINT2D pt; + getPoint2d_p(pa, i, &pt); + + if (fabs(pt.x) < MAX_DOUBLE) + sprintf(x, "%.*f", precision, pt.x); + else + sprintf(x, "%g", pt.x); + trim_trailing_zeros(x); + + if (fabs(pt.y) < MAX_DOUBLE) + sprintf(y, "%.*f", precision, pt.y); + else + sprintf(y, "%g", pt.y); + trim_trailing_zeros(y); + + if ( i ) ptr += sprintf(ptr, " "); + if (is_deegree) + ptr += sprintf(ptr, "%s %s", y, x); + else + ptr += sprintf(ptr, "%s %s", x, y); } } else { for (i=0; inpoints; i++) { - POINT4D pt; - getPoint4d_p(pa, i, &pt); - - if (fabs(pt.x) < MAX_DOUBLE) - sprintf(x, "%.*f", precision, pt.x); - else - sprintf(x, "%g", pt.x); - trim_trailing_zeros(x); - - if (fabs(pt.y) < MAX_DOUBLE) - sprintf(y, "%.*f", precision, pt.y); - else - sprintf(y, "%g", pt.y); - trim_trailing_zeros(y); - - if (fabs(pt.z) < MAX_DOUBLE) - sprintf(z, "%.*f", precision, pt.z); - else - sprintf(z, "%g", pt.z); - trim_trailing_zeros(z); - - if ( i ) ptr += sprintf(ptr, " "); - if (is_deegree) - ptr += sprintf(ptr, "%s %s %s", y, x, z); - else - ptr += sprintf(ptr, "%s %s %s", x, y, z); + POINT4D pt; + getPoint4d_p(pa, i, &pt); + + if (fabs(pt.x) < MAX_DOUBLE) + sprintf(x, "%.*f", precision, pt.x); + else + sprintf(x, "%g", pt.x); + trim_trailing_zeros(x); + + if (fabs(pt.y) < MAX_DOUBLE) + sprintf(y, "%.*f", precision, pt.y); + else + sprintf(y, "%g", pt.y); + trim_trailing_zeros(y); + + if (fabs(pt.z) < MAX_DOUBLE) + sprintf(z, "%.*f", precision, pt.z); + else + sprintf(z, "%g", pt.z); + trim_trailing_zeros(z); + + if ( i ) ptr += sprintf(ptr, " "); + if (is_deegree) + ptr += sprintf(ptr, "%s %s %s", y, x, z); + else + ptr += sprintf(ptr, "%s %s %s", x, y, z); } } diff --git a/regress/gml.sql b/regress/gml.sql index 8b85fc20d..6911b3166 100644 --- a/regress/gml.sql +++ b/regress/gml.sql @@ -158,6 +158,12 @@ SELECT 'geometrycollection_03', ST_AsGML(2, GeomFromEWKT('GEOMETRYCOLLECTION(MUL SELECT 'geometrycollection_04', ST_AsGML(3, GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(3433276.43 5795308.93,3428545.3 5795827.75,3431576.99 5799084.19,3431724.2 5797152.59,3431984.2 5796564.79,3435147.61 5797649.58,3434660.86 5796941.74,3434674.52 5797030.54,3435714.36 5797022.6,3436368.88 5796951.04,3436730.03 5796768.6,3435538.55 5796267.1,3435847.22 5795917.96,3434312.09 5794846.02,3433121.69 5793670.73,3433176.36 5793489.29,3434316.04 5793940.09,3433222.92 5793040.49,3433416.13 5792891.62,3430717.47 5792600.58,3435384.08 5792877.68,3435229.15 5792177.25,3435120 5792319.07,3435088.72 5792111.21,3434484.89 5792110.2,3435777.91 5792419.49,3435717.37 5794318.12,3436895.13 5794569.43,3437621.86 5793931.6,3435597.14 5793467.9,3435246.51 5793394.63,3434722.1 5793374.87,3434712.16 5793810.3,3434773.28 5793816.87,3434629.91 5793855.31,3434992.34 5794140.1,3434927.13 5794252.29,3434958.58 5794286.16,3435120.48 5794163.36,3435850.1 5791727.49,3435930.75 5791636.32,3436268.87 5791882.68,3437110.23 5791664.12,3435960.34 5790928.2,3433545.81 5789755.43,3439096.86 5790884.26,3438576.87 5795046.69,3438396.95 5794858.59,3438193.25 5794695.6,3438447.92 5796130.77,3440688.22 5793670.37),MULTILINESTRING((3429562.6 5799490.68,3429750.99 5799199.87,3429825.45 5799078.39,3429901.8 5798961.45,3429995.54 5798822.93,3430072.89 5798719.46,3430216 5798558.95,3430272.08 5798489.33,3430393.87 5798328.51,3430463.53 5798251.11,3430532.22 5798190.16,3430591.24 5798149.53,3430667.67 5798108.9,3430723.78 5798088.58,3430797.33 5798067.95,3430857.34 5798056.34,3430912.52 5798051.5,3430961.89 5798048.59,3431052.88 5798053.43,3431159.36 5798059.24,3431218.41 5798061.18,3431366.56 5798056.09,3431474.07 5798044.47,3431568.02 5798028.97,3431644.53 5798012.51),(3433260.06 5797002.92,3433234.61 5797070.25,3433138.56 5797278.81,3433074.19 5797398.94,3433033.73 5797461.79,3432961.43 5797551.84,3432882.76 5797626.57,3432780.32 5797701.09,3432706.28 5797743.23,3432542.66 5797808.05,3432360.32 5797842.47,3432258.52 5797836.77,3432197.62 5797837.57,3432081.75 5797865.64,3431876.6 5797945.1,3431865.15 5797948.73),(3431865.15 5797948.73,3431644.53 5798012.51),(3431865.15 5797948.73,3431815.75 5797807.76),(3433260.06 5797002.92,3433361.19 5796788.54,3433467.4 5796572.78,3433670.6 5796160.06),(3433670.6 5796160.06,3433709.27 5796096.88,3433744.46 5796021.84,3433861.98 5795869.38,3434029.1 5795680.43,3434229.42 5795456.34,3434239.36 5795425.11,3434296.02 5795363.18)))'), 0); + + +SELECT 'geometrycollection_05', ST_AsGML(2, GeomFromText('GEOMETRYCOLLECTION(LINESTRING(1 2, 3 4), MULTIPOINT(5 6, 7 8), GEOMETRYCOLLECTION(POINT(9 10)))')); + +SELECT 'geometrycollection_06', ST_AsGML(3, GeomFromText('GEOMETRYCOLLECTION(LINESTRING(1 2, 3 4), MULTIPOINT(5 6, 7 8), GEOMETRYCOLLECTION(POINT(9 10)))')); + -- -- Unsupported Geometry -- (From AsKml units test) diff --git a/regress/gml_expected b/regress/gml_expected index 124657462..b02022ee5 100644 --- a/regress/gml_expected +++ b/regress/gml_expected @@ -5,59 +5,61 @@ precision_02|1.111,1.1111,1 precision_04|1.1111111,1.1111111 version_01|1,1 -version_02|1 1 +version_02|1 1 ERROR: Only GML 2 and GML 3 are supported ERROR: Only GML 2 and GML 3 are supported option_01|1,1 -option_02|1 1 -deegree_01|1 2 +option_02|1 1 +deegree_01|1 2 deegree_02|1,2 -deegree_03|2 1 -deegree_04|1 2 3 +deegree_03|2 1 +deegree_04|1 2 3 deegree_05|1,2,3 -deegree_06|2 1 3 -deegree_07|1 2 2 3 4 5 +deegree_06|2 1 3 +deegree_07|1 2 2 3 4 5 deegree_08|1,2 2,3 4,5 -deegree_09|2 1 3 2 5 4 -deegree_10|1 2 2 3 4 5 3 2 1 2 +deegree_09|2 1 3 2 5 4 +deegree_10|1 2 2 3 4 5 3 2 1 2 deegree_11|1,2 2,3 4,5 3,2 1,2 -deegree_12|2 1 3 2 5 4 2 3 2 1 -deegree_13|1 22 34 5 +deegree_12|2 1 3 2 5 4 2 3 2 1 +deegree_13|1 22 34 5 deegree_14|1,22,34,5 -deegree_15|2 13 25 4 -deegree_16|1 2 2 3 4 5 +deegree_15|2 13 25 4 +deegree_16|1 2 2 3 4 5 deegree_17|1,2 2,3 4,5 -deegree_18|2 1 3 2 5 4 -deegree_19|1 2 2 3 4 5 3 2 1 2 +deegree_18|2 1 3 2 5 4 +deegree_19|1 2 2 3 4 5 3 2 1 2 deegree_20|1,2 2,3 4,5 3,2 1,2 -deegree_21|2 1 3 2 5 4 2 3 2 1 -deegree_22|1 2 2 3 4 5 3 2 1 21 2 2 3 4 51 23 4 -deegree_23|1,2 2,3 4,5 3,2 1,21,2 2,3 4,51,23,4 -deegree_24|2 1 3 2 5 4 2 3 2 12 1 3 2 5 42 14 3 +deegree_21|2 1 3 2 5 4 2 3 2 1 +deegree_22|1 2 2 3 4 5 3 2 1 21 2 2 3 4 51 23 4 +deegree_23|1,2 2,3 4,5 3,2 1,21,2 2,3 4,51,23,4 +deegree_24|2 1 3 2 5 4 2 3 2 12 1 3 2 5 42 14 3 line_01|3429562.6,5799490.68 3429750.99,5799199.87 3429825.45,5799078.39 3429901.8,5798961.45 3429995.54,5798822.93 3430072.89,5798719.46 3430216,5798558.95 3430272.08,5798489.33 3430393.87,5798328.51 3430463.53,5798251.11 3430532.22,5798190.16 3430591.24,5798149.53 3430667.67,5798108.9 3430723.78,5798088.58 3430797.33,5798067.95 3430857.34,5798056.34 3430912.52,5798051.5 3430961.89,5798048.59 3431052.88,5798053.43 3431159.36,5798059.24 3431218.41,5798061.18 3431366.56,5798056.09 3431474.07,5798044.47 3431568.02,5798028.97 3431644.53,5798012.51 -line_02|3429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.51 +line_02|3429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.51 line_03|3429563,5799491 3429751,5799200 3429825,5799078 3429902,5798961 3429996,5798823 3430073,5798719 3430216,5798559 3430272,5798489 3430394,5798329 3430464,5798251 3430532,5798190 3430591,5798150 3430668,5798109 3430724,5798089 3430797,5798068 3430857,5798056 3430913,5798052 3430962,5798049 3431053,5798053 3431159,5798059 3431218,5798061 3431367,5798056 3431474,5798044 3431568,5798029 3431645,5798013 -line_04|3429563 5799491 3429751 5799200 3429825 5799078 3429902 5798961 3429996 5798823 3430073 5798719 3430216 5798559 3430272 5798489 3430394 5798329 3430464 5798251 3430532 5798190 3430591 5798150 3430668 5798109 3430724 5798089 3430797 5798068 3430857 5798056 3430913 5798052 3430962 5798049 3431053 5798053 3431159 5798059 3431218 5798061 3431367 5798056 3431474 5798044 3431568 5798029 3431645 5798013 +line_04|3429563 5799491 3429751 5799200 3429825 5799078 3429902 5798961 3429996 5798823 3430073 5798719 3430216 5798559 3430272 5798489 3430394 5798329 3430464 5798251 3430532 5798190 3430591 5798150 3430668 5798109 3430724 5798089 3430797 5798068 3430857 5798056 3430913 5798052 3430962 5798049 3431053 5798053 3431159 5798059 3431218 5798061 3431367 5798056 3431474 5798044 3431568 5798029 3431645 5798013 polygon_01|3429857.62,5799440.07 3429873.86,5799496.16 3429904.86,5799503.55 3429972.77,5799561.12 3430034.77,5799577.36 3430031.82,5799639.36 3430139.59,5799691.03 3430146.97,5799724.99 3430271.57,5799792.88 3430289.29,5799776.64 3430312.91,5799662.95 3430416.27,5799710.2 3430419.22,5799614.22 3430268.61,5799612.75 3430291.3,5799203.76 3430255.86,5799175.7 3430214.51,5799347 3430183.49,5799355.87 3430180.54,5799366.2 3430146.57,5799367.68 3430142.14,5799349.96 3430065.35,5799375.06 3429961.97,5799426.75 3429857.62,5799440.07 -polygon_02|3429857.62 5799440.07 3429873.86 5799496.16 3429904.86 5799503.55 3429972.77 5799561.12 3430034.77 5799577.36 3430031.82 5799639.36 3430139.59 5799691.03 3430146.97 5799724.99 3430271.57 5799792.88 3430289.29 5799776.64 3430312.91 5799662.95 3430416.27 5799710.2 3430419.22 5799614.22 3430268.61 5799612.75 3430291.3 5799203.76 3430255.86 5799175.7 3430214.51 5799347 3430183.49 5799355.87 3430180.54 5799366.2 3430146.57 5799367.68 3430142.14 5799349.96 3430065.35 5799375.06 3429961.97 5799426.75 3429857.62 5799440.07 +polygon_02|3429857.62 5799440.07 3429873.86 5799496.16 3429904.86 5799503.55 3429972.77 5799561.12 3430034.77 5799577.36 3430031.82 5799639.36 3430139.59 5799691.03 3430146.97 5799724.99 3430271.57 5799792.88 3430289.29 5799776.64 3430312.91 5799662.95 3430416.27 5799710.2 3430419.22 5799614.22 3430268.61 5799612.75 3430291.3 5799203.76 3430255.86 5799175.7 3430214.51 5799347 3430183.49 5799355.87 3430180.54 5799366.2 3430146.57 5799367.68 3430142.14 5799349.96 3430065.35 5799375.06 3429961.97 5799426.75 3429857.62 5799440.07 polygon_03|3429858,5799440 3429874,5799496 3429905,5799504 3429973,5799561 3430035,5799577 3430032,5799639 3430140,5799691 3430147,5799725 3430272,5799793 3430289,5799777 3430313,5799663 3430416,5799710 3430419,5799614 3430269,5799613 3430291,5799204 3430256,5799176 3430215,5799347 3430183,5799356 3430181,5799366 3430147,5799368 3430142,5799350 3430065,5799375 3429962,5799427 3429858,5799440 -polygon_04|3429858 5799440 3429874 5799496 3429905 5799504 3429973 5799561 3430035 5799577 3430032 5799639 3430140 5799691 3430147 5799725 3430272 5799793 3430289 5799777 3430313 5799663 3430416 5799710 3430419 5799614 3430269 5799613 3430291 5799204 3430256 5799176 3430215 5799347 3430183 5799356 3430181 5799366 3430147 5799368 3430142 5799350 3430065 5799375 3429962 5799427 3429858 5799440 +polygon_04|3429858 5799440 3429874 5799496 3429905 5799504 3429973 5799561 3430035 5799577 3430032 5799639 3430140 5799691 3430147 5799725 3430272 5799793 3430289 5799777 3430313 5799663 3430416 5799710 3430419 5799614 3430269 5799613 3430291 5799204 3430256 5799176 3430215 5799347 3430183 5799356 3430181 5799366 3430147 5799368 3430142 5799350 3430065 5799375 3429962 5799427 3429858 5799440 multipoint_01|3433276.43,5795308.933428545.3,5795827.753431576.99,5799084.193431724.2,5797152.593431984.2,5796564.793435147.61,5797649.583434660.86,5796941.743434674.52,5797030.543435714.36,5797022.63436368.88,5796951.043436730.03,5796768.63435538.55,5796267.13435847.22,5795917.963434312.09,5794846.023433121.69,5793670.733433176.36,5793489.293434316.04,5793940.093433222.92,5793040.493433416.13,5792891.623430717.47,5792600.583435384.08,5792877.683435229.15,5792177.253435120,5792319.073435088.72,5792111.213434484.89,5792110.23435777.91,5792419.493435717.37,5794318.123436895.13,5794569.433437621.86,5793931.63435597.14,5793467.93435246.51,5793394.633434722.1,5793374.873434712.16,5793810.33434773.28,5793816.873434629.91,5793855.313434992.34,5794140.13434927.13,5794252.293434958.58,5794286.163435120.48,5794163.363435850.1,5791727.493435930.75,5791636.323436268.87,5791882.683437110.23,5791664.123435960.34,5790928.23433545.81,5789755.433439096.86,5790884.263438576.87,5795046.693438396.95,5794858.593438193.25,5794695.63438447.92,5796130.773440688.22,5793670.37 -multipoint_02|3433276.43 5795308.933428545.3 5795827.753431576.99 5799084.193431724.2 5797152.593431984.2 5796564.793435147.61 5797649.583434660.86 5796941.743434674.52 5797030.543435714.36 5797022.63436368.88 5796951.043436730.03 5796768.63435538.55 5796267.13435847.22 5795917.963434312.09 5794846.023433121.69 5793670.733433176.36 5793489.293434316.04 5793940.093433222.92 5793040.493433416.13 5792891.623430717.47 5792600.583435384.08 5792877.683435229.15 5792177.253435120 5792319.073435088.72 5792111.213434484.89 5792110.23435777.91 5792419.493435717.37 5794318.123436895.13 5794569.433437621.86 5793931.63435597.14 5793467.93435246.51 5793394.633434722.1 5793374.873434712.16 5793810.33434773.28 5793816.873434629.91 5793855.313434992.34 5794140.13434927.13 5794252.293434958.58 5794286.163435120.48 5794163.363435850.1 5791727.493435930.75 5791636.323436268.87 5791882.683437110.23 5791664.123435960.34 5790928.23433545.81 5789755.433439096.86 5790884.263438576.87 5795046.693438396.95 5794858.593438193.25 5794695.63438447.92 5796130.773440688.22 5793670.37 +multipoint_02|3433276.43 5795308.933428545.3 5795827.753431576.99 5799084.193431724.2 5797152.593431984.2 5796564.793435147.61 5797649.583434660.86 5796941.743434674.52 5797030.543435714.36 5797022.63436368.88 5796951.043436730.03 5796768.63435538.55 5796267.13435847.22 5795917.963434312.09 5794846.023433121.69 5793670.733433176.36 5793489.293434316.04 5793940.093433222.92 5793040.493433416.13 5792891.623430717.47 5792600.583435384.08 5792877.683435229.15 5792177.253435120 5792319.073435088.72 5792111.213434484.89 5792110.23435777.91 5792419.493435717.37 5794318.123436895.13 5794569.433437621.86 5793931.63435597.14 5793467.93435246.51 5793394.633434722.1 5793374.873434712.16 5793810.33434773.28 5793816.873434629.91 5793855.313434992.34 5794140.13434927.13 5794252.293434958.58 5794286.163435120.48 5794163.363435850.1 5791727.493435930.75 5791636.323436268.87 5791882.683437110.23 5791664.123435960.34 5790928.23433545.81 5789755.433439096.86 5790884.263438576.87 5795046.693438396.95 5794858.593438193.25 5794695.63438447.92 5796130.773440688.22 5793670.37 multipoint_03|3433276,57953093428545,57958283431577,57990843431724,57971533431984,57965653435148,57976503434661,57969423434675,57970313435714,57970233436369,57969513436730,57967693435539,57962673435847,57959183434312,57948463433122,57936713433176,57934893434316,57939403433223,57930403433416,57928923430717,57926013435384,57928783435229,57921773435120,57923193435089,57921113434485,57921103435778,57924193435717,57943183436895,57945693437622,57939323435597,57934683435247,57933953434722,57933753434712,57938103434773,57938173434630,57938553434992,57941403434927,57942523434959,57942863435120,57941633435850,57917273435931,57916363436269,57918833437110,57916643435960,57909283433546,57897553439097,57908843438577,57950473438397,57948593438193,57946963438448,57961313440688,5793670 -multipoint_04|3433276 57953093428545 57958283431577 57990843431724 57971533431984 57965653435148 57976503434661 57969423434675 57970313435714 57970233436369 57969513436730 57967693435539 57962673435847 57959183434312 57948463433122 57936713433176 57934893434316 57939403433223 57930403433416 57928923430717 57926013435384 57928783435229 57921773435120 57923193435089 57921113434485 57921103435778 57924193435717 57943183436895 57945693437622 57939323435597 57934683435247 57933953434722 57933753434712 57938103434773 57938173434630 57938553434992 57941403434927 57942523434959 57942863435120 57941633435850 57917273435931 57916363436269 57918833437110 57916643435960 57909283433546 57897553439097 57908843438577 57950473438397 57948593438193 57946963438448 57961313440688 5793670 +multipoint_04|3433276 57953093428545 57958283431577 57990843431724 57971533431984 57965653435148 57976503434661 57969423434675 57970313435714 57970233436369 57969513436730 57967693435539 57962673435847 57959183434312 57948463433122 57936713433176 57934893434316 57939403433223 57930403433416 57928923430717 57926013435384 57928783435229 57921773435120 57923193435089 57921113434485 57921103435778 57924193435717 57943183436895 57945693437622 57939323435597 57934683435247 57933953434722 57933753434712 57938103434773 57938173434630 57938553434992 57941403434927 57942523434959 57942863435120 57941633435850 57917273435931 57916363436269 57918833437110 57916643435960 57909283433546 57897553439097 57908843438577 57950473438397 57948593438193 57946963438448 57961313440688 5793670 multiline_01|3429562.6,5799490.68 3429750.99,5799199.87 3429825.45,5799078.39 3429901.8,5798961.45 3429995.54,5798822.93 3430072.89,5798719.46 3430216,5798558.95 3430272.08,5798489.33 3430393.87,5798328.51 3430463.53,5798251.11 3430532.22,5798190.16 3430591.24,5798149.53 3430667.67,5798108.9 3430723.78,5798088.58 3430797.33,5798067.95 3430857.34,5798056.34 3430912.52,5798051.5 3430961.89,5798048.59 3431052.88,5798053.43 3431159.36,5798059.24 3431218.41,5798061.18 3431366.56,5798056.09 3431474.07,5798044.47 3431568.02,5798028.97 3431644.53,5798012.513433260.06,5797002.92 3433234.61,5797070.25 3433138.56,5797278.81 3433074.19,5797398.94 3433033.73,5797461.79 3432961.43,5797551.84 3432882.76,5797626.57 3432780.32,5797701.09 3432706.28,5797743.23 3432542.66,5797808.05 3432360.32,5797842.47 3432258.52,5797836.77 3432197.62,5797837.57 3432081.75,5797865.64 3431876.6,5797945.1 3431865.15,5797948.733431865.15,5797948.73 3431644.53,5798012.513431865.15,5797948.73 3431815.75,5797807.763433260.06,5797002.92 3433361.19,5796788.54 3433467.4,5796572.78 3433670.6,5796160.063433670.6,5796160.06 3433709.27,5796096.88 3433744.46,5796021.84 3433861.98,5795869.38 3434029.1,5795680.43 3434229.42,5795456.34 3434239.36,5795425.11 3434296.02,5795363.18 -multiline_02|3429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.513433260.06 5797002.92 3433234.61 5797070.25 3433138.56 5797278.81 3433074.19 5797398.94 3433033.73 5797461.79 3432961.43 5797551.84 3432882.76 5797626.57 3432780.32 5797701.09 3432706.28 5797743.23 3432542.66 5797808.05 3432360.32 5797842.47 3432258.52 5797836.77 3432197.62 5797837.57 3432081.75 5797865.64 3431876.6 5797945.1 3431865.15 5797948.733431865.15 5797948.73 3431644.53 5798012.513431865.15 5797948.73 3431815.75 5797807.763433260.06 5797002.92 3433361.19 5796788.54 3433467.4 5796572.78 3433670.6 5796160.063433670.6 5796160.06 3433709.27 5796096.88 3433744.46 5796021.84 3433861.98 5795869.38 3434029.1 5795680.43 3434229.42 5795456.34 3434239.36 5795425.11 3434296.02 5795363.18 +multiline_02|3429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.513433260.06 5797002.92 3433234.61 5797070.25 3433138.56 5797278.81 3433074.19 5797398.94 3433033.73 5797461.79 3432961.43 5797551.84 3432882.76 5797626.57 3432780.32 5797701.09 3432706.28 5797743.23 3432542.66 5797808.05 3432360.32 5797842.47 3432258.52 5797836.77 3432197.62 5797837.57 3432081.75 5797865.64 3431876.6 5797945.1 3431865.15 5797948.733431865.15 5797948.73 3431644.53 5798012.513431865.15 5797948.73 3431815.75 5797807.763433260.06 5797002.92 3433361.19 5796788.54 3433467.4 5796572.78 3433670.6 5796160.063433670.6 5796160.06 3433709.27 5796096.88 3433744.46 5796021.84 3433861.98 5795869.38 3434029.1 5795680.43 3434229.42 5795456.34 3434239.36 5795425.11 3434296.02 5795363.18 multiline_03|3429563,5799491 3429751,5799200 3429825,5799078 3429902,5798961 3429996,5798823 3430073,5798719 3430216,5798559 3430272,5798489 3430394,5798329 3430464,5798251 3430532,5798190 3430591,5798150 3430668,5798109 3430724,5798089 3430797,5798068 3430857,5798056 3430913,5798052 3430962,5798049 3431053,5798053 3431159,5798059 3431218,5798061 3431367,5798056 3431474,5798044 3431568,5798029 3431645,57980133433260,5797003 3433235,5797070 3433139,5797279 3433074,5797399 3433034,5797462 3432961,5797552 3432883,5797627 3432780,5797701 3432706,5797743 3432543,5797808 3432360,5797842 3432259,5797837 3432198,5797838 3432082,5797866 3431877,5797945 3431865,57979493431865,5797949 3431645,57980133431865,5797949 3431816,57978083433260,5797003 3433361,5796789 3433467,5796573 3433671,57961603433671,5796160 3433709,5796097 3433744,5796022 3433862,5795869 3434029,5795680 3434229,5795456 3434239,5795425 3434296,5795363 multiline_04|3429563,5799491 3429751,5799200 3429825,5799078 3429902,5798961 3429996,5798823 3430073,5798719 3430216,5798559 3430272,5798489 3430394,5798329 3430464,5798251 3430532,5798190 3430591,5798150 3430668,5798109 3430724,5798089 3430797,5798068 3430857,5798056 3430913,5798052 3430962,5798049 3431053,5798053 3431159,5798059 3431218,5798061 3431367,5798056 3431474,5798044 3431568,5798029 3431645,57980133433260,5797003 3433235,5797070 3433139,5797279 3433074,5797399 3433034,5797462 3432961,5797552 3432883,5797627 3432780,5797701 3432706,5797743 3432543,5797808 3432360,5797842 3432259,5797837 3432198,5797838 3432082,5797866 3431877,5797945 3431865,57979493431865,5797949 3431645,57980133431865,5797949 3431816,57978083433260,5797003 3433361,5796789 3433467,5796573 3433671,57961603433671,5796160 3433709,5796097 3433744,5796022 3433862,5795869 3434029,5795680 3434229,5795456 3434239,5795425 3434296,5795363 multipolygon_01|3429699.81,5795851.64 3429736.72,5795796.01 3429754.71,5795768.88 3429996.1,5795489.98 3430100.67,5795435.76 3430122.61,5795446.09 3430138.1,5795560.98 3430311.09,5795559.69 3430309.8,5795470.62 3430329.16,5795416.4 3430326.58,5795399.62 3430157.47,5795418.98 3430156.14,5795407.32 3430139.36,5795396.99 3429983.19,5795394.41 3429976.74,5795420.22 3429789.59,5795418.93 3429643.74,5795475.72 3429635.72,5795615.31 3429484.94,5795556.38 3429315.44,5795496.32 3429326.12,5795748.57 3429129.92,5795704.53 3429176.64,5795776.6 3429100.6,5795797.17 3428900.44,5795742.46 3428896.43,5795779.82 3428805.69,5795953.3 3428897.77,5796025.35 3428897.77,5796225.99 3428696.32,5796199.31 3428681.64,5796217.99 3428680.31,5796290.03 3428290.14,5796351.8 3428389.67,5796413.87 3428837.71,5796561.12 3428991.08,5796495.01 3429076.4,5796760.29 3429428.31,5796723.61 3429474.96,5796690.29 3429696.2,5796600.99 3429658.88,5796429.06 3429536.27,5796363.75 3429529.6,5796333.1 3429446.08,5796253.84 3429699.81,5795851.643429857.62,5799440.07 3429873.86,5799496.16 3429904.86,5799503.55 3429972.77,5799561.12 3430034.77,5799577.36 3430031.82,5799639.36 3430139.59,5799691.03 3430146.97,5799724.99 3430271.57,5799792.88 3430289.29,5799776.64 3430312.91,5799662.95 3430416.27,5799710.2 3430419.22,5799614.22 3430268.61,5799612.75 3430291.3,5799203.76 3430255.86,5799175.7 3430214.51,5799347 3430183.49,5799355.87 3430180.54,5799366.2 3430146.57,5799367.68 3430142.14,5799349.96 3430065.35,5799375.06 3429961.97,5799426.75 3429857.62,5799440.07 -multipolygon_02|3429699.81 5795851.64 3429736.72 5795796.01 3429754.71 5795768.88 3429996.1 5795489.98 3430100.67 5795435.76 3430122.61 5795446.09 3430138.1 5795560.98 3430311.09 5795559.69 3430309.8 5795470.62 3430329.16 5795416.4 3430326.58 5795399.62 3430157.47 5795418.98 3430156.14 5795407.32 3430139.36 5795396.99 3429983.19 5795394.41 3429976.74 5795420.22 3429789.59 5795418.93 3429643.74 5795475.72 3429635.72 5795615.31 3429484.94 5795556.38 3429315.44 5795496.32 3429326.12 5795748.57 3429129.92 5795704.53 3429176.64 5795776.6 3429100.6 5795797.17 3428900.44 5795742.46 3428896.43 5795779.82 3428805.69 5795953.3 3428897.77 5796025.35 3428897.77 5796225.99 3428696.32 5796199.31 3428681.64 5796217.99 3428680.31 5796290.03 3428290.14 5796351.8 3428389.67 5796413.87 3428837.71 5796561.12 3428991.08 5796495.01 3429076.4 5796760.29 3429428.31 5796723.61 3429474.96 5796690.29 3429696.2 5796600.99 3429658.88 5796429.06 3429536.27 5796363.75 3429529.6 5796333.1 3429446.08 5796253.84 3429699.81 5795851.643429857.62 5799440.07 3429873.86 5799496.16 3429904.86 5799503.55 3429972.77 5799561.12 3430034.77 5799577.36 3430031.82 5799639.36 3430139.59 5799691.03 3430146.97 5799724.99 3430271.57 5799792.88 3430289.29 5799776.64 3430312.91 5799662.95 3430416.27 5799710.2 3430419.22 5799614.22 3430268.61 5799612.75 3430291.3 5799203.76 3430255.86 5799175.7 3430214.51 5799347 3430183.49 5799355.87 3430180.54 5799366.2 3430146.57 5799367.68 3430142.14 5799349.96 3430065.35 5799375.06 3429961.97 5799426.75 3429857.62 5799440.07 +multipolygon_02|3429699.81 5795851.64 3429736.72 5795796.01 3429754.71 5795768.88 3429996.1 5795489.98 3430100.67 5795435.76 3430122.61 5795446.09 3430138.1 5795560.98 3430311.09 5795559.69 3430309.8 5795470.62 3430329.16 5795416.4 3430326.58 5795399.62 3430157.47 5795418.98 3430156.14 5795407.32 3430139.36 5795396.99 3429983.19 5795394.41 3429976.74 5795420.22 3429789.59 5795418.93 3429643.74 5795475.72 3429635.72 5795615.31 3429484.94 5795556.38 3429315.44 5795496.32 3429326.12 5795748.57 3429129.92 5795704.53 3429176.64 5795776.6 3429100.6 5795797.17 3428900.44 5795742.46 3428896.43 5795779.82 3428805.69 5795953.3 3428897.77 5796025.35 3428897.77 5796225.99 3428696.32 5796199.31 3428681.64 5796217.99 3428680.31 5796290.03 3428290.14 5796351.8 3428389.67 5796413.87 3428837.71 5796561.12 3428991.08 5796495.01 3429076.4 5796760.29 3429428.31 5796723.61 3429474.96 5796690.29 3429696.2 5796600.99 3429658.88 5796429.06 3429536.27 5796363.75 3429529.6 5796333.1 3429446.08 5796253.84 3429699.81 5795851.643429857.62 5799440.07 3429873.86 5799496.16 3429904.86 5799503.55 3429972.77 5799561.12 3430034.77 5799577.36 3430031.82 5799639.36 3430139.59 5799691.03 3430146.97 5799724.99 3430271.57 5799792.88 3430289.29 5799776.64 3430312.91 5799662.95 3430416.27 5799710.2 3430419.22 5799614.22 3430268.61 5799612.75 3430291.3 5799203.76 3430255.86 5799175.7 3430214.51 5799347 3430183.49 5799355.87 3430180.54 5799366.2 3430146.57 5799367.68 3430142.14 5799349.96 3430065.35 5799375.06 3429961.97 5799426.75 3429857.62 5799440.07 multipolygon_03|3429700,5795852 3429737,5795796 3429755,5795769 3429996,5795490 3430101,5795436 3430123,5795446 3430138,5795561 3430311,5795560 3430310,5795471 3430329,5795416 3430327,5795400 3430157,5795419 3430156,5795407 3430139,5795397 3429983,5795394 3429977,5795420 3429790,5795419 3429644,5795476 3429636,5795615 3429485,5795556 3429315,5795496 3429326,5795749 3429130,5795705 3429177,5795777 3429101,5795797 3428900,5795742 3428896,5795780 3428806,5795953 3428898,5796025 3428898,5796226 3428696,5796199 3428682,5796218 3428680,5796290 3428290,5796352 3428390,5796414 3428838,5796561 3428991,5796495 3429076,5796760 3429428,5796724 3429475,5796690 3429696,5796601 3429659,5796429 3429536,5796364 3429530,5796333 3429446,5796254 3429700,57958523429858,5799440 3429874,5799496 3429905,5799504 3429973,5799561 3430035,5799577 3430032,5799639 3430140,5799691 3430147,5799725 3430272,5799793 3430289,5799777 3430313,5799663 3430416,5799710 3430419,5799614 3430269,5799613 3430291,5799204 3430256,5799176 3430215,5799347 3430183,5799356 3430181,5799366 3430147,5799368 3430142,5799350 3430065,5799375 3429962,5799427 3429858,5799440 -multipolygon_04|3429700 5795852 3429737 5795796 3429755 5795769 3429996 5795490 3430101 5795436 3430123 5795446 3430138 5795561 3430311 5795560 3430310 5795471 3430329 5795416 3430327 5795400 3430157 5795419 3430156 5795407 3430139 5795397 3429983 5795394 3429977 5795420 3429790 5795419 3429644 5795476 3429636 5795615 3429485 5795556 3429315 5795496 3429326 5795749 3429130 5795705 3429177 5795777 3429101 5795797 3428900 5795742 3428896 5795780 3428806 5795953 3428898 5796025 3428898 5796226 3428696 5796199 3428682 5796218 3428680 5796290 3428290 5796352 3428390 5796414 3428838 5796561 3428991 5796495 3429076 5796760 3429428 5796724 3429475 5796690 3429696 5796601 3429659 5796429 3429536 5796364 3429530 5796333 3429446 5796254 3429700 57958523429858 5799440 3429874 5799496 3429905 5799504 3429973 5799561 3430035 5799577 3430032 5799639 3430140 5799691 3430147 5799725 3430272 5799793 3430289 5799777 3430313 5799663 3430416 5799710 3430419 5799614 3430269 5799613 3430291 5799204 3430256 5799176 3430215 5799347 3430183 5799356 3430181 5799366 3430147 5799368 3430142 5799350 3430065 5799375 3429962 5799427 3429858 5799440 -geometrycollection_01|3433276.43,5795308.933428545.3,5795827.753431576.99,5799084.193431724.2,5797152.593431984.2,5796564.793435147.61,5797649.583434660.86,5796941.743434674.52,5797030.543435714.36,5797022.63436368.88,5796951.043436730.03,5796768.63435538.55,5796267.13435847.22,5795917.963434312.09,5794846.023433121.69,5793670.733433176.36,5793489.293434316.04,5793940.093433222.92,5793040.493433416.13,5792891.623430717.47,5792600.583435384.08,5792877.683435229.15,5792177.253435120,5792319.073435088.72,5792111.213434484.89,5792110.23435777.91,5792419.493435717.37,5794318.123436895.13,5794569.433437621.86,5793931.63435597.14,5793467.93435246.51,5793394.633434722.1,5793374.873434712.16,5793810.33434773.28,5793816.873434629.91,5793855.313434992.34,5794140.13434927.13,5794252.293434958.58,5794286.163435120.48,5794163.363435850.1,5791727.493435930.75,5791636.323436268.87,5791882.683437110.23,5791664.123435960.34,5790928.23433545.81,5789755.433439096.86,5790884.263438576.87,5795046.693438396.95,5794858.593438193.25,5794695.63438447.92,5796130.773440688.22,5793670.373429562.6,5799490.68 3429750.99,5799199.87 3429825.45,5799078.39 3429901.8,5798961.45 3429995.54,5798822.93 3430072.89,5798719.46 3430216,5798558.95 3430272.08,5798489.33 3430393.87,5798328.51 3430463.53,5798251.11 3430532.22,5798190.16 3430591.24,5798149.53 3430667.67,5798108.9 3430723.78,5798088.58 3430797.33,5798067.95 3430857.34,5798056.34 3430912.52,5798051.5 3430961.89,5798048.59 3431052.88,5798053.43 3431159.36,5798059.24 3431218.41,5798061.18 3431366.56,5798056.09 3431474.07,5798044.47 3431568.02,5798028.97 3431644.53,5798012.513433260.06,5797002.92 3433234.61,5797070.25 3433138.56,5797278.81 3433074.19,5797398.94 3433033.73,5797461.79 3432961.43,5797551.84 3432882.76,5797626.57 3432780.32,5797701.09 3432706.28,5797743.23 3432542.66,5797808.05 3432360.32,5797842.47 3432258.52,5797836.77 3432197.62,5797837.57 3432081.75,5797865.64 3431876.6,5797945.1 3431865.15,5797948.733431865.15,5797948.73 3431644.53,5798012.513431865.15,5797948.73 3431815.75,5797807.763433260.06,5797002.92 3433361.19,5796788.54 3433467.4,5796572.78 3433670.6,5796160.063433670.6,5796160.06 3433709.27,5796096.88 3433744.46,5796021.84 3433861.98,5795869.38 3434029.1,5795680.43 3434229.42,5795456.34 3434239.36,5795425.11 3434296.02,5795363.18 -geometrycollection_02|3433276.43 5795308.933428545.3 5795827.753431576.99 5799084.193431724.2 5797152.593431984.2 5796564.793435147.61 5797649.583434660.86 5796941.743434674.52 5797030.543435714.36 5797022.63436368.88 5796951.043436730.03 5796768.63435538.55 5796267.13435847.22 5795917.963434312.09 5794846.023433121.69 5793670.733433176.36 5793489.293434316.04 5793940.093433222.92 5793040.493433416.13 5792891.623430717.47 5792600.583435384.08 5792877.683435229.15 5792177.253435120 5792319.073435088.72 5792111.213434484.89 5792110.23435777.91 5792419.493435717.37 5794318.123436895.13 5794569.433437621.86 5793931.63435597.14 5793467.93435246.51 5793394.633434722.1 5793374.873434712.16 5793810.33434773.28 5793816.873434629.91 5793855.313434992.34 5794140.13434927.13 5794252.293434958.58 5794286.163435120.48 5794163.363435850.1 5791727.493435930.75 5791636.323436268.87 5791882.683437110.23 5791664.123435960.34 5790928.23433545.81 5789755.433439096.86 5790884.263438576.87 5795046.693438396.95 5794858.593438193.25 5794695.63438447.92 5796130.773440688.22 5793670.373429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.513433260.06 5797002.92 3433234.61 5797070.25 3433138.56 5797278.81 3433074.19 5797398.94 3433033.73 5797461.79 3432961.43 5797551.84 3432882.76 5797626.57 3432780.32 5797701.09 3432706.28 5797743.23 3432542.66 5797808.05 3432360.32 5797842.47 3432258.52 5797836.77 3432197.62 5797837.57 3432081.75 5797865.64 3431876.6 5797945.1 3431865.15 5797948.733431865.15 5797948.73 3431644.53 5798012.513431865.15 5797948.73 3431815.75 5797807.763433260.06 5797002.92 3433361.19 5796788.54 3433467.4 5796572.78 3433670.6 5796160.063433670.6 5796160.06 3433709.27 5796096.88 3433744.46 5796021.84 3433861.98 5795869.38 3434029.1 5795680.43 3434229.42 5795456.34 3434239.36 5795425.11 3434296.02 5795363.18 -geometrycollection_03|3433276,57953093428545,57958283431577,57990843431724,57971533431984,57965653435148,57976503434661,57969423434675,57970313435714,57970233436369,57969513436730,57967693435539,57962673435847,57959183434312,57948463433122,57936713433176,57934893434316,57939403433223,57930403433416,57928923430717,57926013435384,57928783435229,57921773435120,57923193435089,57921113434485,57921103435778,57924193435717,57943183436895,57945693437622,57939323435597,57934683435247,57933953434722,57933753434712,57938103434773,57938173434630,57938553434992,57941403434927,57942523434959,57942863435120,57941633435850,57917273435931,57916363436269,57918833437110,57916643435960,57909283433546,57897553439097,57908843438577,57950473438397,57948593438193,57946963438448,57961313440688,57936703429563,5799491 3429751,5799200 3429825,5799078 3429902,5798961 3429996,5798823 3430073,5798719 3430216,5798559 3430272,5798489 3430394,5798329 3430464,5798251 3430532,5798190 3430591,5798150 3430668,5798109 3430724,5798089 3430797,5798068 3430857,5798056 3430913,5798052 3430962,5798049 3431053,5798053 3431159,5798059 3431218,5798061 3431367,5798056 3431474,5798044 3431568,5798029 3431645,57980133433260,5797003 3433235,5797070 3433139,5797279 3433074,5797399 3433034,5797462 3432961,5797552 3432883,5797627 3432780,5797701 3432706,5797743 3432543,5797808 3432360,5797842 3432259,5797837 3432198,5797838 3432082,5797866 3431877,5797945 3431865,57979493431865,5797949 3431645,57980133431865,5797949 3431816,57978083433260,5797003 3433361,5796789 3433467,5796573 3433671,57961603433671,5796160 3433709,5796097 3433744,5796022 3433862,5795869 3434029,5795680 3434229,5795456 3434239,5795425 3434296,5795363 -geometrycollection_04|3433276 57953093428545 57958283431577 57990843431724 57971533431984 57965653435148 57976503434661 57969423434675 57970313435714 57970233436369 57969513436730 57967693435539 57962673435847 57959183434312 57948463433122 57936713433176 57934893434316 57939403433223 57930403433416 57928923430717 57926013435384 57928783435229 57921773435120 57923193435089 57921113434485 57921103435778 57924193435717 57943183436895 57945693437622 57939323435597 57934683435247 57933953434722 57933753434712 57938103434773 57938173434630 57938553434992 57941403434927 57942523434959 57942863435120 57941633435850 57917273435931 57916363436269 57918833437110 57916643435960 57909283433546 57897553439097 57908843438577 57950473438397 57948593438193 57946963438448 57961313440688 57936703429563 5799491 3429751 5799200 3429825 5799078 3429902 5798961 3429996 5798823 3430073 5798719 3430216 5798559 3430272 5798489 3430394 5798329 3430464 5798251 3430532 5798190 3430591 5798150 3430668 5798109 3430724 5798089 3430797 5798068 3430857 5798056 3430913 5798052 3430962 5798049 3431053 5798053 3431159 5798059 3431218 5798061 3431367 5798056 3431474 5798044 3431568 5798029 3431645 57980133433260 5797003 3433235 5797070 3433139 5797279 3433074 5797399 3433034 5797462 3432961 5797552 3432883 5797627 3432780 5797701 3432706 5797743 3432543 5797808 3432360 5797842 3432259 5797837 3432198 5797838 3432082 5797866 3431877 5797945 3431865 57979493431865 5797949 3431645 57980133431865 5797949 3431816 57978083433260 5797003 3433361 5796789 3433467 5796573 3433671 57961603433671 5796160 3433709 5796097 3433744 5796022 3433862 5795869 3434029 5795680 3434229 5795456 3434239 5795425 3434296 5795363 +multipolygon_04|3429700 5795852 3429737 5795796 3429755 5795769 3429996 5795490 3430101 5795436 3430123 5795446 3430138 5795561 3430311 5795560 3430310 5795471 3430329 5795416 3430327 5795400 3430157 5795419 3430156 5795407 3430139 5795397 3429983 5795394 3429977 5795420 3429790 5795419 3429644 5795476 3429636 5795615 3429485 5795556 3429315 5795496 3429326 5795749 3429130 5795705 3429177 5795777 3429101 5795797 3428900 5795742 3428896 5795780 3428806 5795953 3428898 5796025 3428898 5796226 3428696 5796199 3428682 5796218 3428680 5796290 3428290 5796352 3428390 5796414 3428838 5796561 3428991 5796495 3429076 5796760 3429428 5796724 3429475 5796690 3429696 5796601 3429659 5796429 3429536 5796364 3429530 5796333 3429446 5796254 3429700 57958523429858 5799440 3429874 5799496 3429905 5799504 3429973 5799561 3430035 5799577 3430032 5799639 3430140 5799691 3430147 5799725 3430272 5799793 3430289 5799777 3430313 5799663 3430416 5799710 3430419 5799614 3430269 5799613 3430291 5799204 3430256 5799176 3430215 5799347 3430183 5799356 3430181 5799366 3430147 5799368 3430142 5799350 3430065 5799375 3429962 5799427 3429858 5799440 +geometrycollection_01|3433276.43,5795308.933428545.3,5795827.753431576.99,5799084.193431724.2,5797152.593431984.2,5796564.793435147.61,5797649.583434660.86,5796941.743434674.52,5797030.543435714.36,5797022.63436368.88,5796951.043436730.03,5796768.63435538.55,5796267.13435847.22,5795917.963434312.09,5794846.023433121.69,5793670.733433176.36,5793489.293434316.04,5793940.093433222.92,5793040.493433416.13,5792891.623430717.47,5792600.583435384.08,5792877.683435229.15,5792177.253435120,5792319.073435088.72,5792111.213434484.89,5792110.23435777.91,5792419.493435717.37,5794318.123436895.13,5794569.433437621.86,5793931.63435597.14,5793467.93435246.51,5793394.633434722.1,5793374.873434712.16,5793810.33434773.28,5793816.873434629.91,5793855.313434992.34,5794140.13434927.13,5794252.293434958.58,5794286.163435120.48,5794163.363435850.1,5791727.493435930.75,5791636.323436268.87,5791882.683437110.23,5791664.123435960.34,5790928.23433545.81,5789755.433439096.86,5790884.263438576.87,5795046.693438396.95,5794858.593438193.25,5794695.63438447.92,5796130.773440688.22,5793670.373429562.6,5799490.68 3429750.99,5799199.87 3429825.45,5799078.39 3429901.8,5798961.45 3429995.54,5798822.93 3430072.89,5798719.46 3430216,5798558.95 3430272.08,5798489.33 3430393.87,5798328.51 3430463.53,5798251.11 3430532.22,5798190.16 3430591.24,5798149.53 3430667.67,5798108.9 3430723.78,5798088.58 3430797.33,5798067.95 3430857.34,5798056.34 3430912.52,5798051.5 3430961.89,5798048.59 3431052.88,5798053.43 3431159.36,5798059.24 3431218.41,5798061.18 3431366.56,5798056.09 3431474.07,5798044.47 3431568.02,5798028.97 3431644.53,5798012.513433260.06,5797002.92 3433234.61,5797070.25 3433138.56,5797278.81 3433074.19,5797398.94 3433033.73,5797461.79 3432961.43,5797551.84 3432882.76,5797626.57 3432780.32,5797701.09 3432706.28,5797743.23 3432542.66,5797808.05 3432360.32,5797842.47 3432258.52,5797836.77 3432197.62,5797837.57 3432081.75,5797865.64 3431876.6,5797945.1 3431865.15,5797948.733431865.15,5797948.73 3431644.53,5798012.513431865.15,5797948.73 3431815.75,5797807.763433260.06,5797002.92 3433361.19,5796788.54 3433467.4,5796572.78 3433670.6,5796160.063433670.6,5796160.06 3433709.27,5796096.88 3433744.46,5796021.84 3433861.98,5795869.38 3434029.1,5795680.43 3434229.42,5795456.34 3434239.36,5795425.11 3434296.02,5795363.18 +geometrycollection_02|3433276.43 5795308.933428545.3 5795827.753431576.99 5799084.193431724.2 5797152.593431984.2 5796564.793435147.61 5797649.583434660.86 5796941.743434674.52 5797030.543435714.36 5797022.63436368.88 5796951.043436730.03 5796768.63435538.55 5796267.13435847.22 5795917.963434312.09 5794846.023433121.69 5793670.733433176.36 5793489.293434316.04 5793940.093433222.92 5793040.493433416.13 5792891.623430717.47 5792600.583435384.08 5792877.683435229.15 5792177.253435120 5792319.073435088.72 5792111.213434484.89 5792110.23435777.91 5792419.493435717.37 5794318.123436895.13 5794569.433437621.86 5793931.63435597.14 5793467.93435246.51 5793394.633434722.1 5793374.873434712.16 5793810.33434773.28 5793816.873434629.91 5793855.313434992.34 5794140.13434927.13 5794252.293434958.58 5794286.163435120.48 5794163.363435850.1 5791727.493435930.75 5791636.323436268.87 5791882.683437110.23 5791664.123435960.34 5790928.23433545.81 5789755.433439096.86 5790884.263438576.87 5795046.693438396.95 5794858.593438193.25 5794695.63438447.92 5796130.773440688.22 5793670.373429562.6 5799490.68 3429750.99 5799199.87 3429825.45 5799078.39 3429901.8 5798961.45 3429995.54 5798822.93 3430072.89 5798719.46 3430216 5798558.95 3430272.08 5798489.33 3430393.87 5798328.51 3430463.53 5798251.11 3430532.22 5798190.16 3430591.24 5798149.53 3430667.67 5798108.9 3430723.78 5798088.58 3430797.33 5798067.95 3430857.34 5798056.34 3430912.52 5798051.5 3430961.89 5798048.59 3431052.88 5798053.43 3431159.36 5798059.24 3431218.41 5798061.18 3431366.56 5798056.09 3431474.07 5798044.47 3431568.02 5798028.97 3431644.53 5798012.513433260.06 5797002.92 3433234.61 5797070.25 3433138.56 5797278.81 3433074.19 5797398.94 3433033.73 5797461.79 3432961.43 5797551.84 3432882.76 5797626.57 3432780.32 5797701.09 3432706.28 5797743.23 3432542.66 5797808.05 3432360.32 5797842.47 3432258.52 5797836.77 3432197.62 5797837.57 3432081.75 5797865.64 3431876.6 5797945.1 3431865.15 5797948.733431865.15 5797948.73 3431644.53 5798012.513431865.15 5797948.73 3431815.75 5797807.763433260.06 5797002.92 3433361.19 5796788.54 3433467.4 5796572.78 3433670.6 5796160.063433670.6 5796160.06 3433709.27 5796096.88 3433744.46 5796021.84 3433861.98 5795869.38 3434029.1 5795680.43 3434229.42 5795456.34 3434239.36 5795425.11 3434296.02 5795363.18 +geometrycollection_03|3433276,57953093428545,57958283431577,57990843431724,57971533431984,57965653435148,57976503434661,57969423434675,57970313435714,57970233436369,57969513436730,57967693435539,57962673435847,57959183434312,57948463433122,57936713433176,57934893434316,57939403433223,57930403433416,57928923430717,57926013435384,57928783435229,57921773435120,57923193435089,57921113434485,57921103435778,57924193435717,57943183436895,57945693437622,57939323435597,57934683435247,57933953434722,57933753434712,57938103434773,57938173434630,57938553434992,57941403434927,57942523434959,57942863435120,57941633435850,57917273435931,57916363436269,57918833437110,57916643435960,57909283433546,57897553439097,57908843438577,57950473438397,57948593438193,57946963438448,57961313440688,57936703429563,5799491 3429751,5799200 3429825,5799078 3429902,5798961 3429996,5798823 3430073,5798719 3430216,5798559 3430272,5798489 3430394,5798329 3430464,5798251 3430532,5798190 3430591,5798150 3430668,5798109 3430724,5798089 3430797,5798068 3430857,5798056 3430913,5798052 3430962,5798049 3431053,5798053 3431159,5798059 3431218,5798061 3431367,5798056 3431474,5798044 3431568,5798029 3431645,57980133433260,5797003 3433235,5797070 3433139,5797279 3433074,5797399 3433034,5797462 3432961,5797552 3432883,5797627 3432780,5797701 3432706,5797743 3432543,5797808 3432360,5797842 3432259,5797837 3432198,5797838 3432082,5797866 3431877,5797945 3431865,57979493431865,5797949 3431645,57980133431865,5797949 3431816,57978083433260,5797003 3433361,5796789 3433467,5796573 3433671,57961603433671,5796160 3433709,5796097 3433744,5796022 3433862,5795869 3434029,5795680 3434229,5795456 3434239,5795425 3434296,5795363 +geometrycollection_04|3433276 57953093428545 57958283431577 57990843431724 57971533431984 57965653435148 57976503434661 57969423434675 57970313435714 57970233436369 57969513436730 57967693435539 57962673435847 57959183434312 57948463433122 57936713433176 57934893434316 57939403433223 57930403433416 57928923430717 57926013435384 57928783435229 57921773435120 57923193435089 57921113434485 57921103435778 57924193435717 57943183436895 57945693437622 57939323435597 57934683435247 57933953434722 57933753434712 57938103434773 57938173434630 57938553434992 57941403434927 57942523434959 57942863435120 57941633435850 57917273435931 57916363436269 57918833437110 57916643435960 57909283433546 57897553439097 57908843438577 57950473438397 57948593438193 57946963438448 57961313440688 57936703429563 5799491 3429751 5799200 3429825 5799078 3429902 5798961 3429996 5798823 3430073 5798719 3430216 5798559 3430272 5798489 3430394 5798329 3430464 5798251 3430532 5798190 3430591 5798150 3430668 5798109 3430724 5798089 3430797 5798068 3430857 5798056 3430913 5798052 3430962 5798049 3431053 5798053 3431159 5798059 3431218 5798061 3431367 5798056 3431474 5798044 3431568 5798029 3431645 57980133433260 5797003 3433235 5797070 3433139 5797279 3433074 5797399 3433034 5797462 3432961 5797552 3432883 5797627 3432780 5797701 3432706 5797743 3432543 5797808 3432360 5797842 3432259 5797837 3432198 5797838 3432082 5797866 3431877 5797945 3431865 57979493431865 5797949 3431645 57980133431865 5797949 3431816 57978083433260 5797003 3433361 5796789 3433467 5796573 3433671 57961603433671 5796160 3433709 5796097 3433744 5796022 3433862 5795869 3434029 5795680 3434229 5795456 3434239 5795425 3434296 5795363 +geometrycollection_05|1,2 3,45,67,89,10 +geometrycollection_06|1 2 3 45 67 89 10 ERROR: geometry_to_gml2: 'CircularString' geometry type not supported ERROR: geometry_to_gml2: 'CompoundString' geometry type not supported ERROR: geometry_to_gml2: 'CurvePolygon' geometry type not supported -- 2.49.0