#include #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(); }