Files
ECAP_Server/module/Local_Server/Aircraft/Flight_VTO.h
T
2026-06-16 11:18:22 +08:00

68 lines
2.2 KiB
C++

#pragma once
#include "global.h"
struct Flight_VTO {
std::string icao; // 飞机身份标识(四字节十六进制代码)
time_t time_stamp{}; // 时间(原始时间数据,可能需要翻译显示)
bool mlat;
RET<SSR::CPR::Position> pos; // 纬度(飞机的当前位置纬度)
RET<double> track; // 航迹(航迹方向,单位:度)
RET<double> speed; // 航速(单位:米/秒)
RET<double> vert_speed; // 航速(单位:米/秒)
RET<double> altitude; // 米
RET<std::string> call_sign;
RET<std::string> squawk;
Psc::JSON toJson() {
auto ret = Psc::JSON::object();
ADD_Json(icao);
ADD_Json(mlat);
ret.children.emplace_back("time_stamp", timeToString(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 timeToString(time_t time_stamp) {
struct tm* utc_time = std::gmtime(&time_stamp); // 转换为 UTC 时间
char buffer[80];
// 使用 strftime 格式化时间为字符串
std::strftime(buffer, sizeof(buffer), "%H:%M:%S", utc_time);
return std::string(buffer); // 返回格式化后的时间字符串
}
static 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();
vto.pos = info->air_pos_track_list.last();
vto.altitude = info->altitude_meter();
vto.vert_speed = info->vertical_rate();
vto.call_sign = info->bds20_call_sign();
vto.squawk = info->squawk();
return vto;
}
};