18#ifndef QGSCOPCPOINTCLOUDINDEX_H
19#define QGSCOPCPOINTCLOUDINDEX_H
35#include "lazperf/vlr.hpp"
46 explicit QgsCopcPointCloudIndex();
47 ~QgsCopcPointCloudIndex();
49 std::unique_ptr<QgsAbstractPointCloudIndex>
clone()
const override;
51 void load(
const QString &fileName )
override;
95 bool loadHierarchy()
const;
103 virtual void fetchHierarchyPage( uint64_t offset, uint64_t byteSize )
const;
105 void populateHierarchy(
const char *hierarchyPageData, uint64_t byteSize )
const;
108 QByteArray readRange( uint64_t offset, uint64_t length )
const;
110 QByteArray fetchCopcStatisticsEvlrData()
const;
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;
120 QVariantMap mOriginalMetadata;
121 mutable std::optional<QgsPointCloudStatistics> mStatistics;
123 std::unique_ptr<QgsLazInfo> mLazInfo =
nullptr;
PointCloudAccessType
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.
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...
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.