[Qgis-user] [QGIS-Developer] Pyqgis how to append existing gpkg layer
Germán Carrillo
carrillo.german at gmail.com
Wed Apr 19 08:15:41 PDT 2023
Bonjour Sylvain,
J'espère que vous allez bien.
If you want to append features from a source layer to another layer that
already exists in a GPKG file, you can do this:
-----------------------------------------------------------------------------------------------------
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "GPKG"
options.layerName = "my_existing_layer_name" *# Write here the existing
layer name in the GPKG*
options.actionOnExistingFile = QgsVectorFileWriter.AppendToLayerNoNewFields
options.onlySelectedFeatures = True
path = "/tmp/existing_gpkg_file_path.gpkg"
layer = QgsVectorLayer("/tmp/my_source_layer.shp", "my source layer name",
"ogr")
result = QgsVectorFileWriter.writeAsVectorFormatV3(
layer,
path, *# Existing GPKG file path*
layer.transformContext(),
options)
-----------------------------------------------------------------------------------------------------
If on the contrary, you want to append a whole layer (with its own field
structure, crs, etc.) to an existing GPKG database, you can follow this
solution:
https://gis.stackexchange.com/a/417950
As you can see, the key is to define the options.actionOnExistingFile
property, whose possible values are well documented here:
https://api.qgis.org/api/3.28/classQgsVectorFileWriter.html#afda86eff21ac1da7dc42cbdde424acb1
*Note: SInce we're using writeAsVectorFormatV3(), you need at least QGIS
v3.20 for this solution to work.*
Regards,
Germán
El mié, 19 abr 2023 a las 3:55, PIERRE Sylvain via QGIS-Developer (<
qgis-developer at lists.osgeo.org>) escribió:
> Hi dev and users
>
>
>
> I don’t understand how to append an existing gpkg layer with pyqgis.
>
> I’ve tried many QgsVectorFileWriter options
>
>
>
> self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteLayer
>
>
>
> reset final layer
>
>
>
> And
>
> self.options.EditionCapability =
> QgsVectorFileWriter.CanAppendToExistingLayer
>
>
>
> does not change anything
>
>
>
> So what’s the good way to do this ?
>
>
>
> This is my code (I’m iterating over several other data sources)
>
> self.options = QgsVectorFileWriter.SaveVectorOptions()
>
> self.options.driverName = 'GPKG'
>
> self.options.onlySelectedFeatures = True
>
> self.options.layerName = 'parcelles'
>
>
>
> for dir in dirs:
>
> print(dir)
>
>
>
> if os.path.isdir(dir):
>
> db_GPKG = os.path.join(dir, 'MAEC2023.gpkg')
>
> if os.path.exists(db_GPKG):
>
> gpkg_layer = db_GPKG + "|layername=parcelles"
>
> RPG_layer = QgsVectorLayer(gpkg_layer, "RPG", "ogr")
>
>
>
> expr = (' "fk_mesure" is not null ')
>
> *#expr = ('"fk_mesure" = \'{}\'').format('MAEC
> Papillons')*
>
>
>
> RPG_layer.selectByExpression(expr)
>
> selected_feature = RPG_layer.selectedFeatures()
>
> print(len(selected_feature))
>
> if os.path.exists(self.db_GPKG): *# if the ouput file
> already exist*
>
> self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteLayer
>
> *#self.options.actionOnExistingFile =
> QgsVectorFileWriter.AppendToLayerNoNewFields*
>
> *#self.options.actionOnExistingFile =
> QgsVectorFileWriter.AppendToLayerAddFields *
>
> self.options.EditionCapability =
> QgsVectorFileWriter.CanAppendToExistingLayer
>
> else:
>
> self.options.actionOnExistingFile =
> QgsVectorFileWriter.CreateOrOverwriteFile
>
>
>
> write_result, error_message =
> QgsVectorFileWriter.writeAsVectorFormatV2(RPG_layer, self.db_GPKG , self.
> context, self.options)
>
>
>
>
>
>
>
> Thanks
>
>
>
>
>
> Sylvain PIERRE
>
> Chef de projet système d’information
>
> Direction des Systèmes d’Information et du Développement Numérique
>
> Service Projets et Ingénierie Numérique
>
> *Collectivité européenne d’Alsace*
>
> Tél : 03 88 76 68 88
>
> sylvain.pierre at alsace.eu
>
> www.alsace.eu
>
> [image: facebook] <http://www.facebook.com/toutelalsace> [image: twitter]
> <http://www.twitter.com/toutelalsace> [image: insta]
> <http://www.instagram.com/toutelalsace>
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
--
-----------
|\__
(:>__)(
|/
Soluciones Geoinformáticas Libres
http://geotux.tuxfamily.org/
https://twitter.com/GeoTux2 <http://twitter.com/GeoTux2>
<http://gis.stackexchange.com/users/4972/germ%c3%a1n-carrillo>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.jpg
Type: image/jpeg
Size: 8094 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0001.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 827 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.png
Type: image/png
Size: 852 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image004.png
Type: image/png
Size: 1028 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20230419/3a30f75b/attachment-0005.png>
More information about the QGIS-User
mailing list