28 #include <QtConcurrent/QtConcurrentMap> 
   33   QgsDataProvider::ReadFlags flags )
 
   48   return lIndex && lIndex->
isValid();
 
   68   static QMap< int, QString > sCodes
 
   70     {0, QStringLiteral( 
"Created, Never Classified" )},
 
   71     {1, QStringLiteral( 
"Unclassified" )},
 
   72     {2, QStringLiteral( 
"Ground" )},
 
   73     {3, QStringLiteral( 
"Low Vegetation" )},
 
   74     {4, QStringLiteral( 
"Medium Vegetation" )},
 
   75     {5, QStringLiteral( 
"High Vegetation" )},
 
   76     {6, QStringLiteral( 
"Building" )},
 
   77     {7, QStringLiteral( 
"Low Point (Low Noise)" )},
 
   78     {8, QStringLiteral( 
"Reserved" )},
 
   79     {9, QStringLiteral( 
"Water" )},
 
   80     {10, QStringLiteral( 
"Rail" )},
 
   81     {11, QStringLiteral( 
"Road Surface" )},
 
   82     {12, QStringLiteral( 
"Reserved" )},
 
   83     {13, QStringLiteral( 
"Wire - Guard (Shield)" )},
 
   84     {14, QStringLiteral( 
"Wire - Conductor (Phase)" )},
 
   85     {15, QStringLiteral( 
"Transmission Tower" )},
 
   86     {16, QStringLiteral( 
"Wire-Structure Connector (Insulator)" )},
 
   87     {17, QStringLiteral( 
"Bridge Deck" )},
 
   88     {18, QStringLiteral( 
"High Noise" )},
 
   91   static std::once_flag initialized;
 
   92   std::call_once( initialized, [ = ]( )
 
   94     for ( 
int i = 19; i <= 63; ++i )
 
   95       sCodes.insert( i, QStringLiteral( 
"Reserved" ) );
 
   96     for ( 
int i = 64; i <= 255; ++i )
 
   97       sCodes.insert( i, QStringLiteral( 
"User Definable" ) );
 
  105   static QMap< int, QString > sCodes
 
  107     {0, QObject::tr( 
"Created, Never Classified" )},
 
  108     {1, QObject::tr( 
"Unclassified" )},
 
  109     {2, QObject::tr( 
"Ground" )},
 
  110     {3, QObject::tr( 
"Low Vegetation" )},
 
  111     {4, QObject::tr( 
"Medium Vegetation" )},
 
  112     {5, QObject::tr( 
"High Vegetation" )},
 
  113     {6, QObject::tr( 
"Building" )},
 
  114     {7, QObject::tr( 
"Low Point (Noise)" )},
 
  115     {8, QObject::tr( 
"Reserved" )},
 
  116     {9, QObject::tr( 
"Water" )},
 
  117     {10, QObject::tr( 
"Rail" )},
 
  118     {11, QObject::tr( 
"Road Surface" )},
 
  119     {12, QObject::tr( 
"Reserved" )},
 
  120     {13, QObject::tr( 
"Wire - Guard (Shield)" )},
 
  121     {14, QObject::tr( 
"Wire - Conductor (Phase)" )},
 
  122     {15, QObject::tr( 
"Transmission Tower" )},
 
  123     {16, QObject::tr( 
"Wire-Structure Connector (Insulator)" )},
 
  124     {17, QObject::tr( 
"Bridge Deck" )},
 
  125     {18, QObject::tr( 
"High Noise" )},
 
  128   static std::once_flag initialized;
 
  129   std::call_once( initialized, [ = ]( )
 
  131     for ( 
int i = 19; i <= 63; ++i )
 
  132       sCodes.insert( i, QObject::tr( 
"Reserved" ) );
 
  133     for ( 
int i = 64; i <= 255; ++i )
 
  134       sCodes.insert( i, QObject::tr( 
"User Definable" ) );
 
  142   static QMap< int, QString > sCodes
 
  144     {0, QStringLiteral( 
"No color or time stored" )},
 
  145     {1, QStringLiteral( 
"Time is stored" )},
 
  146     {2, QStringLiteral( 
"Color is stored" )},
 
  147     {3, QStringLiteral( 
"Color and time are stored" )},
 
  148     {6, QStringLiteral( 
"Time is stored" )},
 
  149     {7, QStringLiteral( 
"Time and color are stored)" )},
 
  150     {8, QStringLiteral( 
"Time, color and near infrared are stored" )},
 
  158   static QMap< int, QString > sCodes
 
  160     {0, QObject::tr( 
"No color or time stored" )},
 
  161     {1, QObject::tr( 
"Time is stored" )},
 
  162     {2, QObject::tr( 
"Color is stored" )},
 
  163     {3, QObject::tr( 
"Color and time are stored" )},
 
  164     {6, QObject::tr( 
"Time is stored" )},
 
  165     {7, QObject::tr( 
"Time and color are stored)" )},
 
  166     {8, QObject::tr( 
"Time, color and near infrared are stored" )},
 
  179   return QVariantList();
 
  198     QVector<QVariantMap> acceptedPoints;
 
  202       return acceptedPoints;
 
  204     const char *ptr = block->data();
 
  207     int xOffset = 0, yOffset = 0, zOffset = 0;
 
  212     extentEngine->prepareGeometry();
 
  216       QgsPointCloudAttribute::getPointXYZ( ptr, i, recordSize, xOffset, xType, yOffset, yType, zOffset, zType, block->scale(), block->offset(), x, y, z );
 
  222         pointAttr[ QStringLiteral( 
"X" ) ] = x;
 
  223         pointAttr[ QStringLiteral( 
"Y" ) ] = y;
 
  224         pointAttr[ QStringLiteral( 
"Z" ) ] = z;
 
  226         acceptedPoints.push_back( pointAttr );
 
  229     return acceptedPoints;
 
  247   QVector<QVariantMap> acceptedPoints;
 
  255   QVector<IndexedPointCloudNode> nodes = traverseTree( 
index, root, maxError, rootError, extentGeometry, extentZRange );
 
  261   acceptedPoints = QtConcurrent::blockingMappedReduced( nodes,
 
  263                    qOverload<
const QVector<QMap<QString, QVariant>>&>( &QVector<QMap<QString, QVariant>>::append ),
 
  264                    QtConcurrent::UnorderedReduce );
 
  266   return acceptedPoints;
 
  269 QVector<IndexedPointCloudNode> QgsPointCloudDataProvider::traverseTree(
 
  277   QVector<IndexedPointCloudNode> nodes;
 
  280   if ( !extentZRange.
overlaps( nodeZRange ) )
 
  288   double childrenError = nodeError / 2.0;
 
  289   if ( childrenError < maxError )
 
  292   const QList<IndexedPointCloudNode> children = pc->
nodeChildren( n );
 
  296       nodes += traverseTree( pc, nn, maxError, childrenError, extentGeometry, extentZRange );
 
Represents a indexed point cloud node in octree.
Abstract base class for spatial data provider implementations.
virtual QgsRectangle extent() const =0
Returns the extent of the layer.
QgsRange which stores a range of double values.
A geometry is the spatial representation of a feature.
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
static QgsGeometry fromRect(const QgsRectangle &rect) SIP_HOLDGIL
Creates a new geometry from a QgsRectangle.
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine representing the specified geometry.
bool intersects(const QgsRectangle &rectangle) const
Returns true if this geometry exactly intersects with a rectangle.
Collection of point cloud attributes.
int pointRecordSize() const
Returns total size of record.
const QgsPointCloudAttribute * find(const QString &attributeName, int &offset) const
Finds the attribute with the name.
QVector< QgsPointCloudAttribute > attributes() const
Returns all attributes.
DataType
Systems of unit measurement.
static void getPointXYZ(const char *ptr, int i, std::size_t pointRecordSize, int xOffset, QgsPointCloudAttribute::DataType xType, int yOffset, QgsPointCloudAttribute::DataType yType, int zOffset, QgsPointCloudAttribute::DataType zType, const QgsVector3D &indexScale, const QgsVector3D &indexOffset, double &x, double &y, double &z)
Retrieves the x, y, z values for the point at index i.
static QVariantMap getAttributeMap(const char *data, std::size_t recordOffset, const QgsPointCloudAttributeCollection &attributeCollection)
Retrieves all the attributes of a point.
DataType type() const
Returns the data type.
@ NoCapabilities
Provider has no capabilities.
~QgsPointCloudDataProvider() override
static QMap< int, QString > dataFormatIds()
Returns the map of LAS data format ID to untranslated string value.
virtual QVariant metadataClassStatistic(const QString &attribute, const QVariant &value, QgsStatisticalSummary::Statistic statistic) const
Returns a statistic for one class value from the specified attribute, taken only from the metadata of...
QVector< QVariantMap > identify(double maxError, const QgsGeometry &extentGeometry, const QgsDoubleRange &extentZRange=QgsDoubleRange(), int pointsLimit=1000)
Returns the list of points of the point cloud according to a zoom level defined by maxError (in layer...
QgsPointCloudDataProvider(const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions, QgsDataProvider::ReadFlags flags=QgsDataProvider::ReadFlags())
Ctor.
virtual QgsPointCloudIndex * index() const
Returns the point cloud index associated with the provider.
virtual QVariant metadataStatistic(const QString &attribute, QgsStatisticalSummary::Statistic statistic) const
Returns a statistic for the specified attribute, taken only from the metadata of the point cloud data...
static QMap< int, QString > translatedDataFormatIds()
Returns the map of LAS data format ID to translated string value.
virtual QgsPointCloudDataProvider::Capabilities capabilities() const
Returns flags containing the supported capabilities for the data provider.
static QMap< int, QString > translatedLasClassificationCodes()
Returns the map of LAS classification code to translated string value, corresponding to the ASPRS Sta...
static QMap< int, QString > lasClassificationCodes()
Returns the map of LAS classification code to untranslated string value, corresponding to the ASPRS S...
virtual QgsPointCloudRenderer * createRenderer(const QVariantMap &configuration=QVariantMap()) const
Creates a new 2D point cloud renderer, using provider backend specific information.
bool hasValidIndex() const
Returns whether provider has index which is valid.
virtual QVariantMap originalMetadata() const
Returns a representation of the original metadata included in a point cloud dataset.
virtual QgsGeometry polygonBounds() const
Returns the polygon bounds of the layer.
virtual QVariantList metadataClasses(const QString &attribute) const
Returns a list of existing classes which are present for the specified attribute, taken only from the...
Represents a indexed point clouds data in octree.
int span() const
Returns the number of points in one direction in a single node.
QgsRectangle nodeMapExtent(const IndexedPointCloudNode &node) const
Returns the extent of a node in map coordinates.
virtual QList< IndexedPointCloudNode > nodeChildren(const IndexedPointCloudNode &n) const
Returns all children of node.
QgsVector3D offset() const
Returns offset.
QgsVector3D scale() const
Returns scale.
virtual QgsPointCloudBlock * nodeData(const IndexedPointCloudNode &n, const QgsPointCloudRequest &request)=0
Returns node data block.
virtual bool isValid() const =0
Returns whether index is loaded and valid.
IndexedPointCloudNode root()
Returns root node of the index.
QgsDoubleRange nodeZRange(const IndexedPointCloudNode &node) const
Returns the z range of a node.
QgsPointCloudAttributeCollection attributes() const
Returns all attributes that are stored in the file.
Abstract base class for 2d point cloud renderers.
Point cloud data request.
void setAttributes(const QgsPointCloudAttributeCollection &attributes)
Set attributes filter in the request.
Point geometry type, with support for z-dimension and m-values.
bool overlaps(const QgsRange< T > &other) const
Returns true if this range overlaps another range.
bool contains(const QgsRange< T > &other) const
Returns true if this range contains another range.
A rectangle specified with double values.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
Statistic
Enumeration of flags that specify statistics to be calculated.
QVector< QMap< QString, QVariant > > result_type
MapIndexedPointCloudNode(QgsPointCloudRequest &request, const QgsVector3D &indexScale, const QgsVector3D &indexOffset, const QgsGeometry &extentGeometry, const QgsDoubleRange &zRange, QgsPointCloudIndex *index, int pointsLimit)
const QgsGeometry & mExtentGeometry
QgsPointCloudIndex * mIndex
const QgsDoubleRange & mZRange
QVector< QVariantMap > operator()(IndexedPointCloudNode n)
QgsPointCloudRequest & mRequest
Setting options for creating vector data providers.