转换工作如下:
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>
属性。netOffset
projParameters
对于卢森堡情景,这些是
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()
将立即采用所需的格式。