Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
file writer metadata: add (Geo)Arrow and (Geo)Parquet drivers (fixes #…
  • Loading branch information
rouault committed Jan 7, 2023
1 parent f4d2f27 commit ea8e52a
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 @@ -924,6 +924,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 @@ -2179,6 +2230,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 ea8e52a

Please sign in to comment.