/** * @RDE_HEADER@ * Some functions and struct for ElevationMap/LineOfSight (LOS) * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include #include #include #include namespace SituationMap { inline bool isInIntervall(double x, double x1, double x2) { return (((x > x1) && (x < x2)) || (((x > x2) && (x < x1)))); } // inline bool isInIntervall(double x, double x1, double x2) inline double radiusWGS84(double lat) { double sinLAT = sin(lat); return (MathConst::WGS84_Major_a * sqrt(1.0 - MathConst::WGS84_SQR_EXC * sinLAT * sinLAT)); } // inline double radiusWGS84(double lat) inline QPointF distance_in_meter_WGS84(const QPointF &start, const QPointF &end) // start, end in LonLat { // todo: prüfen ob Distanz zu groß, dann verbesserte Berechnung !! double lat = (end.y() + start.y()) / 2.0; double faktorLon = MathConst::WGS84_Major_a * cos(lat); // radiusWGS84(lat) * 2.0 * PI; double faktorLat = MathConst::WGS84_Minor_b; return QPointF(faktorLon * (end.x() - start.x()), faktorLat * (end.y() - start.y())); } // QPointF distance_in_meter_WGS84(const QPointF &start, const QPointF &end) inline double squareLength(const QPointF &v) { return v.x() * v.x() + v.y() * v.y(); } // inline double squareLength(const QPoint & v) inline double length(const QPointF &v) { return sqrt(squareLength(v)); } // inline double length(const QPoint & v) struct LOSentry // Defines 1 Entry for Line of Sight { LOSentry() = default; LOSentry(double dist, double height) : _dist(dist), _height(height) { ; } double &dist() { return _dist; } double &height() { return _height; } double dist() const { return _dist; } double height() const { return _height; } bool isUndefined() const { return std::isnan(_height); } private: double _dist = 0; // Distance from Start double _height = -NAN; }; /* LOSentry */ using Point3D = LtsUtils::QPoint3D; ///< x = lon ; y = lat , z = elevation/altitude in meters using LOSVector = QVector; using Vec2dVector = QVector; using Vec3dVector = QVector; } // SituationMap