1

我正在使用从OpenStreetMap导入的真实街道网络进行静脉模拟,例如来自 Lara Codeca的卢森堡场景。现在,为了准备可视化(使用 Google 地球),我想将模拟中的车辆位置从 SUMO 或 OmNET 坐标导出到 GPS 坐标。

作为材料,我有用于生成场景的 OSM 文件,包括那里所有节点的 GPS 位置。我希望找到从模拟坐标到 GPS 坐标的简单映射,例如,通过知道边界框和模拟操场角的 GPS 坐标。

有没有一种简单的方法来进行这种转换,在生成游乐场时如何找到 OSM 转换使用的实际角?

4

1 回答 1

1

转换工作如下:

1. 从 OmNET 访问位置信息

// Adapt your path to the mobility module here  
Veins::TraCIMobility* mobility =
  check_and_cast<Veins::TraCIMobility*>(
    getParentModule()->getSubmodule("veinsmobility"));

Veins::TraCICommandInterface* traci = mobility->getCommandInterface();

Coord currPos = mobility->getCurrentPosition();
std::pair<double, double> currLonLat = traci->getLonLat(currPos);

getLonLat()为我返回了绝对 2D 坐标,因此需要一个转换步骤。

2. 寻找转变

SUMO 中的 .net.xml 文件包含所需的转换。该标签包含所需的<location>属性。netOffsetprojParameters

对于卢森堡情景,这些是

netOffset="-285448.66,-5492398.13"
projParameter="+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"

3. 反转转换

PROJ.4可用于进行反演。Python 接口也可用(pyproj)。

import pyproj

projection = pyproj.Proj(
  "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

# x, y obtained from OmNET
lon, lat = projection(x, y, inverse=True)

如果只有相对位置信息可用,则必须首先通过添加 netOffset 值来调整 x、y 值。

编辑

--with-proj-gdal当您构建 SUMO支持时,只需要第一步,结果getLonLat()将立即采用所需的格式。

于 2016-02-02T11:05:14.387 回答