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 (< > [email protected]>) 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 < >> [email protected]> 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 >>> [email protected] >>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user >>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user >>> >> _______________________________________________ >> QGIS-User mailing list >> [email protected] >> 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> >
_______________________________________________ QGIS-User mailing list [email protected] List info: https://lists.osgeo.org/mailman/listinfo/qgis-user Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
