Commit f01cd04c authored by Andreas Bircher's avatar Andreas Bircher

fixes

parent e33c30c5
...@@ -229,12 +229,10 @@ TerrainOfflineAirMapQuery::TerrainOfflineAirMapQuery(QObject* parent) ...@@ -229,12 +229,10 @@ TerrainOfflineAirMapQuery::TerrainOfflineAirMapQuery(QObject* parent)
void TerrainOfflineAirMapQuery::requestCoordinateHeights(const QList<QGeoCoordinate>& coordinates) void TerrainOfflineAirMapQuery::requestCoordinateHeights(const QList<QGeoCoordinate>& coordinates)
{ {
if (coordinates.length() == 0) { if (coordinates.length() == 0) {
return false; return;
} }
_tileBatchManager->addQuery(this, coordinates); _terrainTileManager->addCoordinateQuery(this, coordinates);
return false;
} }
void TerrainOfflineAirMapQuery::requestPathHeights(const QGeoCoordinate& fromCoord, const QGeoCoordinate& toCoord) void TerrainOfflineAirMapQuery::requestPathHeights(const QGeoCoordinate& fromCoord, const QGeoCoordinate& toCoord)
...@@ -249,7 +247,7 @@ void TerrainOfflineAirMapQuery::requestCarpetHeights(const QGeoCoordinate& swCoo ...@@ -249,7 +247,7 @@ void TerrainOfflineAirMapQuery::requestCarpetHeights(const QGeoCoordinate& swCoo
void TerrainOfflineAirMapQuery::_signalCoordinateHeights(bool success, QList<double> heights) void TerrainOfflineAirMapQuery::_signalCoordinateHeights(bool success, QList<double> heights)
{ {
emit coordinateHeights(success, heights) emit coordinateHeights(success, heights);
} }
void TerrainOfflineAirMapQuery::_signalPathHeights(bool success, double latStep, double lonStep, const QList<double>& heights) void TerrainOfflineAirMapQuery::_signalPathHeights(bool success, double latStep, double lonStep, const QList<double>& heights)
...@@ -267,10 +265,10 @@ TerrainTileManager::TerrainTileManager(void) ...@@ -267,10 +265,10 @@ TerrainTileManager::TerrainTileManager(void)
} }
void TerrainTileManager::addQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList<QGeoCoordinate>& coordinates) void TerrainTileManager::addCoordinateQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList<QGeoCoordinate>& coordinates)
{ {
if (coordinates.length() > 0) { if (coordinates.length() > 0) {
QList<float> altitudes; QList<double> altitudes;
if (!_getAltitudesForCoordinates(coordinates, altitudes)) { if (!_getAltitudesForCoordinates(coordinates, altitudes)) {
QueuedRequestInfo_t queuedRequestInfo = { terrainQueryInterface, coordinates, QueryMode::QueryModeCoordinates }; QueuedRequestInfo_t queuedRequestInfo = { terrainQueryInterface, coordinates, QueryMode::QueryModeCoordinates };
...@@ -279,11 +277,11 @@ void TerrainTileManager::addQuery(TerrainOfflineAirMapQuery* terrainQueryInterfa ...@@ -279,11 +277,11 @@ void TerrainTileManager::addQuery(TerrainOfflineAirMapQuery* terrainQueryInterfa
} }
qCDebug(TerrainQueryLog) << "All altitudes taken from cached data"; 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<QGeoCoordinate>& coordinates, QList<float>& altitudes) bool TerrainTileManager::_getAltitudesForCoordinates(const QList<QGeoCoordinate>& coordinates, QList<double>& altitudes)
{ {
foreach (const QGeoCoordinate& coordinate, coordinates) { foreach (const QGeoCoordinate& coordinate, coordinates) {
QString tileHash = _getTileHash(coordinate); QString tileHash = _getTileHash(coordinate);
...@@ -322,7 +320,7 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList<QGeoCoordinate> ...@@ -322,7 +320,7 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList<QGeoCoordinate>
void TerrainTileManager::_tileFailed(void) void TerrainTileManager::_tileFailed(void)
{ {
QList<float> noAltitudes; QList<double> noAltitudes;
foreach (const QueuedRequestInfo_t& requestInfo, _requestQueue) { foreach (const QueuedRequestInfo_t& requestInfo, _requestQueue) {
if (requestInfo.queryMode == QueryMode::QueryModeCoordinates) { if (requestInfo.queryMode == QueryMode::QueryModeCoordinates) {
...@@ -393,7 +391,7 @@ void TerrainTileManager::_fetchedTile() ...@@ -393,7 +391,7 @@ void TerrainTileManager::_fetchedTile()
// now try to query the data again // now try to query the data again
for (int i = _requestQueue.count() - 1; i >= 0; i--) { for (int i = _requestQueue.count() - 1; i >= 0; i--) {
QList<float> altitudes; QList<double> altitudes;
if (_getAltitudesForCoordinates(_requestQueue[i].coordinates, altitudes)) { if (_getAltitudesForCoordinates(_requestQueue[i].coordinates, altitudes)) {
if (_requestQueue[i].queryMode == QueryMode::QueryModeCoordinates) { if (_requestQueue[i].queryMode == QueryMode::QueryModeCoordinates) {
_requestQueue[i].terrainQueryInterface->_signalCoordinateHeights(_requestQueue[i].coordinates.count() == altitudes.count(), altitudes); _requestQueue[i].terrainQueryInterface->_signalCoordinateHeights(_requestQueue[i].coordinates.count() == altitudes.count(), altitudes);
......
...@@ -114,18 +114,12 @@ class TerrainTileManager : public QObject { ...@@ -114,18 +114,12 @@ class TerrainTileManager : public QObject {
public: public:
TerrainTileManager(void); TerrainTileManager(void);
void addQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList<QGeoCoordinate>& coordinates); void addCoordinateQuery(TerrainOfflineAirMapQuery* terrainQueryInterface, const QList<QGeoCoordinate>& coordinates);
private slots: private slots:
void _fetchedTile (void); /// slot to handle fetched elevation tiles void _fetchedTile (void); /// slot to handle fetched elevation tiles
private: private:
typedef struct {
TerrainOfflineAirMapQuery* terrainQueryInterface;
QList<QGeoCoordinate> coordinates;
QueryMode queryMode;
} QueuedRequestInfo_t;
enum class State { enum class State {
Idle, Idle,
Downloading, Downloading,
...@@ -137,8 +131,14 @@ private: ...@@ -137,8 +131,14 @@ private:
QueryModeCarpet QueryModeCarpet
}; };
typedef struct {
TerrainOfflineAirMapQuery* terrainQueryInterface;
QList<QGeoCoordinate> coordinates;
QueryMode queryMode;
} QueuedRequestInfo_t;
void _tileFailed(void); void _tileFailed(void);
bool _getAltitudesForCoordinates(const QList<QGeoCoordinate>& coordinates, QList<float>& altitudes); bool _getAltitudesForCoordinates(const QList<QGeoCoordinate>& coordinates, QList<double>& altitudes);
QString _getTileHash(const QGeoCoordinate& coordinate); /// Method to create a unique string for each tile QString _getTileHash(const QGeoCoordinate& coordinate); /// Method to create a unique string for each tile
QList<QueuedRequestInfo_t> _requestQueue; QList<QueuedRequestInfo_t> _requestQueue;
......
...@@ -125,10 +125,10 @@ TerrainTile::TerrainTile(QJsonDocument document) ...@@ -125,10 +125,10 @@ TerrainTile::TerrainTile(QJsonDocument document)
_gridSizeLon = row.count(); _gridSizeLon = row.count();
qCDebug(TerrainTileLog) << "Received tile has size in longitued direction: " << row.count(); qCDebug(TerrainTileLog) << "Received tile has size in longitued direction: " << row.count();
if (_gridSizeLon > 0) { if (_gridSizeLon > 0) {
_data = new float*[_gridSizeLat]; _data = new double*[_gridSizeLat];
} }
for (int k = 0; k < _gridSizeLat; k++) { for (int k = 0; k < _gridSizeLat; k++) {
_data[k] = new float[_gridSizeLon]; _data[k] = new double[_gridSizeLon];
} }
} }
if (row.count() < _gridSizeLon) { if (row.count() < _gridSizeLon) {
...@@ -154,7 +154,7 @@ bool TerrainTile::isIn(const QGeoCoordinate& coordinate) const ...@@ -154,7 +154,7 @@ bool TerrainTile::isIn(const QGeoCoordinate& coordinate) const
return ret; return ret;
} }
float TerrainTile::elevation(const QGeoCoordinate& coordinate) const double TerrainTile::elevation(const QGeoCoordinate& coordinate) const
{ {
if (_isValid) { if (_isValid) {
qCDebug(TerrainTileLog) << "elevation: " << coordinate << " , in sw " << _southWest << " , ne " << _northEast; qCDebug(TerrainTileLog) << "elevation: " << coordinate << " , in sw " << _southWest << " , ne " << _northEast;
......
...@@ -47,28 +47,28 @@ public: ...@@ -47,28 +47,28 @@ public:
* @param coordinate * @param coordinate
* @return elevation * @return elevation
*/ */
float elevation(const QGeoCoordinate& coordinate) const; double elevation(const QGeoCoordinate& coordinate) const;
/** /**
* Accessor for the minimum elevation of the tile * Accessor for the minimum elevation of the tile
* *
* @return minimum elevation * @return minimum elevation
*/ */
float minElevation(void) const { return _minElevation; } double minElevation(void) const { return _minElevation; }
/** /**
* Accessor for the maximum elevation of the tile * Accessor for the maximum elevation of the tile
* *
* @return maximum elevation * @return maximum elevation
*/ */
float maxElevation(void) const { return _maxElevation; } double maxElevation(void) const { return _maxElevation; }
/** /**
* Accessor for the average elevation of the tile * Accessor for the average elevation of the tile
* *
* @return average elevation * @return average elevation
*/ */
float avgElevation(void) const { return _avgElevation; } double avgElevation(void) const { return _avgElevation; }
/** /**
* Accessor for the center coordinate * Accessor for the center coordinate
...@@ -84,11 +84,11 @@ private: ...@@ -84,11 +84,11 @@ private:
QGeoCoordinate _southWest; /// South west corner of the tile QGeoCoordinate _southWest; /// South west corner of the tile
QGeoCoordinate _northEast; /// North east corner of the tile QGeoCoordinate _northEast; /// North east corner of the tile
float _minElevation; /// Minimum elevation in tile double _minElevation; /// Minimum elevation in tile
float _maxElevation; /// Maximum elevation in tile double _maxElevation; /// Maximum elevation in tile
float _avgElevation; /// Average elevation of the 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 _gridSizeLat; /// data grid size in latitude direction
int _gridSizeLon; /// data grid size in longitude direction int _gridSizeLon; /// data grid size in longitude direction
bool _isValid; /// data loaded is valid bool _isValid; /// data loaded is valid
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment