Browse Source

first implementation of binary representation of elevation data

QGC4.4
Sebastian Verling 7 years ago
parent
commit
7b00e7a32f
  1. 16
      src/QtLocationPlugin/QGeoMapReplyQGC.cpp
  2. 12
      src/TerrainTile.cc
  3. 10
      src/TerrainTile.h

16
src/QtLocationPlugin/QGeoMapReplyQGC.cpp

@ -52,9 +52,6 @@
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
#include <QFile> #include <QFile>
#include "TerrainTile.h" #include "TerrainTile.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
int QGeoTiledMapReplyQGC::_requestCount = 0; int QGeoTiledMapReplyQGC::_requestCount = 0;
@ -129,18 +126,13 @@ QGeoTiledMapReplyQGC::networkReplyFinished()
// convert "a" to binary in case we have elevation data // convert "a" to binary in case we have elevation data
if ((UrlFactory::MapType)tileSpec().mapId() == UrlFactory::MapType::AirmapElevation) { if ((UrlFactory::MapType)tileSpec().mapId() == UrlFactory::MapType::AirmapElevation) {
QJsonParseError parseError;
QJsonDocument json = QJsonDocument::fromJson(a, &parseError); a = TerrainTile::serialize(a);
if (parseError.error != QJsonParseError::NoError) { if (a.isEmpty()) {
emit aborted(); emit aborted();
return; return;
} else {
a = TerrainTile::serialize(json);
if (a.isEmpty()) {
emit aborted();
return;
}
} }
} }
setMapImageData(a); setMapImageData(a);
if(!format.isEmpty()) { if(!format.isEmpty()) {

12
src/TerrainTile.cc

@ -111,11 +111,17 @@ QGeoCoordinate TerrainTile::centerCoordinate(void) const
return _southWest.atDistanceAndAzimuth(_southWest.distanceTo(_northEast) / 2.0, _southWest.azimuthTo(_northEast)); return _southWest.atDistanceAndAzimuth(_southWest.distanceTo(_northEast) / 2.0, _southWest.azimuthTo(_northEast));
} }
QByteArray TerrainTile::serialize(QJsonDocument document) QByteArray TerrainTile::serialize(QByteArray input)
{ {
QJsonParseError parseError;
QJsonDocument document = QJsonDocument::fromJson(input, &parseError);
if (parseError.error != QJsonParseError::NoError) {
QByteArray emptyArray;
return emptyArray;
}
QByteArray byteArray; QByteArray byteArray;
QIODevice::OpenMode writeonly = QIODevice::WriteOnly; QDataStream stream(&byteArray, QIODevice::WriteOnly);
QDataStream stream(&byteArray, writeonly);
if (!document.isObject()) { if (!document.isObject()) {
qCDebug(TerrainTileLog) << "Terrain tile json doc is no object"; qCDebug(TerrainTileLog) << "Terrain tile json doc is no object";
QByteArray emptyArray; QByteArray emptyArray;

10
src/TerrainTile.h

@ -89,7 +89,7 @@ public:
* *
* @return serialized data * @return serialized data
*/ */
static QByteArray serialize(QJsonDocument document); static QByteArray serialize(QByteArray input);
private: private:
inline int _latToDataIndex(double latitude) const; inline int _latToDataIndex(double latitude) const;
@ -98,11 +98,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
int _minElevation; /// Minimum elevation in tile int _minElevation; /// Minimum elevation in tile
int _maxElevation; /// Maximum elevation in tile int _maxElevation; /// Maximum elevation in tile
double _avgElevation; /// Average elevation of the tile double _avgElevation; /// Average elevation of the tile
double** _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

Loading…
Cancel
Save