From f47fb550bbcc10a22cc7c0e81e5bd1b09a1fccdb Mon Sep 17 00:00:00 2001 From: xml Date: Mon, 15 Jul 2024 19:17:45 +0200 Subject: [PATCH 1/2] Fixed srsDimension for parse_linestring_or_linear_ring --- pygml/v3_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygml/v3_common.py b/pygml/v3_common.py index b4b998a..60603ca 100644 --- a/pygml/v3_common.py +++ b/pygml/v3_common.py @@ -209,7 +209,7 @@ def parse_linestring_or_linear_ring(element: Element, pos_list0 = pos_lists[0] coordinates = parse_poslist( pos_list0.text, - int(pos_list0.attrib.get('srsDimension', 2)) + int(pos_list0.attrib.get('srsDimension', element.attrib.get('srsDimension', 2))) ) srs = pos_list0.attrib.get('srsName') elif poss: From 466e39497f6b571a9958f157e7f872788cfde89d Mon Sep 17 00:00:00 2001 From: xml Date: Mon, 15 Jul 2024 20:19:09 +0200 Subject: [PATCH 2/2] Fixed srsDimension for parse_multi,_curve parse_multi_linestring and parse_polygon --- pygml/v3_common.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pygml/v3_common.py b/pygml/v3_common.py index 60603ca..aade1dc 100644 --- a/pygml/v3_common.py +++ b/pygml/v3_common.py @@ -196,12 +196,16 @@ def parse_multi_point(element: Element, nsmap: NameSpaceMap) -> ParseResult: def parse_linestring_or_linear_ring(element: Element, - nsmap: NameSpaceMap) -> ParseResult: + nsmap: NameSpaceMap, + dimension: int=None) -> ParseResult: pos_lists = element.xpath('gml:posList', namespaces=nsmap) poss = element.xpath('gml:pos', namespaces=nsmap) coordinates_elems = element.xpath('gml:coordinates', namespaces=nsmap) coords = element.xpath('gml:coord', namespaces=nsmap) + if dimension is None: + dimension = 2 + if pos_lists: if len(pos_lists) > 1: raise ValueError('Too many gml:posList elements') @@ -209,7 +213,7 @@ def parse_linestring_or_linear_ring(element: Element, pos_list0 = pos_lists[0] coordinates = parse_poslist( pos_list0.text, - int(pos_list0.attrib.get('srsDimension', element.attrib.get('srsDimension', 2))) + int(pos_list0.attrib.get('srsDimension', element.attrib.get('srsDimension', dimension))) ) srs = pos_list0.attrib.get('srsName') elif poss: @@ -263,8 +267,9 @@ def parse_multi_curve(element: Element, nsmap: NameSpaceMap) -> ParseResult: 'Only gml:LineString elements are supported for gml:MultiCurves' ) + dimension = element.attrib.get('srsDimension') linestrings, srss = zip(*( - parse_linestring_or_linear_ring(linestring_element, nsmap) + parse_linestring_or_linear_ring(linestring_element, nsmap, dimension) for linestring_element in linestring_elements )) @@ -285,8 +290,9 @@ def parse_multi_linestring(element: Element, 'gml:lineStringMember/gml:LineString', namespaces=nsmap ) + dimension = element.attrib.get('srsDimension') linestrings, srss = zip(*( - parse_linestring_or_linear_ring(linestring_element, nsmap) + parse_linestring_or_linear_ring(linestring_element, nsmap, dimension) for linestring_element in linestring_elements )) @@ -310,8 +316,9 @@ def parse_polygon(element: Element, nsmap: NameSpaceMap) -> ParseResult: elif len(exterior_rings) > 1: raise ValueError('Too many gml:exterior/gml:LinearRing elements') + dimension = element.attrib.get('srsDimension') exterior, ext_srs = parse_linestring_or_linear_ring( - exterior_rings[0], nsmap + exterior_rings[0], nsmap, dimension ) exterior = exterior['coordinates'] @@ -321,7 +328,7 @@ def parse_polygon(element: Element, nsmap: NameSpaceMap) -> ParseResult: if len(interior_elems) > 0: interior_rings, int_srss = zip(*( - parse_linestring_or_linear_ring(linear_ring, nsmap) + parse_linestring_or_linear_ring(linear_ring, nsmap, dimension) for linear_ring in interior_elems )) interiors = [