SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
crsmanager.h
Go to the documentation of this file.
1
10#ifndef CRSMANAGER_H
11#define CRSMANAGER_H
12
13#include <QList>
14#include <QMap>
15#include <QObject>
16#include <QPair>
17#include <QString>
18
20
25struct CRSInfo
26{
27 QString authName;
28 int code = -1;
29 QString name;
30 QString type;
31 QString areaName;
32 bool deprecated = false;
33};
34
50class CRSManager : public QObject
51{
52 Q_OBJECT
53
54 Q_PROPERTY(int totalCRSCount READ totalCRSCount CONSTANT)
55 Q_PROPERTY(QStringList authorities READ availableAuthorities CONSTANT)
56
57public:
58
62 static CRSManager &instance();
63
64 // ----- Database queries ------------------------------------------------
65
73 [[nodiscard]] QList<CRSInfo> queryDatabase(const QString &keyword = {},
74 const QString &authority = {},
75 bool includeDeprecated = false) const;
76
80 [[nodiscard]] int totalCRSCount() const;
81
85 [[nodiscard]] QStringList availableAuthorities() const;
86
87 // ----- Factory ---------------------------------------------------------
88
97 [[nodiscard]] SpatialReferenceSystem *createFromAuthCode(const QString &authName,
98 int code,
99 QObject *parent = nullptr) const;
100
107 [[nodiscard]] SpatialReferenceSystem *createFromWktOrProj(const QString &wktOrProj,
108 QObject *parent = nullptr) const;
109
113 [[nodiscard]] bool areSameCRS(const SpatialReferenceSystem &a,
114 const SpatialReferenceSystem &b) const;
115
116 // ----- Commonly used CRSes ---------------------------------------------
117
123 [[nodiscard]] SpatialReferenceSystem *wgs84() const;
124
128 [[nodiscard]] SpatialReferenceSystem *webMercator() const;
129
130 // ----- Recent / favourites --------------------------------------------
131
135 [[nodiscard]] QList<QPair<QString, int>> recentCRSes() const;
136
140 void addRecentCRS(const QString &authName, int code);
141
145 void clearRecentCRSes();
146
150 void loadSettings();
151
155 void saveSettings() const;
156
157signals:
162
163private:
164 explicit CRSManager(QObject *parent = nullptr);
165 ~CRSManager() override;
166
167 // Non-copyable singleton
168 CRSManager(const CRSManager &) = delete;
169 CRSManager &operator=(const CRSManager &) = delete;
170
171 void initBuiltins();
172
173 SpatialReferenceSystem *m_wgs84 = nullptr;
174 SpatialReferenceSystem *m_webMercator = nullptr;
175 QList<QPair<QString, int>> m_recentCRSes;
176 static constexpr int MaxRecentCRSes = 20;
177};
178
179#endif // CRSMANAGER_H
Singleton that queries the GDAL CRS database and manages CRS objects.
Definition crsmanager.h:51
QStringList availableAuthorities() const
Returns the list of authority names found in the GDAL database.
Definition crsmanager.cpp:172
QStringList authorities
Definition crsmanager.h:55
SpatialReferenceSystem * createFromWktOrProj(const QString &wktOrProj, QObject *parent=nullptr) const
Creates a CRS from a WKT2 or PROJ string.
Definition crsmanager.cpp:202
static CRSManager & instance()
Returns the application-wide singleton instance.
Definition crsmanager.cpp:79
int totalCRSCount
Definition crsmanager.h:54
QList< QPair< QString, int > > recentCRSes() const
Returns authority:code pairs the user has recently used.
Definition crsmanager.cpp:225
void addRecentCRS(const QString &authName, int code)
Records an authority+code pair as recently used.
Definition crsmanager.cpp:227
void loadSettings()
Loads recent CRS list from persistent settings.
Definition crsmanager.cpp:243
void saveSettings() const
Saves recent CRS list to persistent settings.
Definition crsmanager.cpp:260
SpatialReferenceSystem * webMercator() const
Returns the Web Mercator projected CRS (EPSG:3857).
Definition crsmanager.cpp:219
SpatialReferenceSystem * wgs84() const
Returns the WGS 84 geographic CRS (EPSG:4326).
Definition crsmanager.cpp:218
void clearRecentCRSes()
Clears the recent-CRS list.
Definition crsmanager.cpp:237
bool areSameCRS(const SpatialReferenceSystem &a, const SpatialReferenceSystem &b) const
Returns true when a and b represent the same CRS.
Definition crsmanager.cpp:208
SpatialReferenceSystem * createFromAuthCode(const QString &authName, int code, QObject *parent=nullptr) const
Creates a CRS from an authority + code pair.
Definition crsmanager.cpp:195
void recentCRSesChanged()
Emitted when the recent-CRS list changes.
QList< CRSInfo > queryDatabase(const QString &keyword={}, const QString &authority={}, bool includeDeprecated=false) const
Returns a flat list of all (or matching) CRS records from the GDAL database.
Definition crsmanager.cpp:110
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
int code
Definition heatconfigdialog.cpp:40
int b
local residual indices, a < b
Definition meshquadmatch.cpp:46
int a
Definition meshquadmatch.cpp:46
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Lightweight record describing one entry in the GDAL CRS database.
Definition crsmanager.h:26
int code
Definition crsmanager.h:28
QString name
Definition crsmanager.h:29
QString type
Definition crsmanager.h:30
QString areaName
Definition crsmanager.h:31
QString authName
Definition crsmanager.h:27
bool deprecated
Definition crsmanager.h:32