Skip to content

Commit

Permalink
file writer metadata: add (Geo)Arrow and (Geo)Parquet drivers (fixes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
rouault authored and github-actions[bot] committed Jan 8, 2023
1 parent 07d64d9 commit 6f13698
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 0 deletions.
110 changes: 110 additions & 0 deletions src/core/qgsvectorfilewriter.cpp
Expand Up @@ -920,6 +920,57 @@ class QgsVectorFileWriterMetadataContainer
QMap<QString, QgsVectorFileWriter::Option *> datasetOptions;
QMap<QString, QgsVectorFileWriter::Option *> layerOptions;

// Arrow
datasetOptions.clear();
layerOptions.clear();

layerOptions.insert( QStringLiteral( "COMPRESSION" ), new QgsVectorFileWriter::SetOption(
QObject::tr( "Compression method." ),
QStringList()
<< QStringLiteral( "UNCOMPRESSED" )
<< QStringLiteral( "ZSTD" )
<< QStringLiteral( "LZ4" ),
QStringLiteral( "LZ4" ), // Default value
false // Allow None
) );

layerOptions.insert( QStringLiteral( "GEOMETRY_ENCODING" ), new QgsVectorFileWriter::SetOption(
QObject::tr( "Geometry encoding." ),
QStringList()
<< QStringLiteral( "GEOARROW" )
<< QStringLiteral( "WKB" )
<< QStringLiteral( "WKT" ),
QStringLiteral( "GEOARROW" ), // Default value
false // Allow None
) );

layerOptions.insert( QStringLiteral( "BATCH_SIZE" ), new QgsVectorFileWriter::IntOption(
QObject::tr( "Maximum number of rows per batch." ),
65536 // Default value
) );

layerOptions.insert( QStringLiteral( "FID" ), new QgsVectorFileWriter::StringOption(
QObject::tr( "Name for the feature identifier column" ),
QString() // Default value
) );

layerOptions.insert( QStringLiteral( "GEOMETRY_NAME" ), new QgsVectorFileWriter::StringOption(
QObject::tr( "Name for the geometry column" ),
QStringLiteral( "geometry" ) // Default value
) );

driverMetadata.insert( QStringLiteral( "Arrow" ),
QgsVectorFileWriter::MetaData(
QStringLiteral( "(Geo)Arrow" ),
QObject::tr( "(Geo)Arrow" ),
QStringLiteral( "*.arrow *.feather *.arrows *.ipc" ),
QStringLiteral( "arrow" ),
datasetOptions,
layerOptions,
QStringLiteral( "UTF-8" )
)
);

// Arc/Info ASCII Coverage
datasetOptions.clear();
layerOptions.clear();
Expand Down Expand Up @@ -2175,6 +2226,65 @@ class QgsVectorFileWriterMetadataContainer
)
);

// Parquet
datasetOptions.clear();
layerOptions.clear();

layerOptions.insert( QStringLiteral( "COMPRESSION" ), new QgsVectorFileWriter::SetOption(
QObject::tr( "Compression method." ),
QStringList()
<< QStringLiteral( "UNCOMPRESSED" )
<< QStringLiteral( "SNAPPY" ),
QStringLiteral( "SNAPPY" ), // Default value
false // Allow None
) );

layerOptions.insert( QStringLiteral( "GEOMETRY_ENCODING" ), new QgsVectorFileWriter::SetOption(
QObject::tr( "Geometry encoding." ),
QStringList()
<< QStringLiteral( "WKB" )
<< QStringLiteral( "WKT" )
<< QStringLiteral( "GEOARROW" ),
QStringLiteral( "WKB" ), // Default value
false // Allow None
) );

layerOptions.insert( QStringLiteral( "ROW_GROUP_SIZE" ), new QgsVectorFileWriter::IntOption(
QObject::tr( "Maximum number of rows per group." ),
65536 // Default value
) );

layerOptions.insert( QStringLiteral( "FID" ), new QgsVectorFileWriter::StringOption(
QObject::tr( "Name for the feature identifier column" ),
QString() // Default value
) );

layerOptions.insert( QStringLiteral( "GEOMETRY_NAME" ), new QgsVectorFileWriter::StringOption(
QObject::tr( "Name for the geometry column" ),
QStringLiteral( "geometry" ) // Default value
) );

layerOptions.insert( QStringLiteral( "EDGES" ), new QgsVectorFileWriter::SetOption(
QObject::tr( "Name of the coordinate system for the edges." ),
QStringList()
<< QStringLiteral( "PLANAR" )
<< QStringLiteral( "SPHERICAL" ),
QStringLiteral( "PLANAR" ), // Default value
false // Allow None
) );

driverMetadata.insert( QStringLiteral( "Parquet" ),
QgsVectorFileWriter::MetaData(
QStringLiteral( "(Geo)Parquet" ),
QObject::tr( "(Geo)Parquet" ),
QStringLiteral( "*.parquet" ),
QStringLiteral( "parquet" ),
datasetOptions,
layerOptions,
QStringLiteral( "UTF-8" )
)
);

// PGDump
datasetOptions.clear();
layerOptions.clear();
Expand Down
2 changes: 2 additions & 0 deletions src/gui/ogr/qgsvectorlayersaveasdialog.cpp
Expand Up @@ -32,6 +32,7 @@
#include <QTextCodec>
#include <QSpinBox>
#include <QRegularExpression>
#include <limits>
#include "gdal.h"
#include "qgsdatums.h"
#include "qgsiconutils.h"
Expand Down Expand Up @@ -246,6 +247,7 @@ QList<QPair<QLabel *, QWidget *> > QgsVectorLayerSaveAsDialog::createControls( c
{
QSpinBox *sb = new QSpinBox();
sb->setObjectName( it.key() );
sb->setMaximum( std::numeric_limits<int>::max() ); // the default is 99
sb->setValue( opt->defaultValue );
control = sb;
}
Expand Down

0 comments on commit 6f13698

Please sign in to comment.