1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 11:45:53 +01:00

RTrees can not be copyied!

This commit is contained in:
Martin Tůma 2021-03-21 21:23:00 +01:00
parent 80d54bda58
commit 98e30fe930
3 changed files with 30 additions and 22 deletions

View File

@ -80,6 +80,7 @@ public:
public: public:
RTree(); RTree();
RTree(const RTree &) = delete;
virtual ~RTree(); virtual ~RTree();
/// Insert entry /// Insert entry

View File

@ -84,17 +84,18 @@ bool JNXMap::readTiles()
} }
} }
_zooms = QVector<Zoom>(lh.size()); _zooms.reserve(lh.size());
for (int i = 0; i < lh.count(); i++) { for (int i = 0; i < lh.count(); i++) {
Zoom &z = _zooms[i]; _zooms.append(new Zoom());
Zoom *z = _zooms.last();
const Level &l = lh.at(i); const Level &l = lh.at(i);
if (!_file.seek(l.offset)) if (!_file.seek(l.offset))
return false; return false;
z.tiles = QVector<Tile>(l.count); z->tiles = QVector<Tile>(l.count);
for (quint32 j = 0; j < l.count; j++) { for (quint32 j = 0; j < l.count; j++) {
Tile &tile = z.tiles[j]; Tile &tile = z->tiles[j];
if (!(readValue(tile.top) && readValue(tile.right) if (!(readValue(tile.top) && readValue(tile.right)
&& readValue(tile.bottom) && readValue(tile.left) && readValue(tile.bottom) && readValue(tile.left)
@ -111,11 +112,11 @@ bool JNXMap::readTiles()
ReferencePoint tl(PointD(0, 0), rect.topLeft()); ReferencePoint tl(PointD(0, 0), rect.topLeft());
ReferencePoint br(PointD(tile.width, tile.height), ReferencePoint br(PointD(tile.width, tile.height),
rect.bottomRight()); rect.bottomRight());
z.transform = Transform(tl, br); z->transform = Transform(tl, br);
} }
QRectF trect(z.transform.proj2img(rect.topLeft()), QRectF trect(z->transform.proj2img(rect.topLeft()),
z.transform.proj2img(rect.bottomRight())); z->transform.proj2img(rect.bottomRight()));
tile.pos = trect.topLeft(); tile.pos = trect.topLeft();
qreal min[2], max[2]; qreal min[2], max[2];
@ -123,7 +124,7 @@ bool JNXMap::readTiles()
min[1] = trect.top(); min[1] = trect.top();
max[0] = trect.right(); max[0] = trect.right();
max[1] = trect.bottom(); max[1] = trect.bottom();
z.tree.Insert(min, max, &tile); z->tree.Insert(min, max, &tile);
} }
} }
@ -151,6 +152,11 @@ JNXMap::JNXMap(const QString &fileName, QObject *parent)
_valid = true; _valid = true;
} }
JNXMap::~JNXMap()
{
qDeleteAll(_zooms);
}
void JNXMap::load() void JNXMap::load()
{ {
_file.open(QIODevice::ReadOnly); _file.open(QIODevice::ReadOnly);
@ -163,14 +169,14 @@ void JNXMap::unload()
QPointF JNXMap::ll2xy(const Coordinates &c) QPointF JNXMap::ll2xy(const Coordinates &c)
{ {
const Zoom &z = _zooms.at(_zoom); const Zoom *z = _zooms.at(_zoom);
return z.transform.proj2img(_projection.ll2xy(c)) / _mapRatio; return z->transform.proj2img(_projection.ll2xy(c)) / _mapRatio;
} }
Coordinates JNXMap::xy2ll(const QPointF &p) Coordinates JNXMap::xy2ll(const QPointF &p)
{ {
const Zoom &z = _zooms.at(_zoom); const Zoom *z = _zooms.at(_zoom);
return _projection.xy2ll(z.transform.img2proj(p * _mapRatio)); return _projection.xy2ll(z->transform.img2proj(p * _mapRatio));
} }
QRectF JNXMap::bounds() QRectF JNXMap::bounds()
@ -248,7 +254,7 @@ bool JNXMap::cb(Tile *tile, void *context)
void JNXMap::draw(QPainter *painter, const QRectF &rect, Flags flags) void JNXMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
{ {
Q_UNUSED(flags); Q_UNUSED(flags);
const RTree<Tile*, qreal, 2> &tree = _zooms.at(_zoom).tree; const RTree<Tile*, qreal, 2> &tree = _zooms.at(_zoom)->tree;
Ctx ctx(painter, &_file, _mapRatio); Ctx ctx(painter, &_file, _mapRatio);
QRectF rr(rect.topLeft() * _mapRatio, rect.size() * _mapRatio); QRectF rr(rect.topLeft() * _mapRatio, rect.size() * _mapRatio);
@ -268,12 +274,12 @@ void JNXMap::setInputProjection(const Projection &projection)
_projection = projection; _projection = projection;
for (int i = 0; i < _zooms.size(); i++) { for (int i = 0; i < _zooms.size(); i++) {
Zoom &z = _zooms[i]; Zoom *z = _zooms[i];
z.tree.RemoveAll(); z->tree.RemoveAll();
for (int j = 0; j < z.tiles.size(); j++) { for (int j = 0; j < z->tiles.size(); j++) {
Tile &tile = z.tiles[j]; Tile &tile = z->tiles[j];
RectC llrect(Coordinates(ic2dc(tile.left), ic2dc(tile.top)), RectC llrect(Coordinates(ic2dc(tile.left), ic2dc(tile.top)),
Coordinates(ic2dc(tile.right), ic2dc(tile.bottom))); Coordinates(ic2dc(tile.right), ic2dc(tile.bottom)));
@ -284,11 +290,11 @@ void JNXMap::setInputProjection(const Projection &projection)
ReferencePoint tl(PointD(0, 0), rect.topLeft()); ReferencePoint tl(PointD(0, 0), rect.topLeft());
ReferencePoint br(PointD(tile.width, tile.height), ReferencePoint br(PointD(tile.width, tile.height),
rect.bottomRight()); rect.bottomRight());
z.transform = Transform(tl, br); z->transform = Transform(tl, br);
} }
QRectF trect(z.transform.proj2img(rect.topLeft()), QRectF trect(z->transform.proj2img(rect.topLeft()),
z.transform.proj2img(rect.bottomRight())); z->transform.proj2img(rect.bottomRight()));
tile.pos = trect.topLeft(); tile.pos = trect.topLeft();
qreal min[2], max[2]; qreal min[2], max[2];
@ -296,7 +302,7 @@ void JNXMap::setInputProjection(const Projection &projection)
min[1] = trect.top(); min[1] = trect.top();
max[0] = trect.right(); max[0] = trect.right();
max[1] = trect.bottom(); max[1] = trect.bottom();
z.tree.Insert(min, max, &tile); z->tree.Insert(min, max, &tile);
} }
} }
} }

View File

@ -16,6 +16,7 @@ public:
public: public:
JNXMap(const QString &fileName, QObject *parent = 0); JNXMap(const QString &fileName, QObject *parent = 0);
~JNXMap();
QRectF bounds(); QRectF bounds();
RectC llBounds() {return _bounds;} RectC llBounds() {return _bounds;}
@ -65,7 +66,7 @@ private:
static QPixmap pixmap(const Tile *tile, QFile *file); static QPixmap pixmap(const Tile *tile, QFile *file);
QFile _file; QFile _file;
QVector<Zoom> _zooms; QList<Zoom*> _zooms;
int _zoom; int _zoom;
RectC _bounds; RectC _bounds;
Projection _projection; Projection _projection;