mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-06-27 19:49:15 +02:00
Added support for Geographic 2D projections (coordinate systems) in vector maps
This commit is contained in:
@ -229,6 +229,18 @@ Coordinates GCS::fromWGS84(const Coordinates &c) const
|
||||
return Coordinates(_primeMeridian.fromGreenwich(ds.lon()), ds.lat());
|
||||
}
|
||||
|
||||
QList<KV<int, QString> > GCS::list()
|
||||
{
|
||||
QList<KV<int, QString> > list;
|
||||
|
||||
for (int i = 0; i < _gcss.size(); i++)
|
||||
if (_gcss.at(i).id())
|
||||
list.append(KV<int, QString>(_gcss.at(i).id(), _gcss.at(i).name()
|
||||
+ " / Geographic 2D"));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG
|
||||
QDebug operator<<(QDebug dbg, const GCS &gcs)
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef GCS_H
|
||||
#define GCS_H
|
||||
|
||||
#include "common/kv.h"
|
||||
#include "datum.h"
|
||||
#include "angularunits.h"
|
||||
#include "primemeridian.h"
|
||||
@ -32,6 +33,7 @@ public:
|
||||
static const GCS &WGS84();
|
||||
|
||||
static void loadList(const QString &path);
|
||||
static QList<KV<int, QString> > list();
|
||||
|
||||
private:
|
||||
class Entry;
|
||||
|
@ -73,12 +73,12 @@ private:
|
||||
};
|
||||
|
||||
|
||||
static Range zooms(12, 28);
|
||||
static const Range zooms(12, 28);
|
||||
|
||||
static QColor shieldColor(Qt::white);
|
||||
static QColor shieldBgColor1("#dd3e3e");
|
||||
static QColor shieldBgColor2("#379947");
|
||||
static QColor shieldBgColor3("#4a7fc1");
|
||||
static const QColor shieldColor(Qt::white);
|
||||
static const QColor shieldBgColor1("#dd3e3e");
|
||||
static const QColor shieldBgColor2("#379947");
|
||||
static const QColor shieldBgColor3("#4a7fc1");
|
||||
|
||||
static QString convertUnits(const QString &str)
|
||||
{
|
||||
@ -259,7 +259,8 @@ void IMGMap::setZoom(int zoom)
|
||||
|
||||
Transform IMGMap::transform(int zoom) const
|
||||
{
|
||||
double scale = (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom);
|
||||
double scale = _projection.isGeographic()
|
||||
? 360.0 / (1<<zoom) : (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom);
|
||||
PointD topLeft(_projection.ll2xy(_img.bounds().topLeft()));
|
||||
return Transform(ReferencePoint(PointD(0, 0), topLeft),
|
||||
PointD(scale, scale));
|
||||
|
@ -196,8 +196,8 @@ void MapSource::map(QXmlStreamReader &reader, Config &config)
|
||||
if (!attr.hasAttribute("id"))
|
||||
reader.raiseError("Missing dimension id");
|
||||
else
|
||||
config.dimensions.append(KV(attr.value("id").toString(),
|
||||
reader.readElementText()));
|
||||
config.dimensions.append(KV<QString, QString>
|
||||
(attr.value("id").toString(), reader.readElementText()));
|
||||
} else if (reader.name() == "crs") {
|
||||
config.coordinateSystem = coordinateSystem(reader);
|
||||
config.crs = reader.readElementText();
|
||||
|
@ -38,7 +38,7 @@ private:
|
||||
QString crs;
|
||||
CoordinateSystem coordinateSystem;
|
||||
bool rest;
|
||||
QList<KV> dimensions;
|
||||
QList<KV<QString, QString> > dimensions;
|
||||
Authorization authorization;
|
||||
qreal tileRatio;
|
||||
int tileSize;
|
||||
|
@ -223,12 +223,12 @@ void PCS::loadList(const QString &path)
|
||||
}
|
||||
}
|
||||
|
||||
QList<PCS::Info> PCS::pcsList()
|
||||
QList<KV<int, QString> > PCS::list()
|
||||
{
|
||||
QList<Info> list;
|
||||
QList<KV<int, QString> > list;
|
||||
|
||||
for (int i = 0; i < _pcss.size(); i++)
|
||||
list.append(Info(_pcss.at(i).id(), _pcss.at(i).name()));
|
||||
list.append(KV<int, QString>(_pcss.at(i).id(), _pcss.at(i).name()));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <QDebug>
|
||||
#include <QList>
|
||||
#include "common/kv.h"
|
||||
#include "gcs.h"
|
||||
#include "linearunits.h"
|
||||
#include "coordinatesystem.h"
|
||||
@ -11,20 +12,6 @@
|
||||
class PCS
|
||||
{
|
||||
public:
|
||||
class Info {
|
||||
public:
|
||||
Info(int id, const QString &name) : _id(id), _name(name) {}
|
||||
|
||||
int id() const {return _id;}
|
||||
const QString &name() const {return _name;}
|
||||
|
||||
bool operator<(const Info &other) const {return _id < other._id;}
|
||||
|
||||
private:
|
||||
int _id;
|
||||
QString _name;
|
||||
};
|
||||
|
||||
PCS() : _gcs(0) {}
|
||||
PCS(const GCS *gcs, const Projection::Method &method,
|
||||
const Projection::Setup &setup, const LinearUnits &units,
|
||||
@ -48,7 +35,7 @@ public:
|
||||
static void loadList(const QString &path);
|
||||
static const PCS *pcs(int id);
|
||||
static const PCS *pcs(const GCS *gcs, int proj);
|
||||
static QList<Info> pcsList();
|
||||
static QList<KV<int, QString> > list();
|
||||
|
||||
private:
|
||||
class Entry;
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
public:
|
||||
Setup(const QString &url, const QString &layer, const QString &style,
|
||||
const QString &format, const QString &crs, const CoordinateSystem &cs,
|
||||
const QList<KV> &dimensions,
|
||||
const QList<KV<QString, QString> > &dimensions,
|
||||
const Authorization &authorization = Authorization())
|
||||
: _url(url), _layer(layer), _style(style), _format(format),
|
||||
_crs(crs), _cs(cs), _dimensions(dimensions),
|
||||
@ -33,7 +33,8 @@ public:
|
||||
const QString &format() const {return _format;}
|
||||
const QString &crs() const {return _crs;}
|
||||
const CoordinateSystem &coordinateSystem() const {return _cs;}
|
||||
const QList<KV> &dimensions() const {return _dimensions;}
|
||||
const QList<KV<QString, QString> > &dimensions() const
|
||||
{return _dimensions;}
|
||||
|
||||
private:
|
||||
QString _url;
|
||||
@ -42,7 +43,7 @@ public:
|
||||
QString _format;
|
||||
QString _crs;
|
||||
CoordinateSystem _cs;
|
||||
QList<KV> _dimensions;
|
||||
QList<KV<QString, QString> > _dimensions;
|
||||
Authorization _authorization;
|
||||
};
|
||||
|
||||
|
@ -34,7 +34,7 @@ QString WMSMap::tileUrl(const QString &version) const
|
||||
url.append(QString("&SRS=%1").arg(_setup.crs()));
|
||||
|
||||
for (int i = 0; i < _setup.dimensions().size(); i++) {
|
||||
const KV &dim = _setup.dimensions().at(i);
|
||||
const KV<QString, QString> &dim = _setup.dimensions().at(i);
|
||||
url.append(QString("&%1=%2").arg(dim.key(), dim.value()));
|
||||
}
|
||||
|
||||
|
@ -335,7 +335,7 @@ WMTS::WMTS(const QString &file, const WMTS::Setup &setup) : _valid(false)
|
||||
setup.url().contains('?') ? "&" : "?" , setup.format(),
|
||||
setup.layer(), style, setup.set());
|
||||
for (int i = 0; i < setup.dimensions().size(); i++) {
|
||||
const KV &dim = setup.dimensions().at(i);
|
||||
const KV<QString, QString> &dim = setup.dimensions().at(i);
|
||||
_tileUrl.append(QString("&%1=%2").arg(dim.key(), dim.value()));
|
||||
}
|
||||
} else {
|
||||
@ -345,7 +345,7 @@ WMTS::WMTS(const QString &file, const WMTS::Setup &setup) : _valid(false)
|
||||
_tileUrl.replace("{TileRow}", "$y", Qt::CaseInsensitive);
|
||||
_tileUrl.replace("{TileCol}", "$x", Qt::CaseInsensitive);
|
||||
for (int i = 0; i < setup.dimensions().size(); i++) {
|
||||
const KV &dim = setup.dimensions().at(i);
|
||||
const KV<QString, QString> &dim = setup.dimensions().at(i);
|
||||
_tileUrl.replace(QString("{%1}").arg(dim.key()), dim.value(),
|
||||
Qt::CaseInsensitive);
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ public:
|
||||
public:
|
||||
Setup(const QString &url, const QString &layer, const QString &set,
|
||||
const QString &style, const QString &format, bool rest,
|
||||
const CoordinateSystem &cs, const QList<KV> &dimensions,
|
||||
const CoordinateSystem &cs,
|
||||
const QList<KV<QString, QString> > &dimensions,
|
||||
const Authorization &authorization = Authorization())
|
||||
: _url(url), _layer(layer), _set(set), _style(style),
|
||||
_format(format), _rest(rest), _cs(cs), _dimensions(dimensions),
|
||||
@ -36,7 +37,8 @@ public:
|
||||
const QString &format() const {return _format;}
|
||||
bool rest() const {return _rest;}
|
||||
const CoordinateSystem &coordinateSystem() const {return _cs;}
|
||||
const QList<KV> &dimensions() const {return _dimensions;}
|
||||
const QList<KV<QString, QString> > &dimensions() const
|
||||
{return _dimensions;}
|
||||
|
||||
private:
|
||||
QString _url;
|
||||
@ -46,7 +48,7 @@ public:
|
||||
QString _format;
|
||||
bool _rest;
|
||||
CoordinateSystem _cs;
|
||||
QList<KV> _dimensions;
|
||||
QList<KV<QString, QString> > _dimensions;
|
||||
Authorization _authorization;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user