Skip to content
Snippets Groups Projects
TerrainTile.h 3.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andreas Bircher's avatar
    Andreas Bircher committed
    #ifndef TERRAINTILE_H
    #define TERRAINTILE_H
    
    #include "QGCLoggingCategory.h"
    
    #include <QGeoCoordinate>
    
    Q_DECLARE_LOGGING_CATEGORY(TerrainTileLog)
    
    
    /**
     * @brief The TerrainTile class
     *
     * Implements an interface for https://developers.airmap.com/v2.0/docs/elevation-api
     */
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    class TerrainTile
    {
    public:
        TerrainTile();
        ~TerrainTile();
    
        /**
        * Constructor from json doc with elevation data (either from file or web)
        *
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        * @param document
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        TerrainTile(QJsonDocument document);
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Check for whether a coordinate lies within this tile
        *
        * @param coordinate
        * @return true if within
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        bool isIn(const QGeoCoordinate& coordinate) const;
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Check whether valid data is loaded
        *
        * @return true if data is valid
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        bool isValid(void) const { return _isValid; }
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Evaluates the elevation at the given coordinate
        *
        * @param coordinate
        * @return elevation
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double elevation(const QGeoCoordinate& coordinate) const;
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Accessor for the minimum elevation of the tile
        *
        * @return minimum elevation
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double minElevation(void) const { return _minElevation; }
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Accessor for the maximum elevation of the tile
        *
        * @return maximum elevation
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double maxElevation(void) const { return _maxElevation; }
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
        /**
        * Accessor for the average elevation of the tile
        *
        * @return average elevation
        */
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double avgElevation(void) const { return _avgElevation; }
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        /**
        * Accessor for the center coordinate
        *
        * @return center coordinate
        */
        QGeoCoordinate centerCoordinate(void) const;
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    private:
    
        inline int _latToDataIndex(double latitude) const;
        inline int _lonToDataIndex(double longitude) const;
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        QGeoCoordinate      _southWest;                                     /// South west corner of the tile
        QGeoCoordinate      _northEast;                                     /// North east corner of the tile
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double              _minElevation;                                  /// Minimum elevation in tile
        double              _maxElevation;                                  /// Maximum elevation in tile
        double              _avgElevation;                                  /// Average elevation of the tile
    
    Andreas Bircher's avatar
    Andreas Bircher committed
    
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        double**            _data;                                          /// 2D elevation data array
    
        int                 _gridSizeLat;                                   /// data grid size in latitude direction
        int                 _gridSizeLon;                                   /// data grid size in longitude direction
    
    Andreas Bircher's avatar
    Andreas Bircher committed
        bool                _isValid;                                       /// data loaded is valid
    
        // Json keys
        static const char*  _jsonStatusKey;
        static const char*  _jsonDataKey;
        static const char*  _jsonBoundsKey;
        static const char*  _jsonSouthWestKey;
        static const char*  _jsonNorthEastKey;
        static const char*  _jsonStatsKey;
        static const char*  _jsonMaxElevationKey;
        static const char*  _jsonMinElevationKey;
        static const char*  _jsonAvgElevationKey;
        static const char*  _jsonCarpetKey;
    };
    
    #endif // TERRAINTILE_H