LCOV - code coverage report
Current view: top level - analysis/processing - qgsalgorithmwritevectortiles.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 102 0.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :   qgsalgorithmwritevectortiles.h
       3                 :            :   ---------------------
       4                 :            :   Date                 : April 2020
       5                 :            :   Copyright            : (C) 2020 by Martin Dobias
       6                 :            :   Email                : wonder dot sk at gmail dot com
       7                 :            :  ***************************************************************************
       8                 :            :  *                                                                         *
       9                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      10                 :            :  *   it under the terms of the GNU General Public License as published by  *
      11                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      12                 :            :  *   (at your option) any later version.                                   *
      13                 :            :  *                                                                         *
      14                 :            :  ***************************************************************************/
      15                 :            : 
      16                 :            : #include "qgsalgorithmwritevectortiles.h"
      17                 :            : 
      18                 :            : #include "qgsprocessingparametervectortilewriterlayers.h"
      19                 :            : #include "qgsvectorlayer.h"
      20                 :            : #include "qgsvectortilewriter.h"
      21                 :            : #include <QUrl>
      22                 :            : 
      23                 :            : ///@cond PRIVATE
      24                 :            : 
      25                 :            : 
      26                 :          0 : QString QgsWriteVectorTilesBaseAlgorithm::group() const
      27                 :            : {
      28                 :          0 :   return QObject::tr( "Vector tiles" );
      29                 :            : }
      30                 :            : 
      31                 :          0 : QString QgsWriteVectorTilesBaseAlgorithm::groupId() const
      32                 :            : {
      33                 :          0 :   return QStringLiteral( "vectortiles" );
      34                 :            : }
      35                 :            : 
      36                 :          0 : QString QgsWriteVectorTilesBaseAlgorithm::shortHelpString() const
      37                 :            : {
      38                 :          0 :   return QObject::tr( "This algorithm exports one or more vector layers to vector tiles - a data format optimized for fast map rendering and small data size." );
      39                 :            : }
      40                 :            : 
      41                 :          0 : void QgsWriteVectorTilesBaseAlgorithm::addBaseParameters()
      42                 :            : {
      43                 :          0 :   addParameter( new QgsProcessingParameterVectorTileWriterLayers( QStringLiteral( "LAYERS" ), QObject::tr( "Input layers" ) ) );
      44                 :            : 
      45                 :          0 :   addParameter( new QgsProcessingParameterNumber( QStringLiteral( "MIN_ZOOM" ), QObject::tr( "Minimum zoom level" ), QgsProcessingParameterNumber::Integer, 0, false, 0, 24 ) );
      46                 :          0 :   addParameter( new QgsProcessingParameterNumber( QStringLiteral( "MAX_ZOOM" ), QObject::tr( "Maximum zoom level" ), QgsProcessingParameterNumber::Integer, 3, false, 0, 24 ) );
      47                 :            : 
      48                 :            :   // optional extent
      49                 :          0 :   addParameter( new QgsProcessingParameterExtent( QStringLiteral( "EXTENT" ), QObject::tr( "Extent" ), QVariant(), true ) );
      50                 :          0 : }
      51                 :            : 
      52                 :          0 : QVariantMap QgsWriteVectorTilesBaseAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
      53                 :            : {
      54                 :          0 :   int minZoom = parameterAsInt( parameters, QStringLiteral( "MIN_ZOOM" ), context );
      55                 :          0 :   int maxZoom = parameterAsInt( parameters, QStringLiteral( "MAX_ZOOM" ), context );
      56                 :            : 
      57                 :          0 :   QVariant layersVariant = parameters.value( parameterDefinition( QStringLiteral( "LAYERS" ) )->name() );
      58                 :          0 :   const QList<QgsVectorTileWriter::Layer> layers = QgsProcessingParameterVectorTileWriterLayers::parameterAsLayers( layersVariant, context );
      59                 :            : 
      60                 :          0 :   for ( const QgsVectorTileWriter::Layer &layer : layers )
      61                 :            :   {
      62                 :          0 :     if ( !layer.layer() )
      63                 :          0 :       throw QgsProcessingException( QObject::tr( "Unknown input layer" ) );
      64                 :            :   }
      65                 :            : 
      66                 :          0 :   QgsVectorTileWriter writer;
      67                 :          0 :   QVariantMap outputs;
      68                 :          0 :   prepareWriter( writer, parameters, context, outputs );
      69                 :            : 
      70                 :          0 :   writer.setMinZoom( minZoom );
      71                 :          0 :   writer.setMaxZoom( maxZoom );
      72                 :          0 :   writer.setLayers( layers );
      73                 :          0 :   writer.setTransformContext( context.transformContext() );
      74                 :            : 
      75                 :          0 :   if ( parameters.contains( QStringLiteral( "EXTENT" ) ) )
      76                 :            :   {
      77                 :          0 :     QgsRectangle extent = parameterAsExtent( parameters, QStringLiteral( "EXTENT" ), context, QgsCoordinateReferenceSystem( "EPSG:3857" ) );
      78                 :          0 :     writer.setExtent( extent );
      79                 :          0 :   }
      80                 :            : 
      81                 :          0 :   bool res = writer.writeTiles( feedback );
      82                 :            : 
      83                 :          0 :   if ( !res )
      84                 :          0 :     throw QgsProcessingException( QObject::tr( "Failed to write vector tiles: " ) + writer.errorMessage() );
      85                 :            : 
      86                 :          0 :   return outputs;
      87                 :          0 : }
      88                 :            : 
      89                 :            : //
      90                 :            : // QgsWriteVectorTilesXyzAlgorithm
      91                 :            : //
      92                 :            : 
      93                 :          0 : QString QgsWriteVectorTilesXyzAlgorithm::name() const
      94                 :            : {
      95                 :          0 :   return QStringLiteral( "writevectortiles_xyz" );
      96                 :            : }
      97                 :            : 
      98                 :          0 : QString QgsWriteVectorTilesXyzAlgorithm::displayName() const
      99                 :            : {
     100                 :          0 :   return QObject::tr( "Write Vector Tiles (XYZ)" );
     101                 :            : }
     102                 :            : 
     103                 :          0 : QgsProcessingAlgorithm *QgsWriteVectorTilesXyzAlgorithm::createInstance() const
     104                 :            : {
     105                 :          0 :   return new QgsWriteVectorTilesXyzAlgorithm();
     106                 :            : }
     107                 :            : 
     108                 :          0 : void QgsWriteVectorTilesXyzAlgorithm::initAlgorithm( const QVariantMap & )
     109                 :            : {
     110                 :          0 :   addParameter( new QgsProcessingParameterFolderDestination( QStringLiteral( "OUTPUT_DIRECTORY" ), QObject::tr( "Output directory" ) ) );
     111                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "XYZ_TEMPLATE" ), QObject::tr( "File template" ), QStringLiteral( "{z}/{x}/{y}.pbf" ) ) );
     112                 :            : 
     113                 :          0 :   addBaseParameters();
     114                 :          0 : }
     115                 :            : 
     116                 :          0 : void QgsWriteVectorTilesXyzAlgorithm::prepareWriter( QgsVectorTileWriter &writer, const QVariantMap &parameters, QgsProcessingContext &context, QVariantMap &outputs )
     117                 :            : {
     118                 :          0 :   QString outputDir = parameterAsString( parameters, QStringLiteral( "OUTPUT_DIRECTORY" ), context );
     119                 :          0 :   QString xyzTemplate = parameterAsString( parameters, QStringLiteral( "XYZ_TEMPLATE" ), context );
     120                 :          0 :   QgsDataSourceUri dsUri;
     121                 :          0 :   dsUri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) );
     122                 :          0 :   dsUri.setParam( QStringLiteral( "url" ), QUrl::fromLocalFile( outputDir + "/" + xyzTemplate ).toString() );
     123                 :          0 :   QString uri = dsUri.encodedUri();
     124                 :            : 
     125                 :          0 :   writer.setDestinationUri( uri );
     126                 :            : 
     127                 :          0 :   outputs.insert( QStringLiteral( "OUTPUT_DIRECTORY" ), outputDir );
     128                 :          0 : }
     129                 :            : 
     130                 :            : //
     131                 :            : // QgsWriteVectorTilesMbtilesAlgorithm
     132                 :            : //
     133                 :            : 
     134                 :          0 : QString QgsWriteVectorTilesMbtilesAlgorithm::name() const
     135                 :            : {
     136                 :          0 :   return QStringLiteral( "writevectortiles_mbtiles" );
     137                 :            : }
     138                 :            : 
     139                 :          0 : QString QgsWriteVectorTilesMbtilesAlgorithm::displayName() const
     140                 :            : {
     141                 :          0 :   return QObject::tr( "Write Vector Tiles (MBTiles)" );
     142                 :            : }
     143                 :            : 
     144                 :          0 : QgsProcessingAlgorithm *QgsWriteVectorTilesMbtilesAlgorithm::createInstance() const
     145                 :            : {
     146                 :          0 :   return new QgsWriteVectorTilesMbtilesAlgorithm();
     147                 :            : }
     148                 :            : 
     149                 :          0 : void QgsWriteVectorTilesMbtilesAlgorithm::initAlgorithm( const QVariantMap & )
     150                 :            : {
     151                 :          0 :   addParameter( new QgsProcessingParameterFileDestination( QStringLiteral( "OUTPUT" ), QObject::tr( "Destination MBTiles" ), QObject::tr( "MBTiles files (*.mbtiles)" ) ) );
     152                 :            : 
     153                 :          0 :   addBaseParameters();
     154                 :            : 
     155                 :            :   // optional metadata for MBTiles
     156                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_NAME" ), QObject::tr( "Metadata: Name" ), QVariant(), false, true ) );
     157                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_DESCRIPTION" ), QObject::tr( "Metadata: Description" ), QVariant(), false, true ) );
     158                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_ATTRIBUTION" ), QObject::tr( "Metadata: Attribution" ), QVariant(), false, true ) );
     159                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_VERSION" ), QObject::tr( "Metadata: Version" ), QVariant(), false, true ) );
     160                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_TYPE" ), QObject::tr( "Metadata: Type" ), QVariant(), false, true ) );
     161                 :          0 :   addParameter( new QgsProcessingParameterString( QStringLiteral( "META_CENTER" ), QObject::tr( "Metadata: Center" ), QVariant(), false, true ) );
     162                 :          0 : }
     163                 :            : 
     164                 :          0 : void QgsWriteVectorTilesMbtilesAlgorithm::prepareWriter( QgsVectorTileWriter &writer, const QVariantMap &parameters, QgsProcessingContext &context, QVariantMap &outputs )
     165                 :            : {
     166                 :          0 :   QString outputFile = parameterAsFileOutput( parameters, QStringLiteral( "OUTPUT" ), context );
     167                 :          0 :   QgsDataSourceUri dsUri;
     168                 :          0 :   dsUri.setParam( QStringLiteral( "type" ), QStringLiteral( "mbtiles" ) );
     169                 :          0 :   dsUri.setParam( QStringLiteral( "url" ), outputFile );
     170                 :          0 :   QString uri = dsUri.encodedUri();
     171                 :            : 
     172                 :          0 :   writer.setDestinationUri( uri );
     173                 :            : 
     174                 :          0 :   QString metaName = parameterAsString( parameters, QStringLiteral( "META_NAME" ), context );
     175                 :          0 :   QString metaDesciption = parameterAsString( parameters, QStringLiteral( "META_DESCRIPTION" ), context );
     176                 :          0 :   QString metaAttribution = parameterAsString( parameters, QStringLiteral( "META_ATTRIBUTION" ), context );
     177                 :          0 :   QString metaVersion = parameterAsString( parameters, QStringLiteral( "META_VERSION" ), context );
     178                 :          0 :   QString metaType = parameterAsString( parameters, QStringLiteral( "META_TYPE" ), context );
     179                 :          0 :   QString metaCenter = parameterAsString( parameters, QStringLiteral( "META_CENTER" ), context );
     180                 :            : 
     181                 :          0 :   QVariantMap meta;
     182                 :          0 :   if ( !metaName.isEmpty() )
     183                 :          0 :     meta["name"] = metaName;
     184                 :          0 :   if ( !metaDesciption.isEmpty() )
     185                 :          0 :     meta["description"] = metaDesciption;
     186                 :          0 :   if ( !metaAttribution.isEmpty() )
     187                 :          0 :     meta["attribution"] = metaAttribution;
     188                 :          0 :   if ( !metaVersion.isEmpty() )
     189                 :          0 :     meta["version"] = metaVersion;
     190                 :          0 :   if ( !metaType.isEmpty() )
     191                 :          0 :     meta["type"] = metaType;
     192                 :          0 :   if ( !metaCenter.isEmpty() )
     193                 :          0 :     meta["center"] = metaCenter;
     194                 :            : 
     195                 :          0 :   writer.setMetadata( meta );
     196                 :            : 
     197                 :          0 :   outputs.insert( QStringLiteral( "OUTPUT" ), outputFile );
     198                 :          0 : }
     199                 :            : 
     200                 :            : 
     201                 :            : ///@endcond

Generated by: LCOV version 1.14