static char *asgml2_inspected(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);
+char *geometry_to_gml3(uchar *srl, char *srs, int precision, bool is_deegree);
static size_t asgml3_point_size(LWPOINT *point, char *srs, int precision);
-static char *asgml3_point(LWPOINT *point, char *srs, int precision);
+static char *asgml3_point(LWPOINT *point, char *srs, int precision, bool is_deegree);
static size_t asgml3_line_size(LWLINE *line, char *srs, int precision);
-static char *asgml3_line(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);
+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);
-static size_t pointArray_toGML3(POINTARRAY *pa, char *buf, int precision);
+static char *asgml3_inspected(LWGEOM_INSPECTED *geom, char *srs, int precision, bool is_deegree);
+static size_t pointArray_toGML3(POINTARRAY *pa, char *buf, int precision, bool is_deegree);
static size_t pointArray_GMLsize(POINTARRAY *pa, int precision);
static char *getSRSbySRID(int SRID, bool short_crs);
int SRID;
int precision = MAX_DOUBLE_PRECISION;
int option=0;
-
+ bool is_deegree = false;
/* Get the version */
version = PG_GETARG_INT32(0);
else if (option & 1) srs = getSRSbySRID(SRID, false);
else srs = getSRSbySRID(SRID, true);
+ if (option & 16) is_deegree = true;
+
if (version == 2)
gml = geometry_to_gml2(SERIALIZED_FORM(geom), srs, precision);
else
- gml = geometry_to_gml3(SERIALIZED_FORM(geom), srs, precision);
+ gml = geometry_to_gml3(SERIALIZED_FORM(geom), srs, precision, is_deegree);
PG_FREE_IF_COPY(geom, 1);
switch (type)
{
-
case POINTTYPE:
point = lwpoint_deserialize(geom);
return asgml2_point(point, srs, precision);
/* takes a GEOMETRY and returns a GML representation */
char *
-geometry_to_gml3(uchar *geom, char *srs, int precision)
+geometry_to_gml3(uchar *geom, char *srs, int precision, bool is_deegree)
{
int type;
LWPOINT *point;
switch (type)
{
-
case POINTTYPE:
point = lwpoint_deserialize(geom);
- return asgml3_point(point, srs, precision);
+ return asgml3_point(point, srs, precision, is_deegree);
case LINETYPE:
line = lwline_deserialize(geom);
- return asgml3_line(line, srs, precision);
+ return asgml3_line(line, srs, precision, is_deegree);
case POLYGONTYPE:
poly = lwpoly_deserialize(geom);
- return asgml3_poly(poly, srs, precision);
+ return asgml3_poly(poly, srs, precision, is_deegree);
default:
inspected = lwgeom_inspect(geom);
- return asgml3_inspected(inspected, srs, precision);
-
+ return asgml3_inspected(inspected, srs, precision, is_deegree);
}
}
}
static size_t
-asgml3_point_buf(LWPOINT *point, char *srs, char *output, int precision)
+asgml3_point_buf(LWPOINT *point, char *srs, char *output, int precision, bool is_deegree)
{
char *ptr = output;
ptr += sprintf(ptr, "<gml:Point>");
}
ptr += sprintf(ptr, "<gml:pos>");
- ptr += pointArray_toGML3(point->point, ptr, precision);
+ ptr += pointArray_toGML3(point->point, ptr, precision, is_deegree);
ptr += sprintf(ptr, "</gml:pos></gml:Point>");
return (ptr-output);
}
static char *
-asgml3_point(LWPOINT *point, char *srs, int precision)
+asgml3_point(LWPOINT *point, char *srs, int precision, bool is_deegree)
{
char *output;
int size;
size = asgml3_point_size(point, srs, precision);
output = palloc(size);
- asgml3_point_buf(point, srs, output, precision);
+ asgml3_point_buf(point, srs, output, precision, is_deegree);
return output;
}
}
static size_t
-asgml3_line_buf(LWLINE *line, char *srs, char *output, int precision)
+asgml3_line_buf(LWLINE *line, char *srs, char *output, int precision, bool is_deegree)
{
char *ptr=output;
ptr += sprintf(ptr, "<gml:segments>");
ptr += sprintf(ptr, "<gml:LineStringSegment>");
ptr += sprintf(ptr, "<gml:posList>");
- ptr += pointArray_toGML3(line->points, ptr, precision);
+ ptr += pointArray_toGML3(line->points, ptr, precision, is_deegree);
ptr += sprintf(ptr, "</gml:posList></gml:LineStringSegment>");
ptr += sprintf(ptr, "</gml:segments>");
ptr += sprintf(ptr, "</gml:Curve>");
}
static char *
-asgml3_line(LWLINE *line, char *srs, int precision)
+asgml3_line(LWLINE *line, char *srs, int precision, bool is_deegree)
{
char *output;
int size;
size = asgml3_line_size(line, srs, precision);
output = palloc(size);
- asgml3_line_buf(line, srs, output, precision);
+ asgml3_line_buf(line, srs, output, precision, is_deegree);
return output;
}
}
static size_t
-asgml3_poly_buf(LWPOLY *poly, char *srs, char *output, int precision)
+asgml3_poly_buf(LWPOLY *poly, char *srs, char *output, int precision, bool is_deegree)
{
int i;
char *ptr=output;
ptr += sprintf(ptr, "<gml:Polygon>");
}
ptr += sprintf(ptr, "<gml:exterior><gml:LinearRing><gml:posList>");
- ptr += pointArray_toGML3(poly->rings[0], ptr, precision);
+ ptr += pointArray_toGML3(poly->rings[0], ptr, precision, is_deegree);
ptr += sprintf(ptr, "</gml:posList></gml:LinearRing></gml:exterior>");
for (i=1; i<poly->nrings; i++)
{
ptr += sprintf(ptr, "<gml:interior><gml:LinearRing><gml:posList>");
- ptr += pointArray_toGML3(poly->rings[i], ptr, precision);
+ ptr += pointArray_toGML3(poly->rings[i], ptr, precision, is_deegree);
ptr += sprintf(ptr, "</gml:posList></gml:LinearRing></gml:interior>");
}
ptr += sprintf(ptr, "</gml:Polygon>");
}
static char *
-asgml3_poly(LWPOLY *poly, char *srs, int precision)
+asgml3_poly(LWPOLY *poly, char *srs, int precision, bool is_deegree)
{
char *output;
int size;
size = asgml3_poly_size(poly, srs, precision);
output = palloc(size);
- asgml3_poly_buf(poly, srs, output, precision);
+ asgml3_poly_buf(poly, srs, output, precision, is_deegree);
return output;
}
* Don't call this with single-geoms inspected!
*/
static size_t
-asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision)
+asgml3_inspected_buf(LWGEOM_INSPECTED *insp, char *srs, char *output, int precision, bool is_deegree)
{
int type = lwgeom_getType(insp->serialized_form[0]);
char *ptr, *gmltype;
if ((point=lwgeom_getpoint_inspected(insp, i)))
{
ptr += sprintf(ptr, "<gml:pointMember>");
- ptr += asgml3_point_buf(point, 0, ptr, precision);
+ ptr += asgml3_point_buf(point, 0, ptr, precision, is_deegree);
lwpoint_release(point);
ptr += sprintf(ptr, "</gml:pointMember>");
}
else if ((line=lwgeom_getline_inspected(insp, i)))
{
ptr += sprintf(ptr, "<gml:curveMember>");
- ptr += asgml3_line_buf(line, 0, ptr, precision);
+ ptr += asgml3_line_buf(line, 0, ptr, precision, is_deegree);
lwline_release(line);
ptr += sprintf(ptr, "</gml:curveMember>");
}
else if ((poly=lwgeom_getpoly_inspected(insp, i)))
{
ptr += sprintf(ptr, "<gml:surfaceMember>");
- ptr += asgml3_poly_buf(poly, 0, ptr, precision);
+ ptr += asgml3_poly_buf(poly, 0, ptr, precision, is_deegree);
lwpoly_release(poly);
ptr += sprintf(ptr, "</gml:surfaceMember>");
}
{
subgeom = lwgeom_getsubgeometry_inspected(insp, i);
subinsp = lwgeom_inspect(subgeom);
- ptr += asgml3_inspected_buf(subinsp, 0, ptr, precision);
+ ptr += asgml3_inspected_buf(subinsp, 0, ptr, precision, is_deegree);
lwinspected_release(subinsp);
}
}
* Don't call this with single-geoms inspected!
*/
static char *
-asgml3_inspected(LWGEOM_INSPECTED *insp, char *srs, int precision)
+asgml3_inspected(LWGEOM_INSPECTED *insp, char *srs, int precision, bool is_deegree)
{
char *gml;
size_t size;
size = asgml3_inspected_size(insp, srs, precision);
gml = palloc(size);
- asgml3_inspected_buf(insp, srs, gml, precision);
+ asgml3_inspected_buf(insp, srs, gml, precision, is_deegree);
return gml;
}
-/* In GML3, inside <posList> or <pos>, coordinates are separated by a space separator*/
+/* In GML3, inside <posList> or <pos>, coordinates are separated by a space separator
+ * In GML3 also, lat/lon are reversed for geocentric data
+ */
static size_t
-pointArray_toGML3(POINTARRAY *pa, char *output, int precision)
+pointArray_toGML3(POINTARRAY *pa, char *output, int precision, bool is_deegree)
{
int i;
char *ptr;
sprintf(y, "%.*f", precision, pt.y);
trim_trailing_zeros(y);
if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s %s", x, y);
+ if (is_deegree)
+ ptr += sprintf(ptr, "%s %s", y, x);
+ else
+ ptr += sprintf(ptr, "%s %s", x, y);
}
}
else
sprintf(z, "%.*f", precision, pt.z);
trim_trailing_zeros(z);
if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s %s %s", x, y, z);
+ if (is_deegree)
+ ptr += sprintf(ptr, "%s %s %s", y, x, z);
+ else
+ ptr += sprintf(ptr, "%s %s %s", x, y, z);
}
}
-- Option
SELECT 'option_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 0);
SELECT 'option_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 1);
-
+
+-- Deegree data
+SELECT 'deegree_01', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
+SELECT 'deegree_02', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'deegree_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'deegree_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0);
+SELECT 'deegree_05', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'deegree_06', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'deegree_07', ST_AsGML(3, GeomFromEWKT('SRID=4326;LINESTRING(1 2, 2 3, 4 5)'), 0, 0);
+SELECT 'deegree_08', ST_AsGML(2, GeomFromEWKT('SRID=4326;LINESTRING(1 2, 2 3, 4 5)'), 0, 16);
+SELECT 'deegree_09', ST_AsGML(3, GeomFromEWKT('SRID=4326;LINESTRING(1 2, 2 3, 4 5)'), 0, 16);
+SELECT 'deegree_10', ST_AsGML(3, GeomFromEWKT('SRID=4326;POLYGON((1 2, 2 3, 4 5, 3 2, 1 2))'), 0, 0);
+SELECT 'deegree_11', ST_AsGML(2, GeomFromEWKT('SRID=4326;POLYGON((1 2, 2 3, 4 5, 3 2, 1 2))'), 0, 16);
+SELECT 'deegree_12', ST_AsGML(3, GeomFromEWKT('SRID=4326;POLYGON((1 2, 2 3, 4 5, 3 2, 1 2))'), 0, 16);
+SELECT 'deegree_13', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTIPOINT(1 2, 2 3, 4 5)'), 0, 0);
+SELECT 'deegree_14', ST_AsGML(2, GeomFromEWKT('SRID=4326;MULTIPOINT(1 2, 2 3, 4 5)'), 0, 16);
+SELECT 'deegree_15', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTIPOINT(1 2, 2 3, 4 5)'), 0, 16);
+SELECT 'deegree_16', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTILINESTRING((1 2, 2 3, 4 5))'), 0, 0);
+SELECT 'deegree_17', ST_AsGML(2, GeomFromEWKT('SRID=4326;MULTILINESTRING((1 2, 2 3, 4 5))'), 0, 16);
+SELECT 'deegree_18', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTILINESTRING((1 2, 2 3, 4 5))'), 0, 16);
+SELECT 'deegree_19', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2)))'), 0, 0);
+SELECT 'deegree_20', ST_AsGML(2, GeomFromEWKT('SRID=4326;MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2)))'), 0, 16);
+SELECT 'deegree_21', ST_AsGML(3, GeomFromEWKT('SRID=4326;MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2)))'), 0, 16);
+SELECT 'deegree_22', ST_AsGML(3, GeomFromEWKT('SRID=4326;GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2))), MULTILINESTRING((1 2, 2 3, 4 5)), MULTIPOINT(1 2, 3 4))'), 0, 0);
+SELECT 'deegree_23', ST_AsGML(2, GeomFromEWKT('SRID=4326;GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2))), MULTILINESTRING((1 2, 2 3, 4 5)), MULTIPOINT(1 2, 3 4))'), 0, 16);
+SELECT 'deegree_24', ST_AsGML(3, GeomFromEWKT('SRID=4326;GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2, 2 3, 4 5, 3 2, 1 2))), MULTILINESTRING((1 2, 2 3, 4 5)), MULTIPOINT(1 2, 3 4))'), 0, 16);
+
--
-- Line
--
ERROR: Only GML 2 and GML 3 are supported
option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point>
option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point>
+deegree_01|<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>
+deegree_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
+deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos>2 1</gml:pos></gml:Point>
+deegree_04|<gml:Point srsName="EPSG:4326"><gml:pos>1 2 3</gml:pos></gml:Point>
+deegree_05|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2,3</gml:coordinates></gml:Point>
+deegree_06|<gml:Point srsName="EPSG:4326"><gml:pos>2 1 3</gml:pos></gml:Point>
+deegree_07|<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment><gml:posList>1 2 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>
+deegree_08|<gml:LineString srsName="EPSG:4326"><gml:coordinates>1,2 2,3 4,5</gml:coordinates></gml:LineString>
+deegree_09|<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment><gml:posList>2 1 3 2 5 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>
+deegree_10|<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>1 2 2 3 4 5 3 2 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>
+deegree_11|<gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 2,3 4,5 3,2 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>
+deegree_12|<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>2 1 3 2 5 4 2 3 2 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>
+deegree_13|<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>2 3</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>4 5</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>
+deegree_14|<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,3</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,5</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>
+deegree_15|<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:pos>2 1</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>3 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>5 4</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>
+deegree_16|<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>
+deegree_17|<gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 2,3 4,5</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>
+deegree_18|<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>2 1 3 2 5 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>
+deegree_19|<gml:MultiSurface srsName="EPSG:4326"><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 2 3 4 5 3 2 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>
+deegree_20|<gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 2,3 4,5 3,2 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>
+deegree_21|<gml:MultiSurface srsName="EPSG:4326"><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>2 1 3 2 5 4 2 3 2 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>
+deegree_22|<gml:MultiGeometry srsName="EPSG:4326"><gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 2 3 4 5 3 2 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface><gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve><gml:MultiPoint><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>3 4</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:MultiGeometry>
+deegree_23|<gml:MultiGeometry srsName="EPSG:4326"><gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 2,3 4,5 3,2 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon><gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 2,3 4,5</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString><gml:MultiPoint><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,4</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></gml:MultiGeometry>
+deegree_24|<gml:MultiGeometry srsName="EPSG:4326"><gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>2 1 3 2 5 4 2 3 2 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface><gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>2 1 3 2 5 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve><gml:MultiPoint><gml:pointMember><gml:Point><gml:pos>2 1</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>4 3</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:MultiGeometry>
line_01|<gml:LineString><gml:coordinates>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</gml:coordinates></gml:LineString>
line_02|<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>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</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>
line_03|<gml:LineString><gml:coordinates>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</gml:coordinates></gml:LineString>