QGIS API Documentation 3.41.0-Master (d2aaa9c6e02)
Loading...
Searching...
No Matches
qgscopcpointcloudindex.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscopcpointcloudindex.h
3 --------------------
4 begin : March 2022
5 copyright : (C) 2022 by Belgacem Nedjima
6 email : belgacem dot nedjima 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 QGSCOPCPOINTCLOUDINDEX_H
19#define QGSCOPCPOINTCLOUDINDEX_H
20
21#include <QString>
22#include <QHash>
23#include <QStringList>
24#include <QVector>
25#include <QList>
26#include <QFile>
27
28#include <fstream>
29#include <optional>
30
31#include "qgspointcloudindex.h"
33
34#include "qgslazinfo.h"
35#include "lazperf/vlr.hpp"
36
38#define SIP_NO_FILE
39
41
42class CORE_EXPORT QgsCopcPointCloudIndex: public QgsAbstractPointCloudIndex
43{
44 public:
45
46 explicit QgsCopcPointCloudIndex();
47 ~QgsCopcPointCloudIndex();
48
49 std::unique_ptr<QgsAbstractPointCloudIndex> clone() const override;
50
51 void load( const QString &fileName ) override;
52
53 bool hasNode( const QgsPointCloudNodeId &n ) const override;
54 QgsPointCloudNode getNode( const QgsPointCloudNodeId &id ) const override;
55
56 std::unique_ptr< QgsPointCloudBlock> nodeData( const QgsPointCloudNodeId &n, const QgsPointCloudRequest &request ) override;
58
59 QgsCoordinateReferenceSystem crs() const override;
60 qint64 pointCount() const override;
61 QVariantMap originalMetadata() const override { return mOriginalMetadata; }
62
63 bool isValid() const override;
64 Qgis::PointCloudAccessType accessType() const override { return mAccessType; };
65
71 bool writeStatistics( QgsPointCloudStatistics &stats ) override;
72
79
84 void copyCommonProperties( QgsCopcPointCloudIndex *destination ) const;
85
91 QVariantMap extraMetadata() const override;
92
93 protected:
94 bool loadSchema( QgsLazInfo &lazInfo );
95 bool loadHierarchy() const;
96
98 bool fetchNodeHierarchy( const QgsPointCloudNodeId &n ) const;
99
103 virtual void fetchHierarchyPage( uint64_t offset, uint64_t byteSize ) const;
104
105 void populateHierarchy( const char *hierarchyPageData, uint64_t byteSize ) const;
106
108 QByteArray readRange( uint64_t offset, uint64_t length ) const;
109
110 QByteArray fetchCopcStatisticsEvlrData() const;
111
112 void reset();
113
114 bool mIsValid = false;
116 mutable std::ifstream mCopcFile;
117 mutable lazperf::copc_info_vlr mCopcInfoVlr;
118 mutable QHash<QgsPointCloudNodeId, QPair<uint64_t, int32_t>> mHierarchyNodePos;
119
120 QVariantMap mOriginalMetadata;
121 mutable std::optional<QgsPointCloudStatistics> mStatistics;
122
123 std::unique_ptr<QgsLazInfo> mLazInfo = nullptr;
124
125 friend class QgsPointCloudLayerEditUtils;
126 friend class QgsPointCloudEditingIndex;
127};
128
130#endif // QGSCOPCPOINTCLOUDINDEX_H
PointCloudAccessType
The access type of the data, local is for local files and remote for remote files (over HTTP).
Definition qgis.h:5731
@ Local
Local means the source is a local file on the machine.
Represents a indexed point clouds data in octree.
virtual QVariantMap originalMetadata() const =0
Returns the original metadata map.
virtual qint64 pointCount() const =0
Returns the number of points in the point cloud.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate reference system of the point cloud index.
void copyCommonProperties(QgsAbstractPointCloudIndex *destination) const
Copies common properties to the destination index.
virtual bool writeStatistics(QgsPointCloudStatistics &stats)
Writes the statistics object stats into the backing file, if possible.
virtual bool hasNode(const QgsPointCloudNodeId &n) const
Returns whether the octree contain given node.
virtual QVariantMap extraMetadata() const
Returns extra metadata that's not accessible through the other methods in an implementation-specific ...
virtual void load(const QString &fileName)=0
Loads the index from the file.
virtual QgsPointCloudBlockRequest * asyncNodeData(const QgsPointCloudNodeId &n, const QgsPointCloudRequest &request)=0
Returns a handle responsible for loading a node data block.
virtual Qgis::PointCloudAccessType 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< QgsAbstractPointCloudIndex > clone() const =0
Returns a clone of the current point cloud index object.
virtual QgsPointCloudStatistics metadataStatistics() const
Returns the object containing the statistics metadata extracted from the dataset.
virtual std::unique_ptr< QgsPointCloudBlock > nodeData(const QgsPointCloudNodeId &n, const QgsPointCloudRequest &request)=0
Returns node data block.
virtual bool isValid() const =0
Returns whether index is loaded and valid.
virtual QgsPointCloudNode getNode(const QgsPointCloudNodeId &id) const
Returns object for a given node.
This class represents a coordinate reference system (CRS).
Class for extracting information contained in LAZ file such as the public header block and variable l...
Definition qgslazinfo.h:39
Base class for handling loading QgsPointCloudBlock asynchronously.
The QgsPointCloudEditingIndex class is a QgsPointCloudIndex that is used as an editing buffer when ed...
Contains utility functions for editing point cloud layers.
Represents a indexed point cloud node's position in octree.
Keeps metadata for indexed point cloud node.
Point cloud data request.
Class used to store statistics of a point cloud dataset.