mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 03:35:53 +01:00
Code cleanup
This commit is contained in:
parent
98704ef44b
commit
3e6ad20c05
@ -128,9 +128,9 @@ HEADERS += src/common/config.h \
|
||||
src/map/ENC/objects.h \
|
||||
src/map/ENC/rastertile.h \
|
||||
src/map/ENC/style.h \
|
||||
src/map/IMG/dem.h \
|
||||
src/map/IMG/demfile.h \
|
||||
src/map/IMG/demtile.h \
|
||||
src/map/IMG/demtree.h \
|
||||
src/map/IMG/jls.h \
|
||||
src/map/IMG/section.h \
|
||||
src/map/IMG/zoom.h \
|
||||
@ -351,8 +351,8 @@ SOURCES += src/main.cpp \
|
||||
src/map/ENC/mapdata.cpp \
|
||||
src/map/ENC/rastertile.cpp \
|
||||
src/map/ENC/style.cpp \
|
||||
src/map/IMG/dem.cpp \
|
||||
src/map/IMG/demfile.cpp \
|
||||
src/map/IMG/demtree.cpp \
|
||||
src/map/IMG/jls.cpp \
|
||||
src/map/conversion.cpp \
|
||||
src/map/encatlas.cpp \
|
||||
|
@ -1,44 +0,0 @@
|
||||
#ifndef IMG_DEM_H
|
||||
#define IMG_DEM_H
|
||||
|
||||
#include "common/rtree.h"
|
||||
#include "mapdata.h"
|
||||
|
||||
namespace IMG {
|
||||
|
||||
class DEM {
|
||||
public:
|
||||
|
||||
typedef RTree<const MapData::Elevation*, double, 2> DEMTRee;
|
||||
|
||||
static void buildTree(const QList<MapData::Elevation> &tiles, DEMTRee &tree);
|
||||
static void searchTree(const DEMTRee &tree, const Coordinates &c,
|
||||
double &ele);
|
||||
|
||||
private:
|
||||
struct ElevationCTX {
|
||||
ElevationCTX(const DEMTRee &tree, const Coordinates &c, double &ele)
|
||||
: tree(tree), c(c), ele(ele) {}
|
||||
|
||||
const DEMTRee &tree;
|
||||
const Coordinates &c;
|
||||
double &ele;
|
||||
};
|
||||
|
||||
struct EdgeCTX {
|
||||
EdgeCTX(const Coordinates &c, double &ele) : c(c), ele(ele) {}
|
||||
|
||||
const Coordinates &c;
|
||||
double &ele;
|
||||
};
|
||||
|
||||
static double edge(const DEMTRee &tree, const Coordinates &c);
|
||||
static double elevation(const DEMTRee &tree, const MapData::Elevation *e,
|
||||
const Coordinates &c);
|
||||
static bool elevationCb(const MapData::Elevation *e, void *context);
|
||||
static bool edgeCb(const MapData::Elevation *e, void *context);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // IMG_DEM_H
|
@ -1,4 +1,4 @@
|
||||
#include "dem.h"
|
||||
#include "demtree.h"
|
||||
|
||||
using namespace IMG;
|
||||
|
||||
@ -17,7 +17,15 @@ static double val(const Matrix<qint16> &m, int row, int col)
|
||||
return (v == -32768) ? NAN : (double)v;
|
||||
}
|
||||
|
||||
bool DEM::edgeCb(const MapData::Elevation *e, void *context)
|
||||
bool DEMTree::elevationCb(const MapData::Elevation *e, void *context)
|
||||
{
|
||||
ElevationCTX *ctx = (ElevationCTX*)context;
|
||||
|
||||
ctx->ele = elevation(ctx->tree, e, ctx->c);
|
||||
return std::isnan(ctx->ele);
|
||||
}
|
||||
|
||||
bool DEMTree::edgeCb(const MapData::Elevation *e, void *context)
|
||||
{
|
||||
EdgeCTX *ctx = (EdgeCTX*)context;
|
||||
|
||||
@ -31,10 +39,10 @@ bool DEM::edgeCb(const MapData::Elevation *e, void *context)
|
||||
return std::isnan(ctx->ele);
|
||||
}
|
||||
|
||||
double DEM::edge(const DEMTRee &tree, const Coordinates &c)
|
||||
double DEMTree::edge(const Tree &tree, const Coordinates &c)
|
||||
{
|
||||
double min[2], max[2];
|
||||
double ele = NAN;
|
||||
double min[2], max[2];
|
||||
EdgeCTX ctx(c, ele);
|
||||
|
||||
min[0] = c.lon();
|
||||
@ -47,7 +55,7 @@ double DEM::edge(const DEMTRee &tree, const Coordinates &c)
|
||||
return ele;
|
||||
}
|
||||
|
||||
double DEM::elevation(const DEMTRee &tree, const MapData::Elevation *e,
|
||||
double DEMTree::elevation(const Tree &tree, const MapData::Elevation *e,
|
||||
const Coordinates &c)
|
||||
{
|
||||
double x = (c.lon() - e->rect.left()) / e->xr;
|
||||
@ -72,7 +80,7 @@ double DEM::elevation(const DEMTRee &tree, const MapData::Elevation *e,
|
||||
return interpolate(x - col, y - row, p0, p1, p2, p3);
|
||||
}
|
||||
|
||||
void DEM::buildTree(const QList<MapData::Elevation> &tiles, DEMTRee &tree)
|
||||
DEMTree::DEMTree(const QList<MapData::Elevation> &tiles)
|
||||
{
|
||||
double min[2], max[2];
|
||||
|
||||
@ -84,29 +92,22 @@ void DEM::buildTree(const QList<MapData::Elevation> &tiles, DEMTRee &tree)
|
||||
max[0] = e.rect.right();
|
||||
max[1] = e.rect.top();
|
||||
|
||||
tree.Insert(min, max, &e);
|
||||
_tree.Insert(min, max, &e);
|
||||
}
|
||||
}
|
||||
|
||||
bool DEM::elevationCb(const MapData::Elevation *e, void *context)
|
||||
{
|
||||
ElevationCTX *ctx = (ElevationCTX*)context;
|
||||
|
||||
ctx->ele = elevation(ctx->tree, e, ctx->c);
|
||||
return std::isnan(ctx->ele);
|
||||
}
|
||||
|
||||
void DEM::searchTree(const DEMTRee &tree, const Coordinates &c,
|
||||
double &ele)
|
||||
double DEMTree::elevation(const Coordinates &c) const
|
||||
{
|
||||
double ele = NAN;
|
||||
double min[2], max[2];
|
||||
ElevationCTX ctx(tree, c, ele);
|
||||
ElevationCTX ctx(_tree, c, ele);
|
||||
|
||||
min[0] = c.lon();
|
||||
min[1] = c.lat();
|
||||
max[0] = c.lon();
|
||||
max[1] = c.lat();
|
||||
|
||||
ele = NAN;
|
||||
tree.Search(min, max, elevationCb, &ctx);
|
||||
_tree.Search(min, max, elevationCb, &ctx);
|
||||
|
||||
return ele;
|
||||
}
|
45
src/map/IMG/demtree.h
Normal file
45
src/map/IMG/demtree.h
Normal file
@ -0,0 +1,45 @@
|
||||
#ifndef IMG_DEMTREE_H
|
||||
#define IMG_DEMTREE_H
|
||||
|
||||
#include "common/rtree.h"
|
||||
#include "mapdata.h"
|
||||
|
||||
namespace IMG {
|
||||
|
||||
class DEMTree {
|
||||
public:
|
||||
DEMTree(const QList<MapData::Elevation> &tiles);
|
||||
|
||||
double elevation(const Coordinates &c) const;
|
||||
|
||||
private:
|
||||
typedef RTree<const MapData::Elevation*, double, 2> Tree;
|
||||
|
||||
struct ElevationCTX {
|
||||
ElevationCTX(const Tree &tree, const Coordinates &c, double &ele)
|
||||
: tree(tree), c(c), ele(ele) {}
|
||||
|
||||
const Tree &tree;
|
||||
const Coordinates &c;
|
||||
double &ele;
|
||||
};
|
||||
|
||||
struct EdgeCTX {
|
||||
EdgeCTX(const Coordinates &c, double &ele) : c(c), ele(ele) {}
|
||||
|
||||
const Coordinates &c;
|
||||
double &ele;
|
||||
};
|
||||
|
||||
static double edge(const Tree &tree, const Coordinates &c);
|
||||
static double elevation(const Tree &tree, const MapData::Elevation *e,
|
||||
const Coordinates &c);
|
||||
static bool elevationCb(const MapData::Elevation *e, void *context);
|
||||
static bool edgeCb(const MapData::Elevation *e, void *context);
|
||||
|
||||
Tree _tree;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // IMG_DEMTREE_H
|
@ -10,7 +10,7 @@
|
||||
#include "map/filter.h"
|
||||
#include "style.h"
|
||||
#include "lblfile.h"
|
||||
#include "dem.h"
|
||||
#include "demtree.h"
|
||||
#include "rastertile.h"
|
||||
|
||||
using namespace IMG;
|
||||
@ -470,7 +470,6 @@ MatrixD RasterTile::elevation(int extend) const
|
||||
if (_data->hasDEM()) {
|
||||
RectC rect;
|
||||
QList<MapData::Elevation> tiles;
|
||||
DEMTRee tree;
|
||||
|
||||
for (int i = 0; i < ll.size(); i++)
|
||||
rect = rect.united(ll.at(i));
|
||||
@ -480,14 +479,14 @@ MatrixD RasterTile::elevation(int extend) const
|
||||
_data->elevations(rect.adjusted(0, 0, rect.width() / factor,
|
||||
-rect.height() / factor), _zoom, &tiles);
|
||||
|
||||
DEM::buildTree(tiles, tree);
|
||||
DEMTree tree(tiles);
|
||||
for (int i = 0; i < ll.size(); i++)
|
||||
DEM::searchTree(tree, ll.at(i), m.at(i));
|
||||
m.at(i) = tree.elevation(ll.at(i));
|
||||
} else {
|
||||
::DEM::lock();
|
||||
DEM::lock();
|
||||
for (int i = 0; i < ll.size(); i++)
|
||||
m.at(i) = ::DEM::elevation(ll.at(i));
|
||||
::DEM::unlock();
|
||||
m.at(i) = DEM::elevation(ll.at(i));
|
||||
DEM::unlock();
|
||||
}
|
||||
|
||||
return m;
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "IMG/imgdata.h"
|
||||
#include "IMG/gmapdata.h"
|
||||
#include "IMG/rastertile.h"
|
||||
#include "IMG/dem.h"
|
||||
#include "IMG/demtree.h"
|
||||
#include "osm.h"
|
||||
#include "pcs.h"
|
||||
#include "rectd.h"
|
||||
@ -273,16 +273,12 @@ double IMGMap::elevation(const Coordinates &c)
|
||||
|
||||
if (d->hasDEM()) {
|
||||
QList<MapData::Elevation> tiles;
|
||||
DEM::DEMTRee tree;
|
||||
double ele = NAN;
|
||||
|
||||
d->elevations(RectC(Coordinates(c), Coordinates(c)), d->zooms().max(),
|
||||
&tiles);
|
||||
DEMTree tree(tiles);
|
||||
|
||||
DEM::buildTree(tiles, tree);
|
||||
DEM::searchTree(tree, c, ele);
|
||||
|
||||
return ele;
|
||||
return tree.elevation(c);
|
||||
} else
|
||||
return Map::elevation(c);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user