QGIS API Documentation 3.99.0-Master (18a1e75d814)
Loading...
Searching...
No Matches
qgscoordinatetransform_p.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscoordinatetransform_p.h
3 --------------------------
4 begin : July 2016
5 copyright : (C) 2016 Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17#ifndef QGSCOORDINATETRANSFORMPRIVATE_H
18#define QGSCOORDINATETRANSFORMPRIVATE_H
19
20#include "qgsconfig.h"
21
22#define SIP_NO_FILE
23
25
26//
27// W A R N I N G
28// -------------
29//
30// This file is not part of the QGIS API. It exists purely as an
31// implementation detail. This header file may change from version to
32// version without notice, or even be removed.
33//
34
35#include <QSharedData>
36
37struct PJconsts;
38typedef struct PJconsts PJ;
39typedef PJ *ProjData;
40
43
44class QgsCoordinateTransformPrivate : public QSharedData
45{
46
47 public:
48
49 explicit QgsCoordinateTransformPrivate();
50
51 QgsCoordinateTransformPrivate( const QgsCoordinateReferenceSystem &source,
52 const QgsCoordinateReferenceSystem &destination,
53 const QgsCoordinateTransformContext &context );
54
55 QgsCoordinateTransformPrivate( const QgsCoordinateReferenceSystem &source,
56 const QgsCoordinateReferenceSystem &destination,
57 int sourceDatumTransform,
58 int destDatumTransform );
59
60 QgsCoordinateTransformPrivate( const QgsCoordinateTransformPrivate &other );
61
62 ~QgsCoordinateTransformPrivate();
63
64 bool checkValidity();
65
66 void invalidate();
67
68 bool initialize();
69
70 void calculateTransforms( const QgsCoordinateTransformContext &context );
71
72 ProjData threadLocalProjData();
73
74 int mAvailableOpCount = -1;
75 ProjData threadLocalFallbackProjData();
76
77 // Only meant to be called by QgsCoordinateTransform::removeFromCacheObjectsBelongingToCurrentThread()
78 bool removeObjectsBelongingToCurrentThread( void *pj_context );
79
84 bool mIsValid = false;
85
90 bool mShortCircuit = false;
91
93 bool mGeographicToWebMercator = false;
94
96 bool mHasVerticalComponent = false;
97
100
103
104 Q_DECL_DEPRECATED QString mSourceProjString;
105 Q_DECL_DEPRECATED QString mDestProjString;
106
107 Q_DECL_DEPRECATED int mSourceDatumTransform = -1;
108 Q_DECL_DEPRECATED int mDestinationDatumTransform = -1;
109 QString mProjCoordinateOperation;
110 bool mShouldReverseCoordinateOperation = false;
111 bool mAllowFallbackTransforms = true;
112
113 bool mSourceIsDynamic = false;
114 bool mDestIsDynamic = false;
115 double mSourceCoordinateEpoch = std::numeric_limits< double >::quiet_NaN();
116 double mDestCoordinateEpoch = std::numeric_limits< double >::quiet_NaN();
117 double mDefaultTime = std::numeric_limits< double >::quiet_NaN();
118
120 bool mIsReversed = false;
121
122 QReadWriteLock mProjLock;
123 QMap < uintptr_t, ProjData > mProjProjections;
124 QMap < uintptr_t, ProjData > mProjFallbackProjections;
125
133 static void setCustomMissingRequiredGridHandler( const std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
134 const QgsCoordinateReferenceSystem &destinationCrs,
135 const QgsDatumTransform::GridDetails &grid )> &handler );
136
148 static void setCustomMissingPreferredGridHandler( const std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
149 const QgsCoordinateReferenceSystem &destinationCrs,
150 const QgsDatumTransform::TransformDetails &preferredOperation,
151 const QgsDatumTransform::TransformDetails &availableOperation )> &handler );
152
160 static void setCustomCoordinateOperationCreationErrorHandler( const std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
161 const QgsCoordinateReferenceSystem &destinationCrs,
162 const QString &error )> &handler );
163
171 static void setCustomMissingGridUsedByContextHandler( const std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
172 const QgsCoordinateReferenceSystem &destinationCrs,
173 const QgsDatumTransform::TransformDetails &desiredOperation )> &handler );
174
181 static void setDynamicCrsToDynamicCrsWarningHandler( const std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
182 const QgsCoordinateReferenceSystem &destinationCrs )> &handler );
183
184 private:
185
186 void freeProj();
187
188 static std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
189 const QgsCoordinateReferenceSystem &destinationCrs,
190 const QgsDatumTransform::GridDetails &grid )> sMissingRequiredGridHandler;
191
192 static std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
193 const QgsCoordinateReferenceSystem &destinationCrs,
194 const QgsDatumTransform::TransformDetails &preferredOperation,
195 const QgsDatumTransform::TransformDetails &availableOperation )> sMissingPreferredGridHandler;
196
197 static std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
198 const QgsCoordinateReferenceSystem &destinationCrs,
199 const QString &error )> sCoordinateOperationCreationErrorHandler;
200
201 static std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
202 const QgsCoordinateReferenceSystem &destinationCrs,
203 const QgsDatumTransform::TransformDetails &desiredOperation )> sMissingGridUsedByContextHandler;
204
205 static std::function< void( const QgsCoordinateReferenceSystem &sourceCrs,
206 const QgsCoordinateReferenceSystem &destinationCrs )> sDynamicCrsToDynamicCrsWarningHandler;
207
208 QgsCoordinateTransformPrivate &operator= ( const QgsCoordinateTransformPrivate & ) = delete;
209};
210
212
213#endif // QGSCOORDINATETRANSFORMPRIVATE_H
Represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
struct PJconsts PJ
Contains information about a projection transformation grid file.
Contains information about a coordinate transformation operation.