Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsreferencedgeometry.h 3 : : ---------------------- 4 : : begin : June 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 QGSREFERENCEDGEOMETRY_H 19 : : #define QGSREFERENCEDGEOMETRY_H 20 : : 21 : : #include "qgis_sip.h" 22 : : #include "qgis_core.h" 23 : : #include "qgscoordinatereferencesystem.h" 24 : : #include "qgsrectangle.h" 25 : : #include "qgsgeometry.h" 26 : : 27 : : /** 28 : : * \class QgsReferencedGeometryBase 29 : : * \ingroup core 30 : : * \brief A base class for geometry primitives which are stored with an associated reference system. 31 : : * 32 : : * QgsReferencedGeometryBase classes represent some form of geometry primitive 33 : : * (such as rectangles) which have an optional coordinate reference system 34 : : * associated with them. 35 : : * 36 : : * \see QgsReferencedRectangle 37 : : * \since QGIS 3.0 38 : : */ 39 : 43 : class CORE_EXPORT QgsReferencedGeometryBase 40 : : { 41 : : public: 42 : : 43 : : /** 44 : : * Constructor for QgsReferencedGeometryBase, with the specified \a crs. 45 : : */ 46 : : QgsReferencedGeometryBase( const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ); 47 : : 48 : : /** 49 : : * Returns the associated coordinate reference system, or an invalid CRS if 50 : : * no reference system is set. 51 : : * \see setCrs() 52 : : */ 53 : 3 : QgsCoordinateReferenceSystem crs() const { return mCrs; } 54 : : 55 : : /** 56 : : * Sets the associated \a crs. Set to an invalid CRS if 57 : : * no reference system is required. 58 : : * \see crs() 59 : : */ 60 : 1 : void setCrs( const QgsCoordinateReferenceSystem &crs ) { mCrs = crs; } 61 : : 62 : : private: 63 : : 64 : : QgsCoordinateReferenceSystem mCrs; 65 : : 66 : : }; 67 : : 68 : : /** 69 : : * \ingroup core 70 : : * \brief A QgsRectangle with associated coordinate reference system. 71 : : * \since QGIS 3.0 72 : : */ 73 : 38 : class CORE_EXPORT QgsReferencedRectangle : public QgsRectangle, public QgsReferencedGeometryBase 74 : : { 75 : : public: 76 : : 77 : : /** 78 : : * Constructor for QgsReferencedRectangle, with the specified initial \a rectangle 79 : : * and \a crs. 80 : : */ 81 : : QgsReferencedRectangle( const QgsRectangle &rectangle, const QgsCoordinateReferenceSystem &crs ); 82 : : 83 : : /** 84 : : * Constructor for QgsReferencedRectangle. 85 : : */ 86 : 26 : QgsReferencedRectangle() = default; 87 : : 88 : : //! Allows direct construction of QVariants from rectangle. 89 : 0 : operator QVariant() const 90 : : { 91 : 0 : return QVariant::fromValue( *this ); 92 : : } 93 : : 94 : : bool operator==( const QgsReferencedRectangle &other ) const; 95 : : bool operator!=( const QgsReferencedRectangle &other ) const; 96 : : 97 : : #ifdef SIP_RUN 98 : : SIP_PYOBJECT __repr__(); 99 : : % MethodCode 100 : : QString str = QStringLiteral( "<QgsReferencedRectangle: %1 (%2)>" ).arg( sipCpp->asWktCoordinates(), sipCpp->crs().authid() ); 101 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 102 : : % End 103 : : #endif 104 : : 105 : : }; 106 : : 107 : 5 : Q_DECLARE_METATYPE( QgsReferencedRectangle ) 108 : : 109 : : /** 110 : : * \ingroup core 111 : : * \brief A QgsPointXY with associated coordinate reference system. 112 : : * \since QGIS 3.0 113 : : */ 114 : 0 : class CORE_EXPORT QgsReferencedPointXY : public QgsPointXY, public QgsReferencedGeometryBase 115 : : { 116 : : public: 117 : : 118 : : /** 119 : : * Constructor for QgsReferencedPointXY, with the specified initial \a point 120 : : * and \a crs. 121 : : */ 122 : : QgsReferencedPointXY( const QgsPointXY &point, const QgsCoordinateReferenceSystem &crs ); 123 : : 124 : : /** 125 : : * Constructor for QgsReferencedPointXY. 126 : : */ 127 : 0 : QgsReferencedPointXY() = default; 128 : : 129 : : //! Allows direct construction of QVariants from point. 130 : : operator QVariant() const 131 : : { 132 : : return QVariant::fromValue( *this ); 133 : : } 134 : : 135 : : bool operator==( const QgsReferencedPointXY &other ); 136 : : bool operator!=( const QgsReferencedPointXY &other ); 137 : : 138 : : #ifdef SIP_RUN 139 : : SIP_PYOBJECT __repr__(); 140 : : % MethodCode 141 : : QString str = QStringLiteral( "<QgsReferencedPointXY: %1 (%2)>" ).arg( sipCpp->asWkt(), sipCpp->crs().authid() ); 142 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 143 : : % End 144 : : #endif 145 : : 146 : : }; 147 : : 148 : 5 : Q_DECLARE_METATYPE( QgsReferencedPointXY ) 149 : : 150 : : /** 151 : : * \ingroup core 152 : : * \brief A QgsGeometry with associated coordinate reference system. 153 : : * \since QGIS 3.16 154 : : */ 155 : 5 : class CORE_EXPORT QgsReferencedGeometry : public QgsGeometry, public QgsReferencedGeometryBase 156 : : { 157 : : public: 158 : : 159 : : /** 160 : : * Constructor for QgsReferencedGeometry, with the specified initial \a geometry 161 : : * and \a crs. 162 : : */ 163 : : QgsReferencedGeometry( const QgsGeometry &geometry, const QgsCoordinateReferenceSystem &crs ); 164 : : 165 : : /** 166 : : * Constructor for QgsReferencedGeometry. 167 : : */ 168 : 0 : QgsReferencedGeometry() = default; 169 : : 170 : : //! Allows direct construction of QVariants from geometry. 171 : : operator QVariant() const 172 : : { 173 : : return QVariant::fromValue( *this ); 174 : : } 175 : : 176 : : /** 177 : : * Construct a new QgsReferencedGeometry from referenced \a point 178 : : */ 179 : : static QgsReferencedGeometry fromReferencedPointXY( const QgsReferencedPointXY &point ); 180 : : 181 : : /** 182 : : * Construct a new QgsReferencedGeometry from referenced \a rectangle 183 : : */ 184 : : static QgsReferencedGeometry fromReferencedRect( const QgsReferencedRectangle &rectangle ); 185 : : 186 : : 187 : : #ifdef SIP_RUN 188 : : SIP_PYOBJECT __repr__(); 189 : : % MethodCode 190 : : QString str = QStringLiteral( "<QgsReferencedGeometry: %1 (%2)>" ).arg( sipCpp->asWkt(), sipCpp->crs().authid() ); 191 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 192 : : % End 193 : : #endif 194 : : 195 : : }; 196 : : 197 : 9 : Q_DECLARE_METATYPE( QgsReferencedGeometry ) 198 : : 199 : : #endif // QGSREFERENCEDGEOMETRY_H