/** * Converting positions relative to the training area * $Id$ * $HeadURL$ * $Author$ * Created by Philipp Dassow, NLST, 21-04-2018 */ #pragma once #include #include #include "main_handler.h" #include "logger.h" namespace AssetManagement { namespace Interface { class Dtc; } } namespace ExerciseManagement { namespace Interface { class Dtc; } } namespace OcSituationServer { class DdsHandler; class PositionConverter { public: explicit PositionConverter(MainHandler *m_mainHandler); LtsCoordTrans::UtmCoordinate baseCoordinate(); inline QPointF relativeFromGeographic(const Core::GeoPosition2D &pos) { return relativeFromGeographic(pos, baseCoordinate()); } inline static QPointF relativeFromGeographic(const Core::GeoPosition2D &pos, const LtsCoordTrans::UtmCoordinate &baseCoord) { // convert lon/lat to utm with the given zone from the center point const LtsCoordTrans::UtmCoordinate point(LtsCoordTrans::UtmCoordinate::fromGeographic(pos.lon(), pos.lat(), baseCoord.zone)); // now calc distance from point to base point == relative position return QPointF(point.x - baseCoord.x, point.y - baseCoord.y); } private: bool initCoordConversion(); MainHandler *m_mainHandler; LtsCoordTrans::UtmCoordinate m_baseCoord; std::shared_ptr m_asmDtc; std::shared_ptr m_exmDtc; LOGGER_T &m_logger; }; } // namespace OcSituationServer