1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-30 22:51:16 +01:00

Move the world maps bounds limit hack to the propper place

This commit is contained in:
Martin Tůma 2020-04-19 11:36:17 +02:00
parent 33bbd6a592
commit 08334d7fde
4 changed files with 9 additions and 14 deletions

View File

@ -1,6 +1,5 @@
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QDir> #include <QDir>
#include "map/osm.h"
#include "vectortile.h" #include "vectortile.h"
#include "gmap.h" #include "gmap.h"
@ -104,11 +103,6 @@ bool GMAP::loadTile(const QDir &dir, bool baseMap)
if (tile->zooms().min() < _zooms.min()) if (tile->zooms().min() < _zooms.min())
_zooms.setMin(tile->zooms().min()); _zooms.setMin(tile->zooms().min());
// Limit world maps bounds so that the maps can be projected using
// the default Web Mercator projection
if (_bounds.height() > 120)
_bounds &= OSM::BOUNDS;
return true; return true;
} }

View File

@ -1,6 +1,5 @@
#include <QMap> #include <QMap>
#include <QtEndian> #include <QtEndian>
#include "map/osm.h"
#include "vectortile.h" #include "vectortile.h"
#include "img.h" #include "img.h"
@ -169,11 +168,6 @@ IMG::IMG(const QString &fileName) : _file(fileName)
tile->markAsBasemap(); tile->markAsBasemap();
} }
// Limit world maps bounds so that the maps can be projected using
// the default Web Mercator projection
if (_bounds.height() > 120)
_bounds &= OSM::BOUNDS;
if (!_tileTree.Count()) if (!_tileTree.Count())
_errorString = "No usable map tile found"; _errorString = "No usable map tile found";
else else

View File

@ -16,6 +16,7 @@
#include "IMG/style.h" #include "IMG/style.h"
#include "IMG/img.h" #include "IMG/img.h"
#include "IMG/gmap.h" #include "IMG/gmap.h"
#include "osm.h"
#include "pcs.h" #include "pcs.h"
#include "rectd.h" #include "rectd.h"
#include "imgmap.h" #include "imgmap.h"
@ -244,6 +245,11 @@ IMGMap::IMGMap(const QString &fileName, QObject *parent)
return; return;
} }
// Limit world maps bounds so that the maps can be projected using
// the default Web Mercator projection
_dataBounds = (_data->bounds().height() > 120)
? _data->bounds() & OSM::BOUNDS : _data->bounds();
_zoom = _data->zooms().min(); _zoom = _data->zooms().min();
updateTransform(); updateTransform();
@ -305,7 +311,7 @@ Transform IMGMap::transform(int zoom) const
{ {
double scale = _projection.isGeographic() double scale = _projection.isGeographic()
? 360.0 / (1<<zoom) : (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom); ? 360.0 / (1<<zoom) : (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom);
PointD topLeft(_projection.ll2xy(_data->bounds().topLeft())); PointD topLeft(_projection.ll2xy(_dataBounds.topLeft()));
return Transform(ReferencePoint(PointD(0, 0), topLeft), return Transform(ReferencePoint(PointD(0, 0), topLeft),
PointD(scale, scale)); PointD(scale, scale));
} }
@ -314,7 +320,7 @@ void IMGMap::updateTransform()
{ {
_transform = transform(_zoom); _transform = transform(_zoom);
RectD prect(_data->bounds(), _projection); RectD prect(_dataBounds, _projection);
_bounds = QRectF(_transform.proj2img(prect.topLeft()), _bounds = QRectF(_transform.proj2img(prect.topLeft()),
_transform.proj2img(prect.bottomRight())); _transform.proj2img(prect.bottomRight()));
} }

View File

@ -63,6 +63,7 @@ private:
Projection _projection; Projection _projection;
Transform _transform; Transform _transform;
QRectF _bounds; QRectF _bounds;
RectC _dataBounds;
bool _valid; bool _valid;
QString _errorString; QString _errorString;