変換は次のように機能します。
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)
相対的な位置情報しか利用できない場合は、まず x、y の値に netOffset 値を追加して調整する必要があります。
編集
--with-proj-gdal
SUMOサポートをビルドするときに必要なのは最初のステップだけです。結果はgetLonLat()
すぐに目的の形式になります。