You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pyproj将经纬度坐标转换为SUMO路网投影坐标

WGS84经纬度转SUMO路网投影坐标实现方法

从SUMO路网文件的<location>标签提取核心转换参数后,通过pyproj完成坐标转换只需要投影+偏移两步计算,具体实现如下:

提前提取的配置参数

从给出的路网配置中,可以直接拿到转换必需的两个核心参数:

  • 投影坐标系定义串:+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
  • 路网全局偏移量:netOffset = (-395885.58, -6185860.67)

实现步骤

  1. 安装依赖库
    执行命令安装pyproj:
    pip install pyproj

  2. 转换逻辑说明
    SUMO路网坐标不是直接的投影坐标,是原始UTM投影坐标叠加全局偏移后的结果,目的是把路网整体平移到坐标原点附近,避免大数值坐标带来的计算精度问题:

  • 第一步:将WGS84基准的经纬度坐标,通过给定的投影参数转换为UTM平面投影坐标
  • 第二步:将UTM坐标叠加netOffset偏移值,得到最终在SUMO路网中使用的坐标
  1. 可直接运行的代码示例
from pyproj import Transformer

# 路网配置参数
PROJ_STR = "+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"
OFFSET_X, OFFSET_Y = -395885.58, -6185860.67

# 初始化转换器,always_xy=True指定输入坐标顺序为(经度, 纬度),避免轴顺序匹配错误
transformer = Transformer.from_crs("EPSG:4326", PROJ_STR, always_xy=True)

def lonlat_to_sumo(lon: float, lat: float) -> tuple[float, float]:
    """
    输入WGS84坐标系的经度、纬度,返回对应SUMO路网下的(x, y)平面坐标
    """
    utm_x, utm_y = transformer.transform(lon, lat)
    sumo_x = utm_x + OFFSET_X
    sumo_y = utm_y + OFFSET_Y
    return sumo_x, sumo_y

# 正确性验证:用路网配置里的边界点测试
# origBoundary左下角经纬度:37.338524, 55.806366,对应SUMO坐标应接近(0, 0)
test_x, test_y = lonlat_to_sumo(37.338524, 55.806366)
print(f"边界点转换结果:x={test_x:.2f}, y={test_y:.2f}")

注意事项

  • 输入顺序不要搞反:转换函数要求经度在前、纬度在后,如果你的原始数据存储格式是(纬度, 经度),调用时需要调换参数顺序
  • 结果校验:可以用配置中origBoundary给出的四个边角经纬度做测试,转换结果应当和convBoundary给出的坐标范围(0.00,0.00 ~ 3442.30,2845.95)匹配,米级以内的误差属于正常范围
  • 如果结果偏差超过10米,优先检查三个常见问题:投影带号是否和配置一致、经纬度顺序是否传反、偏移量的正负号是否写反

内容的提问来源于stack exchange,提问作者benzom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:24:16