Compare commits
No commits in common. "819bd7042610c62bd2a85e5a6bc8e0ea27fa8b0e" and "a8119869ebe303c59996ca15ced02ec130fba405" have entirely different histories.
819bd70426
...
a8119869eb
|
@ -104,13 +104,13 @@
|
||||||
<ClCompile Include="componentbasic.cpp" />
|
<ClCompile Include="componentbasic.cpp" />
|
||||||
<ClCompile Include="DeduceFramework.cpp" />
|
<ClCompile Include="DeduceFramework.cpp" />
|
||||||
<ClCompile Include="InvisibleComponent.cpp" />
|
<ClCompile Include="InvisibleComponent.cpp" />
|
||||||
<ClCompile Include="RouteManage.cpp" />
|
<ClCompile Include="MapRoute.cpp" />
|
||||||
<ClCompile Include="VisibleCube.cpp" />
|
<ClCompile Include="VisibleCube.cpp" />
|
||||||
<ClInclude Include="componentbasic_global.h" />
|
<ClInclude Include="componentbasic_global.h" />
|
||||||
<ClInclude Include="componentbasic.h" />
|
<ClInclude Include="componentbasic.h" />
|
||||||
<QtMoc Include="DeduceFramework.h" />
|
<QtMoc Include="DeduceFramework.h" />
|
||||||
<ClInclude Include="InvisibleComponent.h" />
|
<ClInclude Include="InvisibleComponent.h" />
|
||||||
<ClInclude Include="RouteManage.h" />
|
<ClInclude Include="MapRoute.h" />
|
||||||
<ClInclude Include="VisibleCube.h" />
|
<ClInclude Include="VisibleCube.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<ClInclude Include="VisibleCube.h">
|
<ClInclude Include="VisibleCube.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="RouteManage.h">
|
<ClInclude Include="MapRoute.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="InvisibleComponent.h">
|
<ClInclude Include="InvisibleComponent.h">
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
<ClCompile Include="VisibleCube.cpp">
|
<ClCompile Include="VisibleCube.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="RouteManage.cpp">
|
<ClCompile Include="MapRoute.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="DeduceFramework.cpp">
|
<ClCompile Include="DeduceFramework.cpp">
|
||||||
|
|
|
@ -59,7 +59,6 @@ DeduceFramework::DeduceFramework()
|
||||||
:_factory_ins(std::make_shared<ComponentFactory>()) {
|
:_factory_ins(std::make_shared<ComponentFactory>()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "RouteManage.h"
|
|
||||||
void DeduceFramework::init_framework()
|
void DeduceFramework::init_framework()
|
||||||
{
|
{
|
||||||
auto mgr_e = std::make_shared<RtEntityManager>();
|
auto mgr_e = std::make_shared<RtEntityManager>();
|
||||||
|
@ -71,8 +70,6 @@ void DeduceFramework::init_framework()
|
||||||
auto res_e = std::make_shared<RtResourceManager>();
|
auto res_e = std::make_shared<RtResourceManager>();
|
||||||
info_pulls = std::make_shared<ComponentsInfoPull>();
|
info_pulls = std::make_shared<ComponentsInfoPull>();
|
||||||
res_e->append(info_pulls);
|
res_e->append(info_pulls);
|
||||||
auto route_mgr = std::make_shared<PlainRouteManage>();
|
|
||||||
res_e->append(route_mgr);
|
|
||||||
this->_entity_map_over_0xffff[res_e->entityID()] = res_e;
|
this->_entity_map_over_0xffff[res_e->entityID()] = res_e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,7 +322,7 @@ void DeduceFramework::execute(std::shared_ptr<Immediate> map,
|
||||||
out << result;
|
out << result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "VisibleCube.h"
|
#include "VisibleBox.h"
|
||||||
ComponentFactory::ComponentFactory()
|
ComponentFactory::ComponentFactory()
|
||||||
{
|
{
|
||||||
auto ins = std::make_shared<VisibleCubePlugin>();
|
auto ins = std::make_shared<VisibleCubePlugin>();
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include "MapRoute.h"
|
|
@ -0,0 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
class MapRoute
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
#include "RouteManage.h"
|
|
||||||
|
|
||||||
PlainRouteManage::PlainRouteManage()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#include <QJsonArray>
|
|
||||||
|
|
||||||
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const NewPlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out)
|
|
||||||
{
|
|
||||||
auto resp = std::make_shared<RespondDefault>();
|
|
||||||
resp->reset(in->targetEntity(), in->sourceEntity());
|
|
||||||
|
|
||||||
if(!this->_route_resource_map.contains(in->_route_name)){
|
|
||||||
resp->_success_mark = true;
|
|
||||||
this->_route_resource_map[in->_route_name] = RouteResource();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
resp->_reason_text = "已包含指定名称的路径";
|
|
||||||
}
|
|
||||||
|
|
||||||
out << resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const RemovePlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out)
|
|
||||||
{
|
|
||||||
auto resp = std::make_shared<RespondDefault>();
|
|
||||||
resp->reset(in->targetEntity(), in->sourceEntity());
|
|
||||||
|
|
||||||
if (this->_route_resource_map.contains(in->_route_name)) {
|
|
||||||
resp->_success_mark = true;
|
|
||||||
this->_route_resource_map.remove(in->_route_name);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
resp->_reason_text = "不包含指定名称的路径";
|
|
||||||
}
|
|
||||||
|
|
||||||
out << resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteReset> in, QList<std::shared_ptr<RespondDefault>>& out)
|
|
||||||
{
|
|
||||||
auto resp = std::make_shared<RespondDefault>();
|
|
||||||
resp->reset(in->targetEntity(), in->sourceEntity());
|
|
||||||
|
|
||||||
if (this->_route_resource_map.contains(in->_route_name)) {
|
|
||||||
resp->_success_mark = true;
|
|
||||||
|
|
||||||
RouteResource res;
|
|
||||||
res._route_points = in->_lonlat_list;
|
|
||||||
this->_route_resource_map[in->_route_name] = res;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
resp->_reason_text = "不包含指定名称的路径";
|
|
||||||
}
|
|
||||||
|
|
||||||
out << resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteQuery> in, QList<std::shared_ptr<PlainRouteInfo>>& out)
|
|
||||||
{
|
|
||||||
auto resp = std::make_shared<PlainRouteInfo>();
|
|
||||||
resp->reset(in->targetEntity(), in->sourceEntity());
|
|
||||||
|
|
||||||
if (this->_route_resource_map.contains(in->_route_name)) {
|
|
||||||
resp->_success_mark = true;
|
|
||||||
resp->_route_name = in->_route_name;
|
|
||||||
resp->_lonlat_list = this->_route_resource_map[in->_route_name]._route_points;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
resp->_reason_text = "不包含指定名称的路径";
|
|
||||||
}
|
|
||||||
|
|
||||||
out << resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
auto route_array = obj["total_route"].toArray();
|
|
||||||
for (auto idx = 0; idx < route_array.size(); ++idx) {
|
|
||||||
auto track_record = route_array.at(idx).toObject();
|
|
||||||
auto track_name = track_record["name"].toString();
|
|
||||||
auto track_points = track_record["points"].toArray();
|
|
||||||
|
|
||||||
RouteResource value;
|
|
||||||
for (auto tidx = 0; tidx < track_points.size(); tidx++) {
|
|
||||||
auto point = track_points.at(tidx).toObject();
|
|
||||||
auto pins = LonLatPos{ point["point_lon"].toDouble(), point["point_lat"].toDouble() };
|
|
||||||
value._route_points << pins;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->_route_resource_map[track_name] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
QJsonArray route_array;
|
|
||||||
for (auto route_name : this->_route_resource_map.keys()) {
|
|
||||||
QJsonObject track_record;
|
|
||||||
track_record["name"] = route_name;
|
|
||||||
QJsonArray point_array;
|
|
||||||
for (auto pointv : this->_route_resource_map[route_name]._route_points) {
|
|
||||||
QJsonObject point;
|
|
||||||
point["point_lon"] = pointv._lon_deg;
|
|
||||||
point["point_lat"] = pointv._lat_deg;
|
|
||||||
point_array.append(point);
|
|
||||||
}
|
|
||||||
track_record["points"] = point_array;
|
|
||||||
|
|
||||||
route_array.append(track_record);
|
|
||||||
}
|
|
||||||
|
|
||||||
obj["total_route"] = route_array;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<WsComponent> PlainRouteManage::defaultNew() const
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteManage::bindEntity(std::weak_ptr<WsEntity> host)
|
|
||||||
{
|
|
||||||
this->_bind_entity = host;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString PlainRouteManage::name() const
|
|
||||||
{
|
|
||||||
return NAME(PlainRouteManage);
|
|
||||||
}
|
|
||||||
|
|
||||||
RouteResource& RouteResource::operator=(const RouteResource& other)
|
|
||||||
{
|
|
||||||
this->_route_points = other._route_points;
|
|
||||||
return *this;
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include "componentbasic.h"
|
|
||||||
#include <route_access.h>
|
|
||||||
#include <QHash>
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 路径资源
|
|
||||||
/// </summary>
|
|
||||||
struct RouteResource {
|
|
||||||
QList<LonLatPos> _route_points;
|
|
||||||
|
|
||||||
RouteResource& operator=(const RouteResource& other);
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 平面路径管理插件
|
|
||||||
/// </summary>
|
|
||||||
class PlainRouteManage : public ProcList<
|
|
||||||
WsRespond<NewPlainRoute, RespondDefault>,
|
|
||||||
WsRespond<RemovePlainRoute, RespondDefault>,
|
|
||||||
WsRespond<PlainRouteReset, RespondDefault>,
|
|
||||||
WsRespond<PlainRouteQuery, PlainRouteInfo>
|
|
||||||
> {
|
|
||||||
private:
|
|
||||||
std::weak_ptr<WsEntity> _bind_entity;
|
|
||||||
QHash<QString, RouteResource> _route_resource_map;
|
|
||||||
|
|
||||||
public:
|
|
||||||
PlainRouteManage();
|
|
||||||
|
|
||||||
// 通过 ProcList 继承
|
|
||||||
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const NewPlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
|
||||||
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const RemovePlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
|
||||||
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteReset> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
|
||||||
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteQuery> in, QList<std::shared_ptr<PlainRouteInfo>>& out) override;
|
|
||||||
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
|
|
||||||
std::shared_ptr<WsComponent> defaultNew() const override;
|
|
||||||
void bindEntity(std::weak_ptr<WsEntity> host) override;
|
|
||||||
QString name() const override;
|
|
||||||
};
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ class COMPONENTBASIC_EXPORT VisibleCubePlugin : public ProcList<
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::weak_ptr<WsEntity> _bind_entity;
|
std::weak_ptr<WsEntity> _bind_entity;
|
||||||
VolumeData _self_d3;
|
D3Data _self_d3;
|
||||||
LonLatAltPos _self_lla;
|
LLAPos _self_lla;
|
||||||
Posture _self_posture;
|
Posture _self_posture;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -100,11 +100,9 @@
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="route_access.cpp" />
|
|
||||||
<ClInclude Include="messagebasic_global.h" />
|
<ClInclude Include="messagebasic_global.h" />
|
||||||
<ClInclude Include="messagebasic.h" />
|
<ClInclude Include="messagebasic.h" />
|
||||||
<ClCompile Include="messagebasic.cpp" />
|
<ClCompile Include="messagebasic.cpp" />
|
||||||
<ClInclude Include="route_access.h" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
||||||
|
|
|
@ -32,13 +32,5 @@
|
||||||
<ClInclude Include="messagebasic.h">
|
<ClInclude Include="messagebasic.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="route_access.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="route_access.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -20,10 +20,11 @@
|
||||||
#define STRLIST_PEAK(u) u = obj[NAME(u)].toString().split(",")
|
#define STRLIST_PEAK(u) u = obj[NAME(u)].toString().split(",")
|
||||||
|
|
||||||
class MESSAGEBASIC_EXPORT AbstractMessage : public WsMessage {
|
class MESSAGEBASIC_EXPORT AbstractMessage : public WsMessage {
|
||||||
protected:
|
private:
|
||||||
uint64_t _from_id = 0, _to_id = 0;
|
uint64_t _from_id = 0, _to_id = 0;
|
||||||
QString _topic_string;
|
QString _topic_string;
|
||||||
|
|
||||||
|
protected:
|
||||||
AbstractMessage(const QString& topic);
|
AbstractMessage(const QString& topic);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -93,7 +94,7 @@ struct Posture {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 三维数据结构定义
|
/// 三维数据结构定义
|
||||||
/// </summary>
|
/// </summary>
|
||||||
struct VolumeData {
|
struct D3Data {
|
||||||
double _length_m = 0;
|
double _length_m = 0;
|
||||||
double _width_m = 0;
|
double _width_m = 0;
|
||||||
double _height_m = 0;
|
double _height_m = 0;
|
||||||
|
@ -103,9 +104,9 @@ struct VolumeData {
|
||||||
/// 体积盒详细数据定义
|
/// 体积盒详细数据定义
|
||||||
/// </summary>
|
/// </summary>
|
||||||
struct MESSAGEBASIC_EXPORT Box3DDesc : public AbstractMessage {
|
struct MESSAGEBASIC_EXPORT Box3DDesc : public AbstractMessage {
|
||||||
VolumeData _d3_data;
|
D3Data _d3_data;
|
||||||
Posture _posture_d3;
|
Posture _posture_d3;
|
||||||
LonLatAltPos _lla_pos;
|
LLAPos _lla_pos;
|
||||||
|
|
||||||
Box3DDesc();
|
Box3DDesc();
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ struct MESSAGEBASIC_EXPORT Box3DDesc : public AbstractMessage {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MESSAGEBASIC_EXPORT Set3DBoxD3Data : public AbstractMessage {
|
struct MESSAGEBASIC_EXPORT Set3DBoxD3Data : public AbstractMessage {
|
||||||
VolumeData _d3_data;
|
D3Data _d3_data;
|
||||||
|
|
||||||
Set3DBoxD3Data();
|
Set3DBoxD3Data();
|
||||||
|
|
||||||
|
@ -137,7 +138,7 @@ struct MESSAGEBASIC_EXPORT Set3DBoxPosture : public AbstractMessage
|
||||||
|
|
||||||
struct MESSAGEBASIC_EXPORT Set3DBoxLLAPos : public AbstractMessage
|
struct MESSAGEBASIC_EXPORT Set3DBoxLLAPos : public AbstractMessage
|
||||||
{
|
{
|
||||||
LonLatAltPos _lla_pos;
|
LLAPos _lla_pos;
|
||||||
|
|
||||||
Set3DBoxLLAPos();
|
Set3DBoxLLAPos();
|
||||||
|
|
||||||
|
|
|
@ -1,121 +0,0 @@
|
||||||
#include "route_access.h"
|
|
||||||
|
|
||||||
PlainRouteReset::PlainRouteReset()
|
|
||||||
:AbstractMessage(NAME(PlainRouteReset)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteReset::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
AbstractMessage::recoveryFrom(obj);
|
|
||||||
STRING_PEAK(this->_route_name);
|
|
||||||
|
|
||||||
QStringList lonlist, latlist;
|
|
||||||
STRLIST_PEAK(lonlist);
|
|
||||||
STRLIST_PEAK(latlist);
|
|
||||||
for (auto idx = 0; idx < lonlist.size(); ++idx) {
|
|
||||||
auto lon = lonlist.at(idx).toDouble();
|
|
||||||
auto lat = latlist.at(idx).toDouble();
|
|
||||||
this->_lonlat_list << LonLatPos{ lon, lat };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteReset::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
AbstractMessage::saveTo(obj);
|
|
||||||
STRING_SAVE(this->_route_name);
|
|
||||||
|
|
||||||
QStringList lonlist, latlist;
|
|
||||||
for (auto pos : this->_lonlat_list) {
|
|
||||||
lonlist << QString("%1").arg(pos._lon_deg);
|
|
||||||
latlist << QString("%1").arg(pos._lat_deg);
|
|
||||||
}
|
|
||||||
STRLIST_SAVE(lonlist);
|
|
||||||
STRLIST_SAVE(latlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
NewPlainRoute::NewPlainRoute()
|
|
||||||
:AbstractMessage(NAME(NewPlainRoute)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void NewPlainRoute::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
AbstractMessage::recoveryFrom(obj);
|
|
||||||
STRING_PEAK(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NewPlainRoute::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
AbstractMessage::saveTo(obj);
|
|
||||||
STRING_SAVE(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
RemovePlainRoute::RemovePlainRoute()
|
|
||||||
:AbstractMessage(NAME(RemovePlainRoute))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemovePlainRoute::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
AbstractMessage::recoveryFrom(obj);
|
|
||||||
STRING_PEAK(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemovePlainRoute::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
AbstractMessage::saveTo(obj);
|
|
||||||
STRING_SAVE(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlainRouteQuery::PlainRouteQuery()
|
|
||||||
:AbstractMessage(NAME(PlainRouteQuery))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteQuery::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
AbstractMessage::recoveryFrom(obj);
|
|
||||||
STRING_PEAK(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteQuery::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
AbstractMessage::saveTo(obj);
|
|
||||||
STRING_SAVE(_route_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlainRouteInfo::PlainRouteInfo()
|
|
||||||
:RespondDefault() {
|
|
||||||
_topic_string = NAME(PlainRouteInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlainRouteInfo::recoveryFrom(const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
RespondDefault::recoveryFrom(obj);
|
|
||||||
STRING_PEAK(this->_route_name);
|
|
||||||
|
|
||||||
QStringList lonlist, latlist;
|
|
||||||
STRLIST_PEAK(lonlist);
|
|
||||||
STRLIST_PEAK(latlist);
|
|
||||||
for (auto idx = 0; idx < lonlist.size(); ++idx) {
|
|
||||||
auto lon = lonlist.at(idx).toDouble();
|
|
||||||
auto lat = latlist.at(idx).toDouble();
|
|
||||||
this->_lonlat_list << LonLatPos{ lon, lat };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlainRouteInfo::saveTo(QJsonObject& obj) const
|
|
||||||
{
|
|
||||||
RespondDefault::saveTo(obj);
|
|
||||||
STRING_SAVE(this->_route_name);
|
|
||||||
|
|
||||||
QStringList lonlist, latlist;
|
|
||||||
for (auto pos : this->_lonlat_list) {
|
|
||||||
lonlist << QString("%1").arg(pos._lon_deg);
|
|
||||||
latlist << QString("%1").arg(pos._lat_deg);
|
|
||||||
}
|
|
||||||
STRLIST_SAVE(lonlist);
|
|
||||||
STRLIST_SAVE(latlist);
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include "messagebasic.h"
|
|
||||||
#include <standardglobe.h>
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 新建平面路径
|
|
||||||
/// </summary>
|
|
||||||
struct MESSAGEBASIC_EXPORT NewPlainRoute : public AbstractMessage {
|
|
||||||
QString _route_name;
|
|
||||||
|
|
||||||
NewPlainRoute();
|
|
||||||
|
|
||||||
// Serializable
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 删除平面路径
|
|
||||||
/// </summary>
|
|
||||||
struct MESSAGEBASIC_EXPORT RemovePlainRoute : public AbstractMessage {
|
|
||||||
QString _route_name;
|
|
||||||
|
|
||||||
RemovePlainRoute();
|
|
||||||
|
|
||||||
// Serializable
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 重置平面路径
|
|
||||||
/// </summary>
|
|
||||||
struct MESSAGEBASIC_EXPORT PlainRouteReset : public AbstractMessage {
|
|
||||||
QList<LonLatPos> _lonlat_list;
|
|
||||||
QString _route_name;
|
|
||||||
|
|
||||||
PlainRouteReset();
|
|
||||||
|
|
||||||
// Serializable
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 平面路径数据查询
|
|
||||||
/// </summary>
|
|
||||||
struct MESSAGEBASIC_EXPORT PlainRouteQuery : public AbstractMessage {
|
|
||||||
QString _route_name;
|
|
||||||
|
|
||||||
PlainRouteQuery();
|
|
||||||
|
|
||||||
// Serializable
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 返回平面路径数据
|
|
||||||
/// </summary>
|
|
||||||
struct MESSAGEBASIC_EXPORT PlainRouteInfo : public RespondDefault {
|
|
||||||
QList<LonLatPos> _lonlat_list;
|
|
||||||
QString _route_name;
|
|
||||||
|
|
||||||
PlainRouteInfo();
|
|
||||||
|
|
||||||
// Serializable
|
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
|
||||||
void saveTo(QJsonObject& obj) const override;
|
|
||||||
};
|
|
|
@ -11,7 +11,7 @@ StandardGlobe::StandardGlobe()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ECEFPos StandardGlobe::llaToEcef(const LonLatAltPos& v)
|
ECEFPos StandardGlobe::llaToEcef(const LLAPos& v)
|
||||||
{
|
{
|
||||||
// 柴麻鉦宣白伉鉦宣
|
// 柴麻鉦宣白伉鉦宣
|
||||||
auto axis_r_g = v._alt_m + _radius_m;
|
auto axis_r_g = v._alt_m + _radius_m;
|
||||||
|
@ -27,7 +27,7 @@ ECEFPos StandardGlobe::llaToEcef(const LonLatAltPos& v)
|
||||||
return ECEFPos{ axis_x, axis_y, axis_z };
|
return ECEFPos{ axis_x, axis_y, axis_z };
|
||||||
}
|
}
|
||||||
|
|
||||||
LonLatAltPos StandardGlobe::ecefToLLA(const ECEFPos& v)
|
LLAPos StandardGlobe::ecefToLLA(const ECEFPos& v)
|
||||||
{
|
{
|
||||||
auto r2 = std::sqrt(v._x_pos * v._x_pos + v._y_pos * v._y_pos);
|
auto r2 = std::sqrt(v._x_pos * v._x_pos + v._y_pos * v._y_pos);
|
||||||
auto rad_lon = acos(v._x_pos / r2);
|
auto rad_lon = acos(v._x_pos / r2);
|
||||||
|
@ -36,7 +36,7 @@ LonLatAltPos StandardGlobe::ecefToLLA(const ECEFPos& v)
|
||||||
auto rx = std::sqrt(v._x_pos * v._x_pos + v._y_pos * v._y_pos + v._z_pos * v._z_pos);
|
auto rx = std::sqrt(v._x_pos * v._x_pos + v._y_pos * v._y_pos + v._z_pos * v._z_pos);
|
||||||
auto rad_lat = asin(v._z_pos / rx);
|
auto rad_lat = asin(v._z_pos / rx);
|
||||||
|
|
||||||
LonLatAltPos ret;
|
LLAPos ret;
|
||||||
ret._lon_deg = rad2d(rad_lon);
|
ret._lon_deg = rad2d(rad_lon);
|
||||||
ret._lat_deg = rad2d(rad_lat);
|
ret._lat_deg = rad2d(rad_lat);
|
||||||
ret._alt_m = rx - _radius_m;
|
ret._alt_m = rx - _radius_m;
|
||||||
|
@ -44,7 +44,7 @@ LonLatAltPos StandardGlobe::ecefToLLA(const ECEFPos& v)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StandardGlobe::getDistanceWithTargetLLA(const LonLatAltPos& base, const LonLatAltPos& target, double& dist, double& azi)
|
void StandardGlobe::getDistanceWithTargetLLA(const LLAPos& base, const LLAPos& target, double& dist, double& azi)
|
||||||
{
|
{
|
||||||
// ecef文楚
|
// ecef文楚
|
||||||
auto vec_base = llaToEcef(base).getVec3();
|
auto vec_base = llaToEcef(base).getVec3();
|
||||||
|
@ -75,7 +75,7 @@ void StandardGlobe::getDistanceWithTargetLLA(const LonLatAltPos& base, const Lon
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <qquaternion.h>
|
#include <qquaternion.h>
|
||||||
void StandardGlobe::getTargetLLAWithDistance(const LonLatAltPos& base, double dist, double azi, LonLatAltPos& target)
|
void StandardGlobe::getTargetLLAWithDistance(const LLAPos& base, double dist, double azi, LLAPos& target)
|
||||||
{
|
{
|
||||||
auto ecef_bvec = llaToEcef(base).getVec3().normalized();
|
auto ecef_bvec = llaToEcef(base).getVec3().normalized();
|
||||||
QQuaternion u0(-deg2a(azi), ecef_bvec);
|
QQuaternion u0(-deg2a(azi), ecef_bvec);
|
||||||
|
@ -96,7 +96,7 @@ void StandardGlobe::getTargetLLAWithDistance(const LonLatAltPos& base, double di
|
||||||
target = ecefToLLA(sv);
|
target = ecefToLLA(sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
PolarPos StandardGlobe::getPolarWithLLA(const LonLatAltPos& base, const LonLatAltPos& target)
|
PolarPos StandardGlobe::getPolarWithLLA(const LLAPos& base, const LLAPos& target)
|
||||||
{
|
{
|
||||||
// ecef文楚
|
// ecef文楚
|
||||||
auto vec_base = llaToEcef(base).getVec3();
|
auto vec_base = llaToEcef(base).getVec3();
|
||||||
|
@ -134,7 +134,7 @@ PolarPos StandardGlobe::getPolarWithLLA(const LonLatAltPos& base, const LonLatAl
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
LonLatAltPos StandardGlobe::getLLAWithPolar(const LonLatAltPos& base, const PolarPos& target)
|
LLAPos StandardGlobe::getLLAWithPolar(const LLAPos& base, const PolarPos& target)
|
||||||
{
|
{
|
||||||
auto ecef_b = llaToEcef(base).getVec3();
|
auto ecef_b = llaToEcef(base).getVec3();
|
||||||
auto u_azi = QQuaternion(-deg2a(target._azimuth_deg), ecef_b.normalized());
|
auto u_azi = QQuaternion(-deg2a(target._azimuth_deg), ecef_b.normalized());
|
||||||
|
|
|
@ -4,18 +4,10 @@
|
||||||
|
|
||||||
class QVector3D;
|
class QVector3D;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ¾Î³¶È×ø±ê
|
|
||||||
/// </summary>
|
|
||||||
struct LonLatPos {
|
|
||||||
double _lon_deg = 0;
|
|
||||||
double _lat_deg = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 经纬高坐标系坐标
|
/// 经纬高坐标系坐标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
struct LonLatAltPos {
|
struct LLAPos {
|
||||||
double _lon_deg = 0;
|
double _lon_deg = 0;
|
||||||
double _lat_deg = 0;
|
double _lat_deg = 0;
|
||||||
double _alt_m = 0;
|
double _alt_m = 0;
|
||||||
|
@ -64,8 +56,8 @@ private:
|
||||||
public:
|
public:
|
||||||
StandardGlobe();
|
StandardGlobe();
|
||||||
|
|
||||||
static ECEFPos llaToEcef(const LonLatAltPos &v);
|
static ECEFPos llaToEcef(const LLAPos &v);
|
||||||
static LonLatAltPos ecefToLLA(const ECEFPos &v);
|
static LLAPos ecefToLLA(const ECEFPos &v);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据LLA坐标获取两点之间的大地线长度和b->t初始方位角,warning:本计算忽视LLA的高度值
|
/// 根据LLA坐标获取两点之间的大地线长度和b->t初始方位角,warning:本计算忽视LLA的高度值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -73,7 +65,7 @@ public:
|
||||||
/// <param name="target"></param>
|
/// <param name="target"></param>
|
||||||
/// <param name="dist"></param>
|
/// <param name="dist"></param>
|
||||||
/// <param name="azi"></param>
|
/// <param name="azi"></param>
|
||||||
static void getDistanceWithTargetLLA(const LonLatAltPos &base, const LonLatAltPos &target, double &dist, double &azi);
|
static void getDistanceWithTargetLLA(const LLAPos &base, const LLAPos &target, double &dist, double &azi);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据两点之间的大地线长度和b->t初始方位角,计算目标LLA定位坐标
|
/// 根据两点之间的大地线长度和b->t初始方位角,计算目标LLA定位坐标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -81,19 +73,19 @@ public:
|
||||||
/// <param name="dist"></param>
|
/// <param name="dist"></param>
|
||||||
/// <param name="azi"></param>
|
/// <param name="azi"></param>
|
||||||
/// <param name="target"></param>
|
/// <param name="target"></param>
|
||||||
static void getTargetLLAWithDistance(const LonLatAltPos& base, double dist, double azi, LonLatAltPos& target);
|
static void getTargetLLAWithDistance(const LLAPos& base, double dist, double azi, LLAPos& target);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过LLA坐标,获取目标极坐标
|
/// 通过LLA坐标,获取目标极坐标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="base"></param>
|
/// <param name="base"></param>
|
||||||
/// <param name="target"></param>
|
/// <param name="target"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
static PolarPos getPolarWithLLA(const LonLatAltPos &base, const LonLatAltPos &target);
|
static PolarPos getPolarWithLLA(const LLAPos &base, const LLAPos &target);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过极坐标,获取目标LLA坐标
|
/// 通过极坐标,获取目标LLA坐标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="base"></param>
|
/// <param name="base"></param>
|
||||||
/// <param name="target"></param>
|
/// <param name="target"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
static LonLatAltPos getLLAWithPolar(const LonLatAltPos &base, const PolarPos &target);
|
static LLAPos getLLAWithPolar(const LLAPos &base, const PolarPos &target);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue