LCOV - code coverage report
Current view: top level - core/providers/ept - qgseptprovider.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 14 97 14.4 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgseptdataprovider.cpp
       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                 :            : #include "qgis.h"
      19                 :            : #include "qgseptprovider.h"
      20                 :            : #include "qgseptpointcloudindex.h"
      21                 :            : #include "qgseptdataitems.h"
      22                 :            : #include "qgsruntimeprofiler.h"
      23                 :            : #include "qgsapplication.h"
      24                 :            : 
      25                 :            : #include <QFileInfo>
      26                 :            : 
      27                 :            : ///@cond PRIVATE
      28                 :            : 
      29                 :            : #define PROVIDER_KEY QStringLiteral( "ept" )
      30                 :            : #define PROVIDER_DESCRIPTION QStringLiteral( "EPT point cloud data provider" )
      31                 :            : 
      32                 :          0 : QgsEptProvider::QgsEptProvider(
      33                 :            :   const QString &uri,
      34                 :            :   const QgsDataProvider::ProviderOptions &options,
      35                 :            :   QgsDataProvider::ReadFlags flags )
      36                 :          0 :   : QgsPointCloudDataProvider( uri, options, flags )
      37                 :          0 :   , mIndex( new QgsEptPointCloudIndex )
      38                 :          0 : {
      39                 :          0 :   std::unique_ptr< QgsScopedRuntimeProfile > profile;
      40                 :          0 :   if ( QgsApplication::profiler()->groupIsActive( QStringLiteral( "projectload" ) ) )
      41                 :          0 :     profile = std::make_unique< QgsScopedRuntimeProfile >( tr( "Open data source" ), QStringLiteral( "projectload" ) );
      42                 :            : 
      43                 :          0 :   loadIndex( );
      44                 :          0 : }
      45                 :            : 
      46                 :          0 : QgsEptProvider::~QgsEptProvider() = default;
      47                 :            : 
      48                 :          0 : QgsCoordinateReferenceSystem QgsEptProvider::crs() const
      49                 :            : {
      50                 :          0 :   return mIndex->crs();
      51                 :            : }
      52                 :            : 
      53                 :          0 : QgsRectangle QgsEptProvider::extent() const
      54                 :            : {
      55                 :          0 :   return mIndex->extent();
      56                 :            : }
      57                 :            : 
      58                 :          0 : QgsPointCloudAttributeCollection QgsEptProvider::attributes() const
      59                 :            : {
      60                 :          0 :   return mIndex->attributes();
      61                 :            : }
      62                 :            : 
      63                 :          0 : bool QgsEptProvider::isValid() const
      64                 :            : {
      65                 :          0 :   return mIndex->isValid();
      66                 :            : }
      67                 :            : 
      68                 :          0 : QString QgsEptProvider::name() const
      69                 :            : {
      70                 :          0 :   return QStringLiteral( "ept" );
      71                 :            : }
      72                 :            : 
      73                 :          0 : QString QgsEptProvider::description() const
      74                 :            : {
      75                 :          0 :   return QStringLiteral( "Point Clouds EPT" );
      76                 :            : }
      77                 :            : 
      78                 :          0 : QgsPointCloudIndex *QgsEptProvider::index() const
      79                 :            : {
      80                 :          0 :   return mIndex.get();
      81                 :            : }
      82                 :            : 
      83                 :          0 : int QgsEptProvider::pointCount() const
      84                 :            : {
      85                 :          0 :   return mIndex->pointCount();
      86                 :            : }
      87                 :            : 
      88                 :          0 : QVariantList QgsEptProvider::metadataClasses( const QString &attribute ) const
      89                 :            : {
      90                 :          0 :   return mIndex->metadataClasses( attribute );
      91                 :            : }
      92                 :            : 
      93                 :          0 : QVariant QgsEptProvider::metadataClassStatistic( const QString &attribute, const QVariant &value, QgsStatisticalSummary::Statistic statistic ) const
      94                 :            : {
      95                 :          0 :   return mIndex->metadataClassStatistic( attribute, value, statistic );
      96                 :            : }
      97                 :            : 
      98                 :          0 : void QgsEptProvider::loadIndex( )
      99                 :            : {
     100                 :          0 :   if ( mIndex->isValid() )
     101                 :          0 :     return;
     102                 :            : 
     103                 :          0 :   mIndex->load( dataSourceUri() );
     104                 :          0 : }
     105                 :            : 
     106                 :          0 : QVariantMap QgsEptProvider::originalMetadata() const
     107                 :            : {
     108                 :          0 :   return mIndex->originalMetadata();
     109                 :            : }
     110                 :            : 
     111                 :          0 : void QgsEptProvider::generateIndex()
     112                 :            : {
     113                 :            :   //no-op, index is always generated
     114                 :          0 : }
     115                 :            : 
     116                 :          0 : QVariant QgsEptProvider::metadataStatistic( const QString &attribute, QgsStatisticalSummary::Statistic statistic ) const
     117                 :            : {
     118                 :          0 :   return mIndex->metadataStatistic( attribute, statistic );
     119                 :            : }
     120                 :            : 
     121                 :          3 : QgsEptProviderMetadata::QgsEptProviderMetadata():
     122                 :          9 :   QgsProviderMetadata( PROVIDER_KEY, PROVIDER_DESCRIPTION )
     123                 :          3 : {
     124                 :          3 : }
     125                 :            : 
     126                 :          0 : QgsEptProvider *QgsEptProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
     127                 :            : {
     128                 :          0 :   return new QgsEptProvider( uri, options, flags );
     129                 :          0 : }
     130                 :            : 
     131                 :          3 : QList<QgsDataItemProvider *> QgsEptProviderMetadata::dataItemProviders() const
     132                 :            : {
     133                 :          3 :   QList< QgsDataItemProvider * > providers;
     134                 :          3 :   providers << new QgsEptDataItemProvider;
     135                 :          3 :   return providers;
     136                 :          3 : }
     137                 :            : 
     138                 :          0 : int QgsEptProviderMetadata::priorityForUri( const QString &uri ) const
     139                 :            : {
     140                 :          0 :   const QVariantMap parts = decodeUri( uri );
     141                 :          0 :   QFileInfo fi( parts.value( QStringLiteral( "path" ) ).toString() );
     142                 :          0 :   if ( fi.fileName().compare( QLatin1String( "ept.json" ), Qt::CaseInsensitive ) == 0 )
     143                 :          0 :     return 100;
     144                 :            : 
     145                 :          0 :   return 0;
     146                 :          0 : }
     147                 :            : 
     148                 :          0 : QList<QgsMapLayerType> QgsEptProviderMetadata::validLayerTypesForUri( const QString &uri ) const
     149                 :            : {
     150                 :          0 :   const QVariantMap parts = decodeUri( uri );
     151                 :          0 :   QFileInfo fi( parts.value( QStringLiteral( "path" ) ).toString() );
     152                 :          0 :   if ( fi.fileName().compare( QLatin1String( "ept.json" ), Qt::CaseInsensitive ) == 0 )
     153                 :          0 :     return QList< QgsMapLayerType>() << QgsMapLayerType::PointCloudLayer;
     154                 :            : 
     155                 :          0 :   return QList< QgsMapLayerType>();
     156                 :          0 : }
     157                 :            : 
     158                 :          0 : bool QgsEptProviderMetadata::uriIsBlocklisted( const QString &uri ) const
     159                 :            : {
     160                 :          0 :   const QVariantMap parts = decodeUri( uri );
     161                 :          0 :   if ( !parts.contains( QStringLiteral( "path" ) ) )
     162                 :          0 :     return false;
     163                 :            : 
     164                 :          0 :   QFileInfo fi( parts.value( QStringLiteral( "path" ) ).toString() );
     165                 :            : 
     166                 :            :   // internal details only
     167                 :          0 :   if ( fi.fileName().compare( QLatin1String( "ept-build.json" ), Qt::CaseInsensitive ) == 0 )
     168                 :          0 :     return true;
     169                 :            : 
     170                 :          0 :   return false;
     171                 :          0 : }
     172                 :            : 
     173                 :          0 : QVariantMap QgsEptProviderMetadata::decodeUri( const QString &uri ) const
     174                 :            : {
     175                 :          0 :   const QString path = uri;
     176                 :          0 :   QVariantMap uriComponents;
     177                 :          0 :   uriComponents.insert( QStringLiteral( "path" ), path );
     178                 :          0 :   return uriComponents;
     179                 :          0 : }
     180                 :            : 
     181                 :         18 : QString QgsEptProviderMetadata::filters( QgsProviderMetadata::FilterType type )
     182                 :            : {
     183                 :         18 :   switch ( type )
     184                 :            :   {
     185                 :            :     case QgsProviderMetadata::FilterType::FilterVector:
     186                 :            :     case QgsProviderMetadata::FilterType::FilterRaster:
     187                 :            :     case QgsProviderMetadata::FilterType::FilterMesh:
     188                 :            :     case QgsProviderMetadata::FilterType::FilterMeshDataset:
     189                 :         12 :       return QString();
     190                 :            : 
     191                 :            :     case QgsProviderMetadata::FilterType::FilterPointCloud:
     192                 :         12 :       return QObject::tr( "Entwine Point Clouds" ) + QStringLiteral( " (ept.json EPT.JSON)" );
     193                 :            :   }
     194                 :          0 :   return QString();
     195                 :         18 : }
     196                 :            : 
     197                 :          0 : QgsProviderMetadata::ProviderCapabilities QgsEptProviderMetadata::providerCapabilities() const
     198                 :            : {
     199                 :          0 :   return FileBasedUris;
     200                 :            : }
     201                 :            : 
     202                 :          0 : QString QgsEptProviderMetadata::encodeUri( const QVariantMap &parts ) const
     203                 :            : {
     204                 :          0 :   const QString path = parts.value( QStringLiteral( "path" ) ).toString();
     205                 :          0 :   return path;
     206                 :          0 : }
     207                 :            : 
     208                 :          0 : QgsProviderMetadata::ProviderMetadataCapabilities QgsEptProviderMetadata::capabilities() const
     209                 :            : {
     210                 :          0 :   return ProviderMetadataCapability::LayerTypesForUri
     211                 :          0 :          | ProviderMetadataCapability::PriorityForUri;
     212                 :            : }
     213                 :            : ///@endcond
     214                 :            : 

Generated by: LCOV version 1.14