2025-05-31 15:28:41 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "standardglobe_global.h"
|
2025-06-07 08:44:25 +00:00
|
|
|
|
|
2025-06-22 01:58:16 +00:00
|
|
|
|
#define PI 3.14159265358979323846
|
2025-06-21 07:56:59 +00:00
|
|
|
|
#define deg2a(v) v / 180.0 * PI
|
|
|
|
|
#define rad2d(v) v / PI * 180.0
|
|
|
|
|
|
2025-06-07 08:44:25 +00:00
|
|
|
|
class QVector3D;
|
2025-05-31 15:28:41 +00:00
|
|
|
|
|
2025-06-14 05:07:51 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
struct LonLatPos {
|
|
|
|
|
double _lon_deg = 0;
|
|
|
|
|
double _lat_deg = 0;
|
|
|
|
|
};
|
|
|
|
|
|
2025-05-31 15:28:41 +00:00
|
|
|
|
/// <summary>
|
2025-06-01 14:37:26 +00:00
|
|
|
|
/// <20><>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>
|
2025-05-31 15:28:41 +00:00
|
|
|
|
/// </summary>
|
2025-06-21 07:56:59 +00:00
|
|
|
|
struct STANDARDGLOBE_EXPORT LonLatAlt {
|
2025-05-31 15:28:41 +00:00
|
|
|
|
double _lon_deg = 0;
|
|
|
|
|
double _lat_deg = 0;
|
|
|
|
|
double _alt_m = 0;
|
2025-06-21 04:54:39 +00:00
|
|
|
|
|
2025-06-21 07:56:59 +00:00
|
|
|
|
LonLatAlt(double lon = 0, double lat = 0, double alt = 0);
|
|
|
|
|
LonLatAlt(const LonLatPos& plain_pos);
|
2025-06-21 04:54:39 +00:00
|
|
|
|
|
|
|
|
|
LonLatPos toLonLatPos() const;
|
2025-05-31 15:28:41 +00:00
|
|
|
|
};
|
|
|
|
|
|
2025-06-01 14:37:26 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
/// </summary>
|
2025-06-21 04:54:39 +00:00
|
|
|
|
struct ECEFv3d {
|
2025-06-07 08:44:25 +00:00
|
|
|
|
double _x_pos = 0;// ָ<><D6B8>0<EFBFBD>㾭<EFBFBD><E3BEAD>Ȧ<EFBFBD><C8A6>γ<EFBFBD><CEB3>0<EFBFBD>㽻<EFBFBD><E3BDBB>
|
2025-06-01 14:37:26 +00:00
|
|
|
|
double _y_pos = 0;
|
|
|
|
|
double _z_pos = 0;
|
2025-06-01 14:37:46 +00:00
|
|
|
|
QVector3D getVec3() const;
|
2025-06-21 04:54:39 +00:00
|
|
|
|
static ECEFv3d fromVec3(const QVector3D& p);
|
2025-06-01 14:37:26 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD>챱<EFBFBD><ECB1B1><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
/// </summary>
|
2025-06-21 04:54:39 +00:00
|
|
|
|
struct ENUv3d {
|
2025-06-01 14:37:26 +00:00
|
|
|
|
double _e_pos = 0;
|
|
|
|
|
double _n_pos = 0;
|
|
|
|
|
double _t_pos = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
struct PolarPos {
|
|
|
|
|
double _dist_m = 0;
|
|
|
|
|
double _azimuth_deg = 0;
|
|
|
|
|
double _pitch_deg = 0;
|
|
|
|
|
};
|
|
|
|
|
|
2025-05-31 15:28:41 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
class STANDARDGLOBE_EXPORT StandardGlobe
|
|
|
|
|
{
|
2025-06-01 14:37:26 +00:00
|
|
|
|
private:
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>
|
|
|
|
|
/// </summary>
|
|
|
|
|
static double _radius_m;
|
|
|
|
|
|
2025-05-31 15:28:41 +00:00
|
|
|
|
public:
|
2025-06-01 14:37:26 +00:00
|
|
|
|
StandardGlobe();
|
|
|
|
|
|
2025-06-21 07:56:59 +00:00
|
|
|
|
static ECEFv3d llaToEcef(const LonLatAlt& v);
|
|
|
|
|
static LonLatAlt ecefToLLA(const ECEFv3d& v);
|
2025-06-07 07:11:48 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>LLA<4C><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>Ⱥ<EFBFBD>b->t<><74>ʼ<EFBFBD><CABC>λ<EFBFBD>ǣ<EFBFBD>warning<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LLA<4C>ĸ߶<C4B8>ֵ
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="base"></param>
|
|
|
|
|
/// <param name="target"></param>
|
|
|
|
|
/// <param name="dist"></param>
|
|
|
|
|
/// <param name="azi"></param>
|
2025-06-22 01:58:16 +00:00
|
|
|
|
static void getDistanceWithLLA(const LonLatAlt& base, const LonLatAlt& target, double& dist, double& azi);
|
2025-06-07 07:11:48 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>Ⱥ<EFBFBD>b->t<><74>ʼ<EFBFBD><CABC>λ<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>LLA<4C><41>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="base"></param>
|
|
|
|
|
/// <param name="dist"></param>
|
|
|
|
|
/// <param name="azi"></param>
|
|
|
|
|
/// <param name="target"></param>
|
2025-06-22 01:58:16 +00:00
|
|
|
|
static void getLLAWithDistance(const LonLatAlt& base, double dist, double azi, LonLatAlt& target);
|
2025-06-07 08:44:25 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// ͨ<><CDA8>LLA<4C><41><EFBFBD>꣬<EFBFBD><EAA3AC>ȡĿ<C8A1>꼫<EFBFBD><EABCAB><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="base"></param>
|
|
|
|
|
/// <param name="target"></param>
|
|
|
|
|
/// <returns></returns>
|
2025-06-21 07:56:59 +00:00
|
|
|
|
static PolarPos getPolarWithLLA(const LonLatAlt& base, const LonLatAlt& target);
|
2025-06-07 08:44:25 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EAA3AC>ȡĿ<C8A1><C4BF>LLA<4C><41><EFBFBD><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="base"></param>
|
|
|
|
|
/// <param name="target"></param>
|
|
|
|
|
/// <returns></returns>
|
2025-06-21 07:56:59 +00:00
|
|
|
|
static LonLatAlt getLLAWithPolar(const LonLatAlt& base, const PolarPos& target);
|
2025-05-31 15:28:41 +00:00
|
|
|
|
};
|