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:
@ -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';
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user