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

Generated by: LCOV version 1.14