[Qgis-user] Pyqgis how to append existing gpkg layer
andrea antonello
andrea.antonello at gmail.com
Wed Apr 26 08:37:53 PDT 2023
Hi German,
> that's right Andrea. It actually depends on whether you want to append
> features to an existing layer, or to "append" (one could also say "create")
> a layer (in)to an existing GPKG database. The latter case is well covered
> by Anne's answer.
>
> See prior messages in this thread:
> https://lists.osgeo.org/pipermail/qgis-user/2023-April/052855.html
>
ah, sorry, I missed that part somehow.
Thanks, cheers,
Andrea
>
> Regards,
>
> Germán
>
>
> El mié, 26 abr 2023 a las 9:11, andrea antonello via QGIS-User (<
> qgis-user at lists.osgeo.org>) escribió:
>
>> Hi, from what I saw in the docs, you should be able to append to layers
>> with the filewriter option AppendToLayerNoNewFields?
>> The CreateOrOverwriteLayer overwrites the layer completely.
>>
>> Cheers,
>> Andrea
>>
>>
>> On Wed, Apr 26, 2023 at 2:58 PM Anne B. Nilsen via QGIS-User <
>> qgis-user at lists.osgeo.org> wrote:
>>
>>> I’m not a pyQGIS-expert, but with help from gis.stackechange.com I have
>>> managed to create an empty geopackage file and then adding several layers
>>> to it with this code:
>>>
>>> …
>>>
>>> gpkg_reg = "karplanteregistrering.gpkg" # the NEW gpkg
>>> to be created
>>>
>>> if os.path.exists(gpkg_reg): # If gpkg-file
>>> already exists, delete it
>>>
>>> os.remove(gpkg_reg)
>>>
>>> …
>>>
>>> #
>>> https://gis.stackexchange.com/questions/417916/creating-empty-layers-in-a-geopackage-using-pyqgis?noredirect=1&lq=1
>>>
>>> def create_blank_gpkg_layer(gpkg_path: str, layer_name: str, geometry:
>>> int,
>>>
>>> crs: str, fields: QgsFields, append: bool =
>>> False
>>>
>>> ) -> bool:
>>>
>>> # To add a layer to an existing GPKG file, pass 'append' as True
>>>
>>> options = QgsVectorFileWriter.SaveVectorOptions()
>>>
>>> options.driverName = "GPKG"
>>>
>>> options.layerName = layer_name
>>>
>>> if append:
>>>
>>> options.actionOnExistingFile =
>>> QgsVectorFileWriter.CreateOrOverwriteLayer
>>>
>>> writer = QgsVectorFileWriter.create(
>>>
>>> gpkg_path,
>>>
>>> fields,
>>>
>>> geometry,
>>>
>>> QgsCoordinateReferenceSystem(crs),
>>>
>>> QgsCoordinateTransformContext(),
>>>
>>> options)
>>>
>>> del writer
>>>
>>> return True
>>>
>>> …
>>>
>>> # Layer 1 oversikt – creating an empty layer with attributes read from a
>>> csv-file
>>>
>>> f = open("./egenskaper/egenskaper_oversikt.csv",'r') # open file
>>>
>>> f.readline() # read the first line of the file (the "metadata"/heading)
>>>
>>> layer_name = "oversikt" # set layer name
>>>
>>> print('creates layer', layer_name) # print layer name
>>>
>>> geom = QgsWkbTypes.PointZ # geometrytype
>>>
>>> crs = 'epsg:25832' # coordinate system
>>>
>>> fields = QgsFields()
>>>
>>> for line in f: # Read attrubutes from csv-file
>>>
>>> r = {}
>>>
>>> r = line.split(';') # 0 navn, 1 QVariant-type, 2 lengde og 3
>>> presisjon
>>>
>>> fname = r[0]
>>>
>>> l = int(r[2])
>>>
>>> p = int(r[3])
>>>
>>> try:
>>>
>>> fields.append(QgsField(fname,set_variant(r[1]),'',l,p)) # add
>>> field to layer
>>>
>>> except:
>>>
>>> print("Noe gikk galt - får ikke laget egenskaper fra " +str(f))
>>>
>>> f.close() # close file
>>>
>>> create_blank_gpkg_layer(gpkg_reg, layer_name, geom, crs, fields) # Do
>>> NOT include True when the FIRST layer is created
>>>
>>>
>>>
>>> # Layer 2 arter (to be added to the same new gpkg-file just created
>>> above)
>>>
>>> f = open("./egenskaper/egenskaper_arter.csv",'r') # open file
>>>
>>> f.readline()
>>>
>>> layer_name = "arter"
>>>
>>> print('creates layer', layer_name) # print layer name
>>>
>>> geom = QgsWkbTypes.PointZ # geometrytype
>>>
>>> crs = 'epsg:25832' # coordinate system
>>>
>>> fields = QgsFields()
>>>
>>> for line in f: # Read attrubutes from csv-file
>>>
>>> r = {}
>>>
>>> r = line.split(';') # 0 navn, 1 QVariant-type, 2 lengde og 3
>>> presisjon
>>>
>>> fname = r[0]
>>>
>>> l = int(r[2])
>>>
>>> p = int(r[3])
>>>
>>> try:
>>>
>>> fields.append(QgsField(fname,set_variant(r[1]),'',l,p)) # add
>>> field to layer
>>>
>>> except:
>>>
>>> print("Noe gikk galt - får ikke laget egenskaper fra " +str(f))
>>>
>>> f.close() # close file
>>>
>>> create_blank_gpkg_layer(gpkg_reg, layer_name, geom, crs, fields, True)
>>> # Include True to add a new layer to the SAME gpkg-file
>>>
>>> …
>>>
>>>
>>>
>>> Note the difference in the use of True and not when calling
>>> create_blank_gpk_layer().
>>>
>>> Perhaps something similar may be the solution to your problem.
>>>
>>>
>>>
>>> Kind regards
>>>
>>> Anne
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> QGIS-User mailing list
>>> QGIS-User at lists.osgeo.org
>>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>>
>> _______________________________________________
>> QGIS-User mailing list
>> QGIS-User at lists.osgeo.org
>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>
>
>
> --
> -----------
> |\__
> (:>__)(
> |/
> 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/20230426/4e9c57a6/attachment.htm>
More information about the QGIS-User
mailing list