QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
qgspointcloudindex.h
Go to the documentation of this file.
1/***************************************************************************
2 qgspointcloudindex.h
3 --------------------
4 begin : October 2020
5 copyright : (C) 2020 by Peter Petrik
6 email : zilolv 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 QGSPOINTCLOUDINDEX_H
19#define QGSPOINTCLOUDINDEX_H
20
21#include <QObject>
22#include <QString>
23#include <QHash>
24#include <QStringList>
25#include <QVector>
26#include <QList>
27#include <QMutex>
28
29#include "qgis_core.h"
30#include "qgsrectangle.h"
31#include "qgsvector3d.h"
32#include "qgis_sip.h"
33#include "qgspointcloudblock.h"
34#include "qgsrange.h"
37#include "qgspointcloudexpression.h"
38
39#define SIP_NO_FILE
40
47
57class CORE_EXPORT IndexedPointCloudNode
58{
59 public:
63 IndexedPointCloudNode( int _d, int _x, int _y, int _z );
64
66 bool isValid() const { return mD >= 0; }
67
68 // TODO c++20 - replace with = default
69
72 {
73 return mD == other.d() && mX == other.x() && mY == other.y() && mZ == other.z();
74 }
75
80 IndexedPointCloudNode parentNode() const;
81
83 static IndexedPointCloudNode fromString( const QString &str );
84
86 QString toString() const;
87
89 int d() const;
90
92 int x() const;
93
95 int y() const;
96
98 int z() const;
99
100 private:
101 int mD = -1, mX = -1, mY = -1, mZ = -1;
102};
103
105
107CORE_EXPORT uint qHash( IndexedPointCloudNode id );
108
118class CORE_EXPORT QgsPointCloudDataBounds
119{
120 public:
124 QgsPointCloudDataBounds( qint32 xmin, qint32 ymin, qint32 zmin, qint32 xmax, qint32 ymax, qint32 zmax );
125
127 qint32 xMin() const;
128
130 qint32 yMin() const;
131
133 qint32 zMin() const;
134
136 qint32 xMax() const;
137
139 qint32 yMax() const;
140
142 qint32 zMax() const;
143
145 QgsRectangle mapExtent( const QgsVector3D &offset, const QgsVector3D &scale ) const;
146
148 QgsDoubleRange zRange( const QgsVector3D &offset, const QgsVector3D &scale ) const;
149
150 private:
151 qint32 mXMin = 0;
152 qint32 mYMin = 0;
153 qint32 mZMin = 0;
154 qint32 mXMax = 0;
155 qint32 mYMax = 0;
156 qint32 mZMax = 0;
157};
158
168class CORE_EXPORT QgsPointCloudIndex: public QObject
169{
170 Q_OBJECT
171 public:
174 {
176 Remote
177 };
178
182
188 virtual std::unique_ptr<QgsPointCloudIndex> clone() const = 0;
189
191 virtual void load( const QString &fileName ) = 0;
192
194 virtual bool isValid() const = 0;
195
200 QString error() const { return mError; }
201
208 virtual AccessType accessType() const = 0;
209
213 virtual qint64 pointCount() const = 0;
215 virtual bool hasStatisticsMetadata() const = 0;
217 virtual QVariant metadataStatistic( const QString &attribute, QgsStatisticalSummary::Statistic statistic ) const;
219 virtual QVariantList metadataClasses( const QString &attribute ) const;
221 virtual QVariant metadataClassStatistic( const QString &attribute, const QVariant &value, QgsStatisticalSummary::Statistic statistic ) const;
223 virtual QVariantMap originalMetadata() const = 0;
224
229 virtual QgsPointCloudStatistics metadataStatistics() const;
230
233
235 virtual bool hasNode( const IndexedPointCloudNode &n ) const;
236
238 virtual qint64 nodePointCount( const IndexedPointCloudNode &n ) const;
239
241 virtual QList<IndexedPointCloudNode> nodeChildren( const IndexedPointCloudNode &n ) const;
242
244 QgsPointCloudAttributeCollection attributes() const;
245
254 virtual std::unique_ptr< QgsPointCloudBlock > nodeData( const IndexedPointCloudNode &n, const QgsPointCloudRequest &request ) = 0;
255
267
269 QgsRectangle extent() const { return mExtent; }
270
272 double zMin() const { return mZMin; }
274 double zMax() const { return mZMax; }
275
277 QgsPointCloudDataBounds nodeBounds( const IndexedPointCloudNode &node ) const;
278
284 QgsRectangle nodeMapExtent( const IndexedPointCloudNode &node ) const;
285
291 QgsDoubleRange nodeZRange( const IndexedPointCloudNode &node ) const;
292
294 float nodeError( const IndexedPointCloudNode &n ) const;
295
297 QgsVector3D scale() const;
298
300 QgsVector3D offset() const;
301
305 int span() const;
306
310 int nodePointCount( const IndexedPointCloudNode &n );
311
318 bool setSubsetString( const QString &subset );
319
326 QString subsetString() const;
327
332 void copyCommonProperties( QgsPointCloudIndex *destination ) const;
333
334 protected: //TODO private
336 void setAttributes( const QgsPointCloudAttributeCollection &attributes );
337
339 double mZMin = 0, mZMax = 0;
340
341 mutable QMutex mHierarchyMutex;
342 mutable QHash<IndexedPointCloudNode, int> mHierarchy;
347 int mSpan = 0;
348 QgsPointCloudExpression mFilterExpression;
349
350 QString mError;
351};
352
353#endif // QGSPOINTCLOUDINDEX_H
Represents a indexed point cloud node in octree.
int y() const
Returns y.
bool isValid() const
Returns whether node is valid.
int x() const
Returns x.
int d() const
Returns d.
bool operator==(IndexedPointCloudNode other) const
Compares nodes.
int z() const
Returns z.
This class represents a coordinate reference system (CRS).
QgsRange which stores a range of double values.
Definition qgsrange.h:203
Collection of point cloud attributes.
Base class for handling loading QgsPointCloudBlock asynchronously.
Represents packaged data bounds.
qint32 xMax() const
Returns x max.
QgsPointCloudDataBounds(qint32 xmin, qint32 ymin, qint32 zmin, qint32 xmax, qint32 ymax, qint32 zmax)
Constructs bounds.
qint32 xMin() const
Returns x min.
qint32 yMax() const
Returns y max.
QgsDoubleRange zRange(const QgsVector3D &offset, const QgsVector3D &scale) const
Returns the z range, applying the specified offset and scale.
QgsPointCloudDataBounds()
Constructs invalid bounds.
qint32 zMax() const
Returns z max.
QgsRectangle mapExtent(const QgsVector3D &offset, const QgsVector3D &scale) const
Returns 2D rectangle in map coordinates.
qint32 yMin() const
Returns y min.
qint32 zMin() const
Returns z min.
Represents a indexed point clouds data in octree.
double zMax() const
Returns z max.
virtual QgsPointCloudBlockRequest * asyncNodeData(const IndexedPointCloudNode &n, const QgsPointCloudRequest &request)=0
Returns a handle responsible for loading a node data block.
QgsPointCloudIndex()
Constructs index.
QString error() const
Returns the error that occurred during the loading of the index.
double zMin() const
Returns z min.
AccessType
The access type of the data, local is for local files and remote for remote files (over HTTP)
@ Local
Local means the source is a local file on the machine.
virtual qint64 pointCount() const =0
Returns the number of points in the point cloud.
virtual AccessType accessType() const =0
Returns the access type of the data If the access type is Remote, data will be fetched from an HTTP s...
virtual std::unique_ptr< QgsPointCloudIndex > clone() const =0
Returns a clone of the current point cloud index object.
QHash< IndexedPointCloudNode, int > mHierarchy
Data hierarchy.
virtual bool isValid() const =0
Returns whether index is loaded and valid.
QgsRectangle extent() const
Returns extent of the data.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate reference system of the point cloud index.
QgsPointCloudDataBounds mRootBounds
Bounds of the root node's cube (in int32 coordinates)
QgsRectangle mExtent
2D extent of data
QgsPointCloudAttributeCollection mAttributes
QgsVector3D mOffset
Offset of our int32 coordinates compared to CRS coords.
virtual void load(const QString &fileName)=0
Loads the index from the file.
IndexedPointCloudNode root()
Returns root node of the index.
virtual bool hasStatisticsMetadata() const =0
Returns whether the dataset contains metadata of statistics.
virtual std::unique_ptr< QgsPointCloudBlock > nodeData(const IndexedPointCloudNode &n, const QgsPointCloudRequest &request)=0
Returns node data block.
QgsVector3D mScale
Scale of our int32 coordinates compared to CRS coords.
virtual QVariantMap originalMetadata() const =0
Returns the original metadata map.
QgsPointCloudExpression mFilterExpression
The filter expression to be evaluated when fetching node data.
Point cloud data request.
Class used to store statistics of a point cloud dataset.
A rectangle specified with double values.
Statistic
Enumeration of flags that specify statistics to be calculated.
Class for storage of 3D vectors similar to QVector3D, with the difference that it uses double precisi...
Definition qgsvector3d.h:32
#define str(x)
Definition qgis.cpp:38
Q_DECLARE_TYPEINFO(IndexedPointCloudNode, Q_PRIMITIVE_TYPE)
CORE_EXPORT uint qHash(IndexedPointCloudNode id)
Hash function for indexed nodes.