转换过程如下:
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()
为我返回绝对二维坐标,因此需要一个转换步骤。
2. 寻找转变
SUMO 中的 .net.xml 文件包含所需的转换。这<location>
标签包含属性netOffset
and 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 值。
Edit
构建 SUMO 时只需要第一步--with-proj-gdal
支持,结果getLonLat()
将立即成为所需的格式。