1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-01-31 09:05:14 +01:00

Code cleanup

This commit is contained in:
Martin Tůma 2018-09-22 14:17:24 +02:00
parent c39298000d
commit e9f7642cde
5 changed files with 32 additions and 24 deletions

View File

@ -19,6 +19,8 @@ public:
void setMin(int min) {_min = min;} void setMin(int min) {_min = min;}
void setMax(int max) {_max = max;} void setMax(int max) {_max = max;}
bool contains(int val) const {return (val >= _min && val <= _max);}
private: private:
int _min, _max; int _min, _max;
}; };

View File

@ -23,6 +23,11 @@ public:
{return Coordinates((_tl.lon() + _br.lon()) / 2.0, {return Coordinates((_tl.lon() + _br.lon()) / 2.0,
(_tl.lat() + _br.lat()) / 2.0);} (_tl.lat() + _br.lat()) / 2.0);}
double top() const {return _tl.lat();}
double bottom() const {return _br.lat();}
double left() const {return _tl.lon();}
double right() const {return _br.lon();}
RectC operator|(const RectC &r) const; RectC operator|(const RectC &r) const;
RectC &operator|=(const RectC &r) {*this = *this | r; return *this;} RectC &operator|=(const RectC &r) {*this = *this | r; return *this;}
RectC operator&(const RectC &r) const; RectC operator&(const RectC &r) const;

View File

@ -4,19 +4,12 @@
#include "onlinemap.h" #include "onlinemap.h"
#include "wmtsmap.h" #include "wmtsmap.h"
#include "wmsmap.h" #include "wmsmap.h"
#include "osm.h"
#include "mapsource.h" #include "mapsource.h"
#define ZOOM_MAX 19
#define ZOOM_MIN 0
#define BOUNDS_LEFT -180
#define BOUNDS_TOP 85.0511
#define BOUNDS_RIGHT 180
#define BOUNDS_BOTTOM -85.0511
MapSource::Config::Config() : type(OSM), zooms(osm::zooms), bounds(osm::bounds),
MapSource::Config::Config() : type(OSM), zooms(ZOOM_MIN, ZOOM_MAX), format("image/png"), rest(false), tileRatio(1.0) {}
bounds(Coordinates(BOUNDS_LEFT, BOUNDS_TOP), Coordinates(BOUNDS_RIGHT,
BOUNDS_BOTTOM)), format("image/png"), rest(false), tileRatio(1.0) {}
static CoordinateSystem coordinateSystem(QXmlStreamReader &reader) static CoordinateSystem coordinateSystem(QXmlStreamReader &reader)
@ -38,21 +31,21 @@ Range MapSource::zooms(QXmlStreamReader &reader)
if (attr.hasAttribute("min")) { if (attr.hasAttribute("min")) {
min = attr.value("min").toString().toInt(&res); min = attr.value("min").toString().toInt(&res);
if (!res || (min < ZOOM_MIN || min > ZOOM_MAX)) { if (!res || !osm::zooms.contains(min)) {
reader.raiseError("Invalid minimal zoom level"); reader.raiseError("Invalid minimal zoom level");
return Range(); return Range();
} }
} else } else
min = ZOOM_MIN; min = osm::zooms.min();
if (attr.hasAttribute("max")) { if (attr.hasAttribute("max")) {
max = attr.value("max").toString().toInt(&res); max = attr.value("max").toString().toInt(&res);
if (!res || (max < ZOOM_MIN || max > ZOOM_MAX)) { if (!res || !osm::zooms.contains(max)) {
reader.raiseError("Invalid maximal zoom level"); reader.raiseError("Invalid maximal zoom level");
return Range(); return Range();
} }
} else } else
max = ZOOM_MAX; max = osm::zooms.max();
if (min > max) { if (min > max) {
reader.raiseError("Invalid maximal/minimal zoom level combination"); reader.raiseError("Invalid maximal/minimal zoom level combination");
@ -70,39 +63,41 @@ RectC MapSource::bounds(QXmlStreamReader &reader)
if (attr.hasAttribute("top")) { if (attr.hasAttribute("top")) {
top = attr.value("top").toString().toDouble(&res); top = attr.value("top").toString().toDouble(&res);
if (!res || (top < BOUNDS_BOTTOM || top > BOUNDS_TOP)) { if (!res || (top < osm::bounds.bottom() || top > osm::bounds.top())) {
reader.raiseError("Invalid bounds top value"); reader.raiseError("Invalid bounds top value");
return RectC(); return RectC();
} }
} else } else
top = BOUNDS_TOP; top = osm::bounds.top();
if (attr.hasAttribute("bottom")) { if (attr.hasAttribute("bottom")) {
bottom = attr.value("bottom").toString().toDouble(&res); bottom = attr.value("bottom").toString().toDouble(&res);
if (!res || (bottom < BOUNDS_BOTTOM || bottom > BOUNDS_TOP)) { if (!res || (bottom < osm::bounds.bottom()
|| bottom > osm::bounds.top())) {
reader.raiseError("Invalid bounds bottom value"); reader.raiseError("Invalid bounds bottom value");
return RectC(); return RectC();
} }
} else } else
bottom = BOUNDS_BOTTOM; bottom = osm::bounds.bottom();
if (attr.hasAttribute("left")) { if (attr.hasAttribute("left")) {
left = attr.value("left").toString().toDouble(&res); left = attr.value("left").toString().toDouble(&res);
if (!res || (left < BOUNDS_LEFT || left > BOUNDS_RIGHT)) { if (!res || (left < osm::bounds.left() || left > osm::bounds.right())) {
reader.raiseError("Invalid bounds left value"); reader.raiseError("Invalid bounds left value");
return RectC(); return RectC();
} }
} else } else
left = BOUNDS_LEFT; left = osm::bounds.left();
if (attr.hasAttribute("right")) { if (attr.hasAttribute("right")) {
right = attr.value("right").toString().toDouble(&res); right = attr.value("right").toString().toDouble(&res);
if (!res || (right < BOUNDS_LEFT || right > BOUNDS_RIGHT)) { if (!res || (right < osm::bounds.left()
|| right > osm::bounds.right())) {
reader.raiseError("Invalid bounds right value"); reader.raiseError("Invalid bounds right value");
return RectC(); return RectC();
} }
} else } else
right = BOUNDS_RIGHT; right = osm::bounds.right();
if (bottom >= top) { if (bottom >= top) {
reader.raiseError("Invalid bottom/top bounds combination"); reader.raiseError("Invalid bottom/top bounds combination");

View File

@ -77,8 +77,8 @@ MBTilesMap::MBTilesMap(const QString &fileName, QObject *parent)
Coordinates tl(osm::m2ll(QPointF(minX, maxY))); Coordinates tl(osm::m2ll(QPointF(minX, maxY)));
Coordinates br(osm::m2ll(QPointF(maxX, minY))); Coordinates br(osm::m2ll(QPointF(maxX, minY)));
// Workaround of broken zoom levels 0 and 1 due to numerical instability // Workaround of broken zoom levels 0 and 1 due to numerical instability
tl.rlat() = qMin(tl.lat(), 85.0511); tl.rlat() = qMin(tl.lat(), osm::bounds.top());
br.rlat() = qMax(br.lat(), -85.0511); br.rlat() = qMax(br.lat(), osm::bounds.bottom());
_bounds = RectC(tl, br); _bounds = RectC(tl, br);
} }

View File

@ -3,9 +3,15 @@
#include <QPointF> #include <QPointF>
#include <common/coordinates.h> #include <common/coordinates.h>
#include <common/rectc.h>
#include <common/range.h>
namespace osm namespace osm
{ {
static const RectC bounds(Coordinates(-180, 85.0511),
Coordinates(180, -85.0511));
static const Range zooms(0, 19);
QPointF ll2m(const Coordinates &c); QPointF ll2m(const Coordinates &c);
Coordinates m2ll(const QPointF &p); Coordinates m2ll(const QPointF &p);
QPoint mercator2tile(const QPointF &m, int z); QPoint mercator2tile(const QPointF &m, int z);