diff --git a/imap/lib/convertor.py b/imap/lib/convertor.py index e69a630..d2ac582 100644 --- a/imap/lib/convertor.py +++ b/imap/lib/convertor.py @@ -32,7 +32,7 @@ from imap.lib.draw import draw_line, show from imap.lib.convex_hull import convex_hull, aabb_box -from imap.lib.proj_helper import latlon2utm +from imap.lib.proj_helper import latlon2projected # Distance between stop line and pedestrian crossing @@ -167,7 +167,9 @@ def convert_proj_txt(self, proj_txt): self.pb_map.header.projection.proj = "+proj=utm +zone={} +ellps=WGS84 " \ "+datum=WGS84 +units=m +no_defs".format(0) else: - self.origin_x, self.origin_y, zone_id = latlon2utm(lat, lon) + # use projTxt run latlon2projected + self.origin_x, self.origin_y, zone_id = latlon2projected( + lat, lon, self.xodr_map.header.geo_reference.text) if x_0: self.origin_x = self.origin_x - x_0 if y_0: diff --git a/imap/lib/proj_helper.py b/imap/lib/proj_helper.py index b9795eb..ed2d12c 100644 --- a/imap/lib/proj_helper.py +++ b/imap/lib/proj_helper.py @@ -34,19 +34,30 @@ import math -def utm2latlon(x, y, zone): +def projected2latlon(x, y, zone_id=None, proj_txt=None): """utm to latlon""" - proj = pyproj.Proj(proj='utm', zone=zone, ellps='WGS84') + if proj_txt is None: + # Default: Inverse Standard UTM + if zone_id is None: + raise ValueError( + "For default inverse UTM, 'zone_id' parameter is required.") + proj = pyproj.Proj(proj='utm', zone=zone_id, ellps='WGS84') + else: + proj = pyproj.Proj(proj_txt) lon, lat = proj(x, y, inverse=True) return lat, lon -def latlon2utm(lat, lon): - """latlon to utm""" - zone = latlon2utmzone(lat, lon) - projector2 = pyproj.Proj(proj='utm', zone=zone, ellps='WGS84') - x, y = projector2(lon, lat) - return x, y, zone +def latlon2projected(lat, lon, proj_txt=None): + """latlon to utm use proj info""" + zone_id = latlon2utmzone(lat, lon) + if proj_txt is None: + # Default: Standard UTM + proj = pyproj.Proj(proj='utm', zone=zone_id, ellps='WGS84') + else: + proj = pyproj.Proj(proj_txt) + x, y = proj(lon, lat) + return x, y, zone_id def latlon2utmzone(lat, lon):