diff --git a/src/Terrain/TerrainQuery.cc b/src/Terrain/TerrainQuery.cc index 829718ae61bce213d34029d6fecffe7a7ec2d351..3c63063cd20351c012d7bc9c8c9db868878b3c42 100644 --- a/src/Terrain/TerrainQuery.cc +++ b/src/Terrain/TerrainQuery.cc @@ -229,12 +229,10 @@ TerrainOfflineAirMapQuery::TerrainOfflineAirMapQuery(QObject* parent) void TerrainOfflineAirMapQuery::requestCoordinateHeights(const QList& coordinates) { if (coordinates.length() == 0) { - return false; + return; } - _tileBatchManager->addQuery(this, coordinates); - - return false; + _terrainTileManager->addCoordinateQuery(this, coordinates); } void TerrainOfflineAirMapQuery::requestPathHeights(const QGeoCoordinate& fromCoord, const QGeoCoordinate& toCoord) @@ -249,7 +247,7 @@ void TerrainOfflineAirMapQuery::requestCarpetHeights(const QGeoCoordinate& swCoo void TerrainOfflineAirMapQuery::_signalCoordinateHeights(bool success, QList heights) { - emit coordinateHeights(success, heights) + emit coordinateHeights(success, heights); } void TerrainOfflineAirMapQuery::_signalPathHeights(bool success, double latStep, double lonStep, const QList& heights) @@ -267,10 +265,10 @@ TerrainTileManager::TerrainTileManager(void) } -void TerrainTileManager::addQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList& coordinates) +void TerrainTileManager::addCoordinateQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList& coordinates) { if (coordinates.length() > 0) { - QList altitudes; + QList altitudes; if (!_getAltitudesForCoordinates(coordinates, altitudes)) { QueuedRequestInfo_t queuedRequestInfo = { terrainQueryInterface, coordinates, QueryMode::QueryModeCoordinates }; @@ -279,11 +277,11 @@ void TerrainTileManager::addQuery(TerrainOfflineAirMapQuery* terrainQueryInterfa } qCDebug(TerrainQueryLog) << "All altitudes taken from cached data"; - terrainQueryInterface->_signalTerrainData(coordinates.count() == altitudes.count(), altitudes); + terrainQueryInterface->_signalCoordinateHeights(coordinates.count() == altitudes.count(), altitudes); } } -bool TerrainTileManager::_getAltitudesForCoordinates(const QList& coordinates, QList& altitudes) +bool TerrainTileManager::_getAltitudesForCoordinates(const QList& coordinates, QList& altitudes) { foreach (const QGeoCoordinate& coordinate, coordinates) { QString tileHash = _getTileHash(coordinate); @@ -322,7 +320,7 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList void TerrainTileManager::_tileFailed(void) { - QList noAltitudes; + QList noAltitudes; foreach (const QueuedRequestInfo_t& requestInfo, _requestQueue) { if (requestInfo.queryMode == QueryMode::QueryModeCoordinates) { @@ -393,7 +391,7 @@ void TerrainTileManager::_fetchedTile() // now try to query the data again for (int i = _requestQueue.count() - 1; i >= 0; i--) { - QList altitudes; + QList altitudes; if (_getAltitudesForCoordinates(_requestQueue[i].coordinates, altitudes)) { if (_requestQueue[i].queryMode == QueryMode::QueryModeCoordinates) { _requestQueue[i].terrainQueryInterface->_signalCoordinateHeights(_requestQueue[i].coordinates.count() == altitudes.count(), altitudes); diff --git a/src/Terrain/TerrainQuery.h b/src/Terrain/TerrainQuery.h index 31cc01de30353c5d37ec59fc2c4a65ddcec5a147..d79910dac117d5c0beef3051394cfa9b0bb13c0b 100644 --- a/src/Terrain/TerrainQuery.h +++ b/src/Terrain/TerrainQuery.h @@ -114,18 +114,12 @@ class TerrainTileManager : public QObject { public: TerrainTileManager(void); - void addQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList& coordinates); + void addCoordinateQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList& coordinates); private slots: void _fetchedTile (void); /// slot to handle fetched elevation tiles private: - typedef struct { - TerrainOfflineAirMapQuery* terrainQueryInterface; - QList coordinates; - QueryMode queryMode; - } QueuedRequestInfo_t; - enum class State { Idle, Downloading, @@ -137,8 +131,14 @@ private: QueryModeCarpet }; + typedef struct { + TerrainOfflineAirMapQuery* terrainQueryInterface; + QList coordinates; + QueryMode queryMode; + } QueuedRequestInfo_t; + void _tileFailed(void); - bool _getAltitudesForCoordinates(const QList& coordinates, QList& altitudes); + bool _getAltitudesForCoordinates(const QList& coordinates, QList& altitudes); QString _getTileHash(const QGeoCoordinate& coordinate); /// Method to create a unique string for each tile QList _requestQueue; diff --git a/src/TerrainTile.cc b/src/TerrainTile.cc index c68e42ad79ae3121f02e43416addfc76140b81b5..a22fdb52431b8b601b1c0ff4a3da7de540d04e2b 100644 --- a/src/TerrainTile.cc +++ b/src/TerrainTile.cc @@ -125,10 +125,10 @@ TerrainTile::TerrainTile(QJsonDocument document) _gridSizeLon = row.count(); qCDebug(TerrainTileLog) << "Received tile has size in longitued direction: " << row.count(); if (_gridSizeLon > 0) { - _data = new float*[_gridSizeLat]; + _data = new double*[_gridSizeLat]; } for (int k = 0; k < _gridSizeLat; k++) { - _data[k] = new float[_gridSizeLon]; + _data[k] = new double[_gridSizeLon]; } } if (row.count() < _gridSizeLon) { @@ -154,7 +154,7 @@ bool TerrainTile::isIn(const QGeoCoordinate& coordinate) const return ret; } -float TerrainTile::elevation(const QGeoCoordinate& coordinate) const +double TerrainTile::elevation(const QGeoCoordinate& coordinate) const { if (_isValid) { qCDebug(TerrainTileLog) << "elevation: " << coordinate << " , in sw " << _southWest << " , ne " << _northEast; diff --git a/src/TerrainTile.h b/src/TerrainTile.h index 6f6254fc2c0cc02f8c746e5c83c9288ebd54584d..200a24d9284366f805e1994230590de8b0b52705 100644 --- a/src/TerrainTile.h +++ b/src/TerrainTile.h @@ -47,28 +47,28 @@ public: * @param coordinate * @return elevation */ - float elevation(const QGeoCoordinate& coordinate) const; + double elevation(const QGeoCoordinate& coordinate) const; /** * Accessor for the minimum elevation of the tile * * @return minimum elevation */ - float minElevation(void) const { return _minElevation; } + double minElevation(void) const { return _minElevation; } /** * Accessor for the maximum elevation of the tile * * @return maximum elevation */ - float maxElevation(void) const { return _maxElevation; } + double maxElevation(void) const { return _maxElevation; } /** * Accessor for the average elevation of the tile * * @return average elevation */ - float avgElevation(void) const { return _avgElevation; } + double avgElevation(void) const { return _avgElevation; } /** * Accessor for the center coordinate @@ -84,11 +84,11 @@ private: QGeoCoordinate _southWest; /// South west corner of the tile QGeoCoordinate _northEast; /// North east corner of the tile - float _minElevation; /// Minimum elevation in tile - float _maxElevation; /// Maximum elevation in tile - float _avgElevation; /// Average elevation of the tile + double _minElevation; /// Minimum elevation in tile + double _maxElevation; /// Maximum elevation in tile + double _avgElevation; /// Average elevation of the tile - float** _data; /// 2D elevation data array + double** _data; /// 2D elevation data array int _gridSizeLat; /// data grid size in latitude direction int _gridSizeLon; /// data grid size in longitude direction bool _isValid; /// data loaded is valid