1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-06-27 03:29:16 +02:00

Added hillshading to vector maps

This commit is contained in:
2024-02-21 08:49:09 +01:00
parent f21a155f79
commit cf86fb7557
27 changed files with 438 additions and 81 deletions

View File

@ -69,6 +69,8 @@ static qreal height(const Coordinates &c, const QByteArray *data)
return interpolate(dx, dy, p0, p1, p2, p3);
}
QMutex DEM::_lock;
QString DEM::Tile::latStr() const
{
const char ns = (_lat >= 0) ? 'N' : 'S';

View File

@ -4,12 +4,11 @@
#include <QString>
#include <QCache>
#include <QByteArray>
#include <QMutex>
#include "common/hash.h"
#include "area.h"
class QString;
class Coordinates;
class RectC;
class DEM
{
@ -37,7 +36,10 @@ public:
static void setCacheSize(int size);
static void setDir(const QString &path);
static void clearCache();
static qreal elevation(const Coordinates &c);
static void lock() {_lock.lock();}
static void unlock() {_lock.unlock();}
static QList<Area> tiles();
@ -48,6 +50,7 @@ private:
static QString _dir;
static TileCache _data;
static QMutex _lock;
};
inline HASH_T qHash(const DEM::Tile &tile)

View File

@ -55,11 +55,13 @@ Graph Route::demElevation() const
QDateTime date;
GraphSegment gs(date);
DEM::lock();
for (int i = 0; i < _data.size(); i++) {
qreal dem = DEM::elevation(_data.at(i).coordinates());
if (!std::isnan(dem))
gs.append(GraphPoint(_distance.at(i), NAN, dem));
}
DEM::unlock();
if (gs.size() >= 2)
graph.append(gs);

View File

@ -281,6 +281,7 @@ Graph Track::demElevation() const
{
Graph ret;
DEM::lock();
for (int i = 0; i < _data.size(); i++) {
const SegmentData &sd = _data.at(i);
if (sd.size() < 2)
@ -298,6 +299,7 @@ Graph Track::demElevation() const
if (gs.size() >= 2)
ret.append(filter(gs, _elevationWindow));
}
DEM::unlock();
if (_data.style().color().isValid())
ret.setColor(_data.style().color());

View File

@ -10,17 +10,21 @@ QHash<QString, QPixmap> Waypoint::_symbolIcons;
QPair<qreal, qreal> Waypoint::elevations() const
{
if (_useDEM) {
DEM::lock();
qreal dem = DEM::elevation(coordinates());
DEM::unlock();
if (!std::isnan(dem))
return QPair<qreal, qreal>(dem, _show2ndElevation ? elevation()
: NAN);
else
return QPair<qreal, qreal>(elevation(), NAN);
} else {
if (hasElevation())
return QPair<qreal, qreal>(elevation(), _show2ndElevation
? DEM::elevation(coordinates()) : NAN);
else
if (hasElevation()) {
DEM::lock();
qreal dem = _show2ndElevation ? DEM::elevation(coordinates()) : NAN;
DEM::unlock();
return QPair<qreal, qreal>(elevation(), dem);
} else
return QPair<qreal, qreal>(DEM::elevation(coordinates()), NAN);
}
}