1 /*************************************************************************** 2 qgscoordinatetransformcontext_p.h 3 ------------------------------- 4 begin : November 2017 5 copyright : (C) 2017 by 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 18 #ifndef QGSCOORDINATETRANSFORMCONTEXT_PRIVATE_H 19 #define QGSCOORDINATETRANSFORMCONTEXT_PRIVATE_H 20 21 /// @cond PRIVATE 22 23 // 24 // W A R N I N G 25 // ------------- 26 // 27 // This file is not part of the QGIS API. It exists purely as an 28 // implementation detail. This header file may change from version to 29 // version without notice, or even be removed. 30 // 31 32 /*************************************************************************** 33 * This class is considered CRITICAL and any change MUST be accompanied with 34 * full unit tests in testqgsfeature.cpp. 35 * See details in QEP #17 36 ****************************************************************************/ 37 38 #define SIP_NO_FILE 39 40 #include "qgscoordinatereferencesystem.h" 41 #include "qgsdatumtransform.h" 42 43 class QgsCoordinateTransformContextPrivate : public QSharedData 44 { 45 46 public: 47 48 QgsCoordinateTransformContextPrivate() = default; 49 QgsCoordinateTransformContextPrivate(const QgsCoordinateTransformContextPrivate & other)50 QgsCoordinateTransformContextPrivate( const QgsCoordinateTransformContextPrivate &other ) 51 : QSharedData( other ) 52 { 53 other.mLock.lockForRead(); 54 mSourceDestDatumTransforms = other.mSourceDestDatumTransforms; 55 other.mLock.unlock(); 56 } 57 58 /** 59 * Mapping for coordinate operation Proj string to use for source/destination CRS pairs. 60 */ 61 class OperationDetails 62 { 63 public: 64 QString operation; 65 bool allowFallback = true; 66 67 // TODO c++20 - replace with = default 68 bool operator==( const OperationDetails &other ) const 69 { 70 return operation == other.operation && allowFallback == other.allowFallback; 71 } 72 }; 73 QMap< QPair< QgsCoordinateReferenceSystem, QgsCoordinateReferenceSystem >, OperationDetails > mSourceDestDatumTransforms; 74 75 //! Mutex for making QgsCoordinateTransformContextPrivate thread safe 76 mutable QReadWriteLock mLock{}; 77 78 private: 79 QgsCoordinateTransformContextPrivate &operator= ( const QgsCoordinateTransformContextPrivate & ) = delete; 80 }; 81 82 83 /// @endcond 84 85 86 #endif // QGSCOORDINATETRANSFORMCONTEXT_PRIVATE_H 87 88 89 90 91