Files
ECAP_Server/module/Local_Server/Aircraft/Flight_VTO.cpp
T
2026-07-24 18:09:37 +08:00

55 lines
1.7 KiB
C++

#include "../Aircraft/Flight_VTO.h"
Psc::JSON Flight_VTO::to_json() {
auto ret = Psc::JSON::object();
ADD_Json(icao);
ADD_Json(mlat);
ret.children.emplace_back("time_stamp", time_to_string(time_stamp));
if (pos.has_value()) {
ret.children.emplace_back("latitude", pos.value().lat);
ret.children.emplace_back("longitude", pos.value().lon);
}
else {
ret.children.emplace_back("latitude", nullptr);
ret.children.emplace_back("longitude", nullptr);
}
ADD_Json_RET(track);
ADD_Json_RET(speed);
ADD_Json_RET(altitude);
ADD_Json_RET(vert_speed);
ADD_Json_RET(call_sign);
ADD_Json_RET(squawk);
return ret;
}
std::string Flight_VTO::time_to_string(time_t time_stamp) {
const std::tm* utc_time = std::gmtime(&time_stamp);
char buffer[80];
std::strftime(buffer, sizeof(buffer), "%H:%M:%S", utc_time);
return {buffer};
}
Flight_VTO Flight_VTO::to_VTO(SSR::Aircraft_Info* info) {
Flight_VTO vto;
vto.icao = info->icao;
vto.mlat = info->mlat;
vto.time_stamp = info->timestamp;
vto.speed = info->speed();
// 这个地 是相对于地的意思
vto.track = info->surface_magnetic_heading();
// vto.pos = info->pos();
auto opt = info->air_pos_track_list.last();
vto.pos = opt;
if (opt.has_value()) {
SSR::Position_Info& a = opt.value();
vto.altitude = a.alt;
}
// auto val = info->surface_pos_track_list.last();
// vto.pos = val;
// if (val.has_value()) {
// vto.altitude = val.value().alt;
// std::cout << "222222" << std::endl;
// }
vto.vert_speed = info->vertical_rate();
vto.call_sign = info->bds20_call_sign();
vto.squawk = info->squawk();
return vto;
}