3D优化
This commit is contained in:
@@ -50,6 +50,42 @@ Psc::JSON track_orientation_json_from_points(const SSR::Position_Info &first,
|
||||
ret.append({"roll", 0.0});
|
||||
return ret;
|
||||
}
|
||||
Psc::JSON empty_aircraft_track_json(std::string_view data_source_key,
|
||||
std::string_view icao,
|
||||
std::size_t last_size) {
|
||||
auto ret = Psc::JSON::object();
|
||||
ret.append({"icao", icao});
|
||||
ret.append({"ds", data_source_key});
|
||||
ret.append({"sta_seq", last_size});
|
||||
ret.append({"end_seq", last_size});
|
||||
ret.append({"size", 0});
|
||||
ret.append({"list", Psc::JSON::array()});
|
||||
return ret;
|
||||
}
|
||||
Psc::JSON aircraft_track_json(DataBase *db,
|
||||
std::string_view data_source_key,
|
||||
std::string_view icao,
|
||||
std::size_t last_size,
|
||||
bool include_empty) {
|
||||
auto aircraft = db->get_aircraft(icao);
|
||||
if (aircraft == nullptr) {
|
||||
return include_empty ? empty_aircraft_track_json(data_source_key, icao,
|
||||
last_size) :
|
||||
Psc::JSON();
|
||||
}
|
||||
auto ret = aircraft->air_pos_track_list.get_last_array_json(last_size);
|
||||
auto last_two = aircraft->air_pos_track_list.last_two();
|
||||
if (last_two.has_value()) {
|
||||
ret.children.insert(
|
||||
ret.children.begin(),
|
||||
Psc::JSON("track_orientation",
|
||||
track_orientation_json_from_points(last_two->first,
|
||||
last_two->second)));
|
||||
}
|
||||
ret.children.insert(ret.children.begin(), Psc::JSON("ds", data_source_key));
|
||||
ret.children.insert(ret.children.begin(), Psc::JSON("icao", icao));
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
Aircraft::Aircraft(std::string_view icao) : Aircraft_Info(icao) {
|
||||
auto size = Global::instance()->mode_acs.max_track_point_size.load();
|
||||
@@ -291,22 +327,28 @@ void database_server(Global *g) {
|
||||
CHECK_JSON_PARAM
|
||||
_init_db HTTP_REQUIRE_VALUE(icao, params.try_get_string("icao"))
|
||||
HTTP_REQUIRE_VALUE(last_size, params.try_get_number<std::size_t>(
|
||||
"last_size")) auto aircraft =
|
||||
db->get_aircraft(icao);
|
||||
JSON ret;
|
||||
if (aircraft != nullptr) {
|
||||
ret = aircraft->air_pos_track_list.get_last_array_json(last_size);
|
||||
auto last_two = aircraft->air_pos_track_list.last_two();
|
||||
if (last_two.has_value()) {
|
||||
ret.children.insert(
|
||||
ret.children.begin(),
|
||||
JSON("track_orientation",
|
||||
track_orientation_json_from_points(last_two->first,
|
||||
last_two->second)));
|
||||
}
|
||||
ret.children.insert(ret.children.begin(), JSON("ds", data_source_key));
|
||||
ret.children.insert(ret.children.begin(), JSON("icao", icao));
|
||||
"last_size")) auto ret =
|
||||
aircraft_track_json(db.get(), data_source_key, icao, last_size,
|
||||
false);
|
||||
res->setBody(ret.to_json_string());
|
||||
});
|
||||
svr.Post(api + "get_aircraft_track_list_batch", [](HTTP_Param) {
|
||||
CHECK_JSON_PARAM
|
||||
_init_db HTTP_REQUIRE_PTR(items, params.get("items"))
|
||||
HTTP_REQUIRE_TRUE(items->valueType == Psc::Array, "items")
|
||||
auto ret = JSON::object();
|
||||
auto list = JSON::array();
|
||||
for (const auto &item : items->children) {
|
||||
HTTP_REQUIRE_TRUE(item.valueType == Psc::Object, "items")
|
||||
HTTP_REQUIRE_VALUE(icao, item.try_get_string("icao"))
|
||||
HTTP_REQUIRE_VALUE(last_size,
|
||||
item.try_get_number<std::size_t>("last_size"))
|
||||
list.children.push_back(
|
||||
aircraft_track_json(db.get(), data_source_key, icao, last_size,
|
||||
true));
|
||||
}
|
||||
ret.append({"ds", data_source_key});
|
||||
ret.append({"list", list});
|
||||
res->setBody(ret.to_json_string());
|
||||
});
|
||||
svr.Post(api + "get_aircraft_list_after", [](HTTP_Param) {
|
||||
|
||||
Reference in New Issue
Block a user