mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 11:45:53 +01:00
Code cleanup
This commit is contained in:
parent
d8116c7f5d
commit
351fc0309a
@ -1,41 +1,18 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include "common/coordinates.h"
|
|
||||||
#include "common/rectc.h"
|
#include "common/rectc.h"
|
||||||
#include "common/wgs84.h"
|
#include "osm.h"
|
||||||
#include "emptymap.h"
|
#include "emptymap.h"
|
||||||
|
|
||||||
|
|
||||||
#define ZOOM_MIN 0
|
|
||||||
#define ZOOM_MAX 19
|
|
||||||
#define TILE_SIZE 256
|
#define TILE_SIZE 256
|
||||||
|
|
||||||
static QPointF ll2m(const Coordinates &c)
|
|
||||||
{
|
|
||||||
return QPointF(c.lon(), rad2deg(log(tan(M_PI_4 + deg2rad(c.lat())/2.0))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static Coordinates m2ll(const QPointF &p)
|
|
||||||
{
|
|
||||||
return Coordinates(p.x(), rad2deg(2.0 * atan(exp(deg2rad(p.y()))) - M_PI_2));
|
|
||||||
}
|
|
||||||
|
|
||||||
static qreal zoom2scale(int zoom)
|
|
||||||
{
|
|
||||||
return (360.0/(qreal)((1<<zoom) * TILE_SIZE));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int scale2zoom(qreal scale)
|
|
||||||
{
|
|
||||||
return (int)log2(360.0/(scale * (qreal)TILE_SIZE));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int limitZoom(int zoom)
|
static int limitZoom(int zoom)
|
||||||
{
|
{
|
||||||
if (zoom < ZOOM_MIN)
|
if (zoom < osm::zooms.min())
|
||||||
return ZOOM_MIN;
|
return osm::zooms.min();
|
||||||
if (zoom > ZOOM_MAX)
|
if (zoom > osm::zooms.max())
|
||||||
return ZOOM_MAX;
|
return osm::zooms.max();
|
||||||
|
|
||||||
return zoom;
|
return zoom;
|
||||||
}
|
}
|
||||||
@ -43,23 +20,23 @@ static int limitZoom(int zoom)
|
|||||||
|
|
||||||
EmptyMap::EmptyMap(QObject *parent) : Map(parent)
|
EmptyMap::EmptyMap(QObject *parent) : Map(parent)
|
||||||
{
|
{
|
||||||
_zoom = ZOOM_MAX;
|
_zoom = osm::zooms.max();
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF EmptyMap::bounds()
|
QRectF EmptyMap::bounds()
|
||||||
{
|
{
|
||||||
return QRectF(ll2xy(Coordinates(-180, 85)), ll2xy(Coordinates(180, -85)));
|
return QRectF(ll2xy(osm::bounds.topLeft()), ll2xy(osm::bounds.bottomRight()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int EmptyMap::zoomFit(const QSize &size, const RectC &rect)
|
int EmptyMap::zoomFit(const QSize &size, const RectC &rect)
|
||||||
{
|
{
|
||||||
if (!rect.isValid())
|
if (!rect.isValid())
|
||||||
_zoom = ZOOM_MAX;
|
_zoom = osm::zooms.max();
|
||||||
else {
|
else {
|
||||||
QRectF tbr(ll2m(rect.topLeft()), ll2m(rect.bottomRight()));
|
QRectF tbr(osm::ll2m(rect.topLeft()), osm::ll2m(rect.bottomRight()));
|
||||||
QPointF sc(tbr.width() / size.width(), tbr.height() / size.height());
|
QPointF sc(tbr.width() / size.width(), tbr.height() / size.height());
|
||||||
|
|
||||||
_zoom = limitZoom(scale2zoom(qMax(sc.x(), -sc.y())));
|
_zoom = limitZoom(osm::scale2zoom(qMax(sc.x(), -sc.y()), TILE_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
return _zoom;
|
return _zoom;
|
||||||
@ -67,21 +44,18 @@ int EmptyMap::zoomFit(const QSize &size, const RectC &rect)
|
|||||||
|
|
||||||
qreal EmptyMap::resolution(const QRectF &rect)
|
qreal EmptyMap::resolution(const QRectF &rect)
|
||||||
{
|
{
|
||||||
qreal scale = zoom2scale(_zoom);
|
return osm::resolution(rect.center(), _zoom, TILE_SIZE);
|
||||||
|
|
||||||
return (WGS84_RADIUS * 2.0 * M_PI * scale / 360.0
|
|
||||||
* cos(2.0 * atan(exp(deg2rad(-rect.center().y() * scale))) - M_PI/2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int EmptyMap::zoomIn()
|
int EmptyMap::zoomIn()
|
||||||
{
|
{
|
||||||
_zoom = qMin(_zoom + 1, ZOOM_MAX);
|
_zoom = qMin(_zoom + 1, osm::zooms.max());
|
||||||
return _zoom;
|
return _zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
int EmptyMap::zoomOut()
|
int EmptyMap::zoomOut()
|
||||||
{
|
{
|
||||||
_zoom = qMax(_zoom - 1, ZOOM_MIN);
|
_zoom = qMax(_zoom - 1, osm::zooms.min());
|
||||||
return _zoom;
|
return _zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,13 +68,13 @@ void EmptyMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
|||||||
|
|
||||||
QPointF EmptyMap::ll2xy(const Coordinates &c)
|
QPointF EmptyMap::ll2xy(const Coordinates &c)
|
||||||
{
|
{
|
||||||
qreal scale = zoom2scale(_zoom);
|
qreal scale = osm::zoom2scale(_zoom, TILE_SIZE);
|
||||||
QPointF m = ll2m(c);
|
QPointF m = osm::ll2m(c);
|
||||||
return QPointF(m.x() / scale, m.y() / -scale);
|
return QPointF(m.x() / scale, m.y() / -scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
Coordinates EmptyMap::xy2ll(const QPointF &p)
|
Coordinates EmptyMap::xy2ll(const QPointF &p)
|
||||||
{
|
{
|
||||||
qreal scale = zoom2scale(_zoom);
|
qreal scale = osm::zoom2scale(_zoom, TILE_SIZE);
|
||||||
return m2ll(QPointF(p.x() * scale, -p.y() * scale));
|
return osm::m2ll(QPointF(p.x() * scale, -p.y() * scale));
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QPixmapCache>
|
#include <QPixmapCache>
|
||||||
#include "common/rectc.h"
|
#include "common/rectc.h"
|
||||||
#include "common/wgs84.h"
|
|
||||||
#include "osm.h"
|
#include "osm.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "mbtilesmap.h"
|
#include "mbtilesmap.h"
|
||||||
@ -163,10 +162,7 @@ int MBTilesMap::zoomFit(const QSize &size, const RectC &rect)
|
|||||||
|
|
||||||
qreal MBTilesMap::resolution(const QRectF &rect)
|
qreal MBTilesMap::resolution(const QRectF &rect)
|
||||||
{
|
{
|
||||||
qreal scale = osm::zoom2scale(_zoom, _tileSize);
|
return osm::resolution(rect.center(), _zoom, _tileSize);
|
||||||
|
|
||||||
return (WGS84_RADIUS * 2.0 * M_PI * scale / 360.0
|
|
||||||
* cos(2.0 * atan(exp(deg2rad(-rect.center().y() * scale))) - M_PI/2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int MBTilesMap::zoomIn()
|
int MBTilesMap::zoomIn()
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include "common/coordinates.h"
|
|
||||||
#include "common/rectc.h"
|
#include "common/rectc.h"
|
||||||
#include "common/wgs84.h"
|
|
||||||
#include "downloader.h"
|
#include "downloader.h"
|
||||||
#include "osm.h"
|
#include "osm.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -15,22 +13,12 @@ OnlineMap::OnlineMap(const QString &name, const QString &url,
|
|||||||
const Authorization &authorization, bool invertY, QObject *parent)
|
const Authorization &authorization, bool invertY, QObject *parent)
|
||||||
: Map(parent), _name(name), _zooms(zooms), _bounds(bounds),
|
: Map(parent), _name(name), _zooms(zooms), _bounds(bounds),
|
||||||
_zoom(_zooms.max()), _deviceRatio(1.0), _tileRatio(tileRatio),
|
_zoom(_zooms.max()), _deviceRatio(1.0), _tileRatio(tileRatio),
|
||||||
_invertY(invertY), _valid(false)
|
_invertY(invertY)
|
||||||
{
|
{
|
||||||
QString dir(TILES_DIR + "/" + _name);
|
_tileLoader = new TileLoader(TILES_DIR + "/" + _name, this);
|
||||||
|
|
||||||
_tileLoader = new TileLoader(this);
|
|
||||||
_tileLoader->setUrl(url);
|
_tileLoader->setUrl(url);
|
||||||
_tileLoader->setDir(dir);
|
|
||||||
_tileLoader->setAuthorization(authorization);
|
_tileLoader->setAuthorization(authorization);
|
||||||
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
||||||
|
|
||||||
if (!QDir().mkpath(dir)) {
|
|
||||||
_errorString = "Error creating tiles dir";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_valid = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF OnlineMap::bounds()
|
QRectF OnlineMap::bounds()
|
||||||
@ -64,10 +52,7 @@ int OnlineMap::zoomFit(const QSize &size, const RectC &rect)
|
|||||||
|
|
||||||
qreal OnlineMap::resolution(const QRectF &rect)
|
qreal OnlineMap::resolution(const QRectF &rect)
|
||||||
{
|
{
|
||||||
qreal scale = osm::zoom2scale(_zoom, TILE_SIZE);
|
return osm::resolution(rect.center(), _zoom, TILE_SIZE);
|
||||||
|
|
||||||
return (WGS84_RADIUS * 2.0 * M_PI * scale / 360.0
|
|
||||||
* cos(2.0 * atan(exp(deg2rad(-rect.center().y() * scale))) - M_PI/2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int OnlineMap::zoomIn()
|
int OnlineMap::zoomIn()
|
||||||
|
@ -34,9 +34,6 @@ public:
|
|||||||
void setDevicePixelRatio(qreal ratio) {_deviceRatio = ratio;}
|
void setDevicePixelRatio(qreal ratio) {_deviceRatio = ratio;}
|
||||||
void clearCache() {_tileLoader->clearCache();}
|
void clearCache() {_tileLoader->clearCache();}
|
||||||
|
|
||||||
bool isValid() const {return _valid;}
|
|
||||||
QString errorString() const {return _errorString;}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int limitZoom(int zoom) const;
|
int limitZoom(int zoom) const;
|
||||||
qreal tileSize() const;
|
qreal tileSize() const;
|
||||||
@ -50,9 +47,6 @@ private:
|
|||||||
int _zoom;
|
int _zoom;
|
||||||
qreal _deviceRatio, _tileRatio;
|
qreal _deviceRatio, _tileRatio;
|
||||||
bool _invertY;
|
bool _invertY;
|
||||||
|
|
||||||
bool _valid;
|
|
||||||
QString _errorString;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ONLINEMAP_H
|
#endif // ONLINEMAP_H
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
#include "common/wgs84.h"
|
||||||
#include "osm.h"
|
#include "osm.h"
|
||||||
|
|
||||||
|
|
||||||
#define EPSILON 1e-6
|
#define EPSILON 1e-6
|
||||||
|
|
||||||
QPointF osm::ll2m(const Coordinates &c)
|
QPointF osm::ll2m(const Coordinates &c)
|
||||||
@ -12,10 +14,10 @@ Coordinates osm::m2ll(const QPointF &p)
|
|||||||
return Coordinates(p.x(), rad2deg(2.0 * atan(exp(deg2rad(p.y()))) - M_PI_2));
|
return Coordinates(p.x(), rad2deg(2.0 * atan(exp(deg2rad(p.y()))) - M_PI_2));
|
||||||
}
|
}
|
||||||
|
|
||||||
QPoint osm::mercator2tile(const QPointF &m, int z)
|
QPoint osm::mercator2tile(const QPointF &m, int zoom)
|
||||||
{
|
{
|
||||||
return QPoint((int)(floor((m.x() + 180.0) / 360.0 * (1<<z))),
|
return QPoint((int)(floor((m.x() + 180.0) / 360.0 * (1<<zoom))),
|
||||||
(int)(floor((1.0 - (m.y() / 180.0)) / 2.0 * (1<<z))));
|
(int)(floor((1.0 - (m.y() / 180.0)) / 2.0 * (1<<zoom))));
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal osm::zoom2scale(int zoom, int tileSize)
|
qreal osm::zoom2scale(int zoom, int tileSize)
|
||||||
@ -27,3 +29,11 @@ int osm::scale2zoom(qreal scale, int tileSize)
|
|||||||
{
|
{
|
||||||
return (int)(log2(360.0/(scale * (qreal)tileSize)) + EPSILON);
|
return (int)(log2(360.0/(scale * (qreal)tileSize)) + EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qreal osm::resolution(const QPointF &p, int zoom, int tileSize)
|
||||||
|
{
|
||||||
|
qreal scale = zoom2scale(zoom, tileSize);
|
||||||
|
|
||||||
|
return (WGS84_RADIUS * 2.0 * M_PI * scale / 360.0
|
||||||
|
* cos(2.0 * atan(exp(deg2rad(-p.y() * scale))) - M_PI/2));
|
||||||
|
}
|
||||||
|
@ -14,9 +14,10 @@ namespace osm
|
|||||||
|
|
||||||
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 zoom);
|
||||||
qreal zoom2scale(int zoom, int tileSize);
|
qreal zoom2scale(int zoom, int tileSize);
|
||||||
int scale2zoom(qreal scale, int tileSize);
|
int scale2zoom(qreal scale, int tileSize);
|
||||||
|
qreal resolution(const QPointF &p, int zoom, int tileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // OSM_H
|
#endif // OSM_H
|
||||||
|
@ -14,8 +14,12 @@ static bool loadTileFile(Tile &tile, const QString &file)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TileLoader::TileLoader(QObject *parent) : QObject(parent)
|
TileLoader::TileLoader(const QString &dir, QObject *parent)
|
||||||
|
: QObject(parent), _dir(dir)
|
||||||
{
|
{
|
||||||
|
if (!QDir().mkpath(_dir))
|
||||||
|
qWarning("%s: %s\n", qPrintable(_dir), "Error creating tiles directory");
|
||||||
|
|
||||||
_downloader = new Downloader(this);
|
_downloader = new Downloader(this);
|
||||||
connect(_downloader, SIGNAL(finished()), this, SIGNAL(finished()));
|
connect(_downloader, SIGNAL(finished()), this, SIGNAL(finished()));
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,9 @@ class TileLoader : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TileLoader(QObject *parent = 0);
|
TileLoader(const QString &dir, QObject *parent = 0);
|
||||||
|
|
||||||
void setUrl(const QString &url) {_url = url;}
|
void setUrl(const QString &url) {_url = url;}
|
||||||
void setDir(const QString &dir) {_dir = dir;}
|
|
||||||
void setAuthorization(const Authorization &authorization)
|
void setAuthorization(const Authorization &authorization)
|
||||||
{_authorization = authorization;}
|
{_authorization = authorization;}
|
||||||
|
|
||||||
|
@ -105,13 +105,7 @@ WMSMap::WMSMap(const QString &name, const WMS::Setup &setup, QObject *parent)
|
|||||||
: Map(parent), _name(name), _setup(setup), _tileLoader(0), _zoom(0),
|
: Map(parent), _name(name), _setup(setup), _tileLoader(0), _zoom(0),
|
||||||
_ratio(1.0), _valid(false)
|
_ratio(1.0), _valid(false)
|
||||||
{
|
{
|
||||||
if (!QDir().mkpath(tilesDir())) {
|
_tileLoader = new TileLoader(tilesDir(), this);
|
||||||
_errorString = "Error creating tiles dir";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_tileLoader = new TileLoader(this);
|
|
||||||
_tileLoader->setDir(tilesDir());
|
|
||||||
_tileLoader->setAuthorization(_setup.authorization());
|
_tileLoader->setAuthorization(_setup.authorization());
|
||||||
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
||||||
|
|
||||||
|
@ -39,13 +39,7 @@ WMTSMap::WMTSMap(const QString &name, const WMTS::Setup &setup, qreal tileRatio,
|
|||||||
QObject *parent) : Map(parent), _name(name), _setup(setup), _tileLoader(0),
|
QObject *parent) : Map(parent), _name(name), _setup(setup), _tileLoader(0),
|
||||||
_zoom(0), _deviceRatio(1.0), _tileRatio(tileRatio), _valid(false)
|
_zoom(0), _deviceRatio(1.0), _tileRatio(tileRatio), _valid(false)
|
||||||
{
|
{
|
||||||
if (!QDir().mkpath(tilesDir())) {
|
_tileLoader = new TileLoader(tilesDir(), this);
|
||||||
_errorString = "Error creating tiles dir";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_tileLoader = new TileLoader(this);
|
|
||||||
_tileLoader->setDir(tilesDir());
|
|
||||||
_tileLoader->setAuthorization(_setup.authorization());
|
_tileLoader->setAuthorization(_setup.authorization());
|
||||||
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
connect(_tileLoader, SIGNAL(finished()), this, SIGNAL(loaded()));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user