1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-02-26 04:00:49 +01:00
GPXSee/src/map/pcs.cpp

92 lines
2.0 KiB
C++
Raw Normal View History

2018-01-09 09:35:56 +01:00
#include <QFile>
#include "angularunits.h"
2018-01-08 23:47:45 +01:00
#include "pcs.h"
QMap<int, PCS::Entry> PCS::_pcss = defaults();
2018-01-08 23:47:45 +01:00
QMap<int, PCS::Entry> PCS::defaults()
{
QMap<int, Entry> map;
map.insert(3857, Entry("WGS 84 / Pseudo-Mercator", 4326, 3856));
return map;
}
2018-01-08 23:47:45 +01:00
PCS PCS::pcs(int id)
2018-01-08 23:47:45 +01:00
{
QMap<int, Entry>::const_iterator it = _pcss.find(id);
if (it == _pcss.constEnd())
return PCS();
else {
const Entry &e = it.value();
return PCS(GCS::gcs(e.gcs()), Conversion::conversion(e.proj()));
}
2018-01-09 23:19:35 +01:00
}
void PCS::loadList(const QString &path)
2018-01-08 23:47:45 +01:00
{
QFile file(path);
bool res;
int ln = 0;
2018-01-08 23:47:45 +01:00
if (!file.open(QFile::ReadOnly)) {
qWarning("Error opening PCS file: %s: %s", qPrintable(path),
qPrintable(file.errorString()));
return;
2018-01-08 23:47:45 +01:00
}
while (!file.atEnd()) {
ln++;
QByteArray line = file.readLine(4096);
2018-01-08 23:47:45 +01:00
QList<QByteArray> list = line.split(',');
if (list.size() != 4) {
qWarning("%s:%d: Format error", qPrintable(path), ln);
continue;
2018-01-08 23:47:45 +01:00
}
QString name(list.at(0).trimmed());
int id = list.at(1).trimmed().toInt(&res);
if (!res) {
qWarning("%s:%d: Invalid PCS code", qPrintable(path), ln);
continue;
2018-01-08 23:47:45 +01:00
}
int gcs = list.at(2).trimmed().toInt(&res);
if (!res) {
qWarning("%s:%d: Invalid GCS code", qPrintable(path), ln);
continue;
2018-01-08 23:47:45 +01:00
}
int proj = list.at(3).trimmed().toInt(&res);
if (!res) {
qWarning("%s:%d: Invalid projection code", qPrintable(path), ln);
continue;
}
if (GCS::gcs(gcs).isNull()) {
qWarning("%s:%d: Unknown GCS code", qPrintable(path), ln);
continue;
2018-01-08 23:47:45 +01:00
}
_pcss.insert(id, Entry(name, gcs, proj));
2018-01-08 23:47:45 +01:00
}
}
QList<KV<int, QString> > PCS::list()
{
QList<KV<int, QString> > list;
for (QMap<int, Entry>::const_iterator it = _pcss.constBegin();
it != _pcss.constEnd(); ++it)
list.append(KV<int, QString>(it.key(), it.value().name()));
return list;
}
#ifndef QT_NO_DEBUG
2018-01-08 23:47:45 +01:00
QDebug operator<<(QDebug dbg, const PCS &pcs)
{
dbg.nospace() << "PCS(" << pcs.gcs() << ", " << pcs.conversion() << ")";
2018-01-21 11:17:32 +01:00
return dbg.space();
2018-01-08 23:47:45 +01:00
}
#endif // QT_NO_DEBUG