mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-28 13:41:16 +01:00
82 lines
1.5 KiB
C++
82 lines
1.5 KiB
C++
#include <QStringList>
|
|
#include "pcs.h"
|
|
#include "crs.h"
|
|
|
|
Projection CRS::projection(const QString &crs)
|
|
{
|
|
QStringList list(crs.split(':'));
|
|
QString authority, code;
|
|
bool res;
|
|
|
|
switch (list.size()) {
|
|
case 2:
|
|
authority = list.at(0);
|
|
code = list.at(1);
|
|
break;
|
|
case 6:
|
|
authority = list.at(4);
|
|
code = list.at(5);
|
|
break;
|
|
case 7:
|
|
authority = list.at(4);
|
|
code = list.at(6);
|
|
break;
|
|
case 8:
|
|
authority = list.at(4);
|
|
code = list.at(7);
|
|
break;
|
|
default:
|
|
return Projection();
|
|
}
|
|
|
|
if (!authority.compare("EPSG", Qt::CaseInsensitive)) {
|
|
int epsg = code.toInt(&res);
|
|
if (!res)
|
|
return Projection();
|
|
|
|
PCS pcs(PCS::pcs(epsg));
|
|
if (!pcs.isNull())
|
|
return Projection(pcs);
|
|
|
|
GCS gcs(GCS::gcs(epsg));
|
|
if (!gcs.isNull())
|
|
return Projection(gcs);
|
|
|
|
return Projection();
|
|
} else if (!authority.compare("OGC", Qt::CaseInsensitive)) {
|
|
if (code == "CRS84")
|
|
return Projection(GCS::gcs(4326), CoordinateSystem::XY);
|
|
else
|
|
return Projection();
|
|
} else
|
|
return Projection();
|
|
}
|
|
|
|
Projection CRS::projection(int id)
|
|
{
|
|
PCS pcs(PCS::pcs(id));
|
|
if (!pcs.isNull())
|
|
return Projection(pcs);
|
|
|
|
// Geographic 2D projections
|
|
GCS gcs(GCS::gcs(id));
|
|
if (!gcs.isNull())
|
|
return Projection(gcs);
|
|
|
|
return Projection();
|
|
}
|
|
|
|
Projection CRS::projection(int gcsId, int projId)
|
|
{
|
|
Conversion proj(Conversion::conversion(projId));
|
|
if (!proj.isNull())
|
|
return Projection(PCS(GCS::gcs(gcsId), proj));
|
|
|
|
// Geographic 2D projections
|
|
GCS gcs(GCS::gcs(projId));
|
|
if (!gcs.isNull())
|
|
return Projection(gcs);
|
|
|
|
return Projection();
|
|
}
|