From a4b4c7ff1953c3ad23f2221d9566e5ae15e3cd4a Mon Sep 17 00:00:00 2001 From: roelderickx Date: Sun, 10 Sep 2023 20:15:57 +0200 Subject: [PATCH] #36 round the z-value up to significant digits as specified in the parameters --- README.md | 1 + ogr2osm/osm_data.py | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1488256..a081193 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,7 @@ datasource.set_query(query) osmdata = ogr2osm.OsmData(translation_object) # Optional constructor parameters: # - rounding_digits: --rounding-digits parameter +# - significant_digits: --significant-digits parameter # - max_points_in_way: --split-ways parameter # - add_bounds: --add-bounds parameter # - start_id: --id parameter diff --git a/ogr2osm/osm_data.py b/ogr2osm/osm_data.py index 87dc3b7..1df797e 100644 --- a/ogr2osm/osm_data.py +++ b/ogr2osm/osm_data.py @@ -17,13 +17,15 @@ from .osm_geometries import OsmId, OsmBoundary, OsmNode, OsmWay, OsmRelation class OsmData: - def __init__(self, translation, rounding_digits=7, max_points_in_way=1800, add_bounds=False, \ - start_id=0, is_positive=False, z_value_tagname=None): + def __init__(self, translation, rounding_digits=7, significant_digits=9, \ + max_points_in_way=1800, add_bounds=False, start_id=0, is_positive=False, \ + z_value_tagname=None): self.logger = logging.getLogger(__program__) # options self.translation = translation self.rounding_digits = rounding_digits + self.significant_digits = significant_digits self.max_points_in_way = max_points_in_way self.add_bounds = add_bounds self.z_value_tagname = z_value_tagname @@ -87,7 +89,6 @@ def __round_number(self, n): def __add_node(self, x, y, z, tags, is_way_member): rx = self.__round_number(x) ry = self.__round_number(y) - rz = self.__round_number(z) # TODO deprecated unique_node_id = None @@ -104,7 +105,8 @@ def __add_node(self, x, y, z, tags, is_way_member): duplicate_node = self.__nodes[index] merged_tags = self.translation.merge_tags('node', duplicate_node.tags, tags) if self.z_value_tagname: - new_tags = { self.z_value_tagname: str(rz) } + strz = (('%%.%df' % self.significant_digits) % z).strip('0') + new_tags = { self.z_value_tagname: strz } merged_tags = self.translation.merge_tags('node', merged_tags, new_tags) if merged_tags is not None: duplicate_node.tags = merged_tags @@ -117,7 +119,8 @@ def __add_node(self, x, y, z, tags, is_way_member): else: merged_tags = tags if self.z_value_tagname: - new_tags = { self.z_value_tagname: [ str(rz) ] } + strz = (('%%.%df' % self.significant_digits) % z).strip('0') + new_tags = { self.z_value_tagname: [ strz ] } merged_tags = self.translation.merge_tags('node', new_tags, tags) node = OsmNode(x, y, merged_tags) self.__unique_node_index[unique_node_id] = [ len(self.__nodes) ]