/** * @RDE_HEADER@ * TrainingArea * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, NLE, 2019-08-02 */ #include "training_area.h" #include "WebSocketInterface/Messages/reply_message.h" #include "helper.h" #include #include #include #include #include #include namespace CombatNetRadio { TrainingArea::TrainingArea(int trainingAreaId, AssetManagement::Interface::Dtc *asmDtc, InfrastructureManagement::Interface::Dtc *ismDtc) : m_logger(getLogger("TrainingArea")) { Q_ASSERT(trainingAreaId > 0); Q_ASSERT(asmDtc); Q_ASSERT(ismDtc); getTrainingArea(trainingAreaId, asmDtc); getRadioStations(ismDtc); } void TrainingArea::getTrainingArea(int trainingAreaId, AssetManagement::Interface::Dtc *asmDtc) { AssetManagement::TrainingArea ddsTrainingArea = asmDtc->trainingArea(trainingAreaId); m_trainingAreaData.designation = QString::fromStdString(ddsTrainingArea.name()); m_trainingAreaData.id = trainingAreaId; m_trainingAreaData.refPoint.lat = -1.; m_trainingAreaData.refPoint.lon = -1.; WebSocketInterface::Messages::ReplyMessage::LonLatPoint point; // bottom left LtsCoordTrans::UtmCoordinate utmCoordinate = LtsCoordTrans::UtmCoordinate::fromGeographic(ddsTrainingArea.bottomLeft().lon(), ddsTrainingArea.bottomLeft().lat()); point.lat = toDeg(ddsTrainingArea.bottomLeft().lat()); point.lon = toDeg(ddsTrainingArea.bottomLeft().lon()); m_trainingAreaData.path << point; // bottom right QPointF coord = utmCoordinate.geographic(ddsTrainingArea.width()); point.lon = toDeg(coord.x()); point.lat = toDeg(coord.y()); m_trainingAreaData.path << point; // upper right coord = utmCoordinate.geographic(ddsTrainingArea.width(), ddsTrainingArea.height()); point.lon = toDeg(coord.x()); point.lat = toDeg(coord.y()); m_trainingAreaData.path << point; // upper left coord = utmCoordinate.geographic(0, ddsTrainingArea.height()); point.lon = toDeg(coord.x()); point.lat = toDeg(coord.y()); m_trainingAreaData.path << point; } void TrainingArea::getRadioStations(InfrastructureManagement::Interface::Dtc *ismDtc) { auto cb = [this](const InfrastructureManagement::MainStructureElement &mse) { if (mse.structureElementTypeId() != InfrastructureManagement::StructureElementType::RadioStation || mse.isDeleted()) return; WebSocketInterface::Messages::RadioStationMessage::RadioStationData data; data.id = stationId(mse); if (data.id == 0) { WARNING_LOG(m_logger) << "Got MainStructureElement of type 'RadioStation' but property 'stationId' was not set" << " - database id: " << mse.id() << " - ignoring!"; return; } data.geoPoint.lon = toDeg(mse.geoPosition().lon()); data.geoPoint.lat = toDeg(mse.geoPosition().lat()); data.trainingAreaId = m_trainingAreaData.id; data.designation = QString::fromStdString(mse.name()); m_radioStations.push_back(data); }; ismDtc->mainStructureElements(cb); } } // namespace CombatNetRadio