QGIS e GeoPackage - caricare layer da file diversi

Buongiorno,
ho 100 geopackage, tutti contengono tre layer vettoriali dal nome point, linestring e polygon; hanno tutti la medesima struttura della tabella attributi.

Come faccio a realizzare un merge di tutti i point, di tutte le linestring e polygon in modo da ottenere tre soli vettori point, linestring e polygon?

Si potrebbe fare usando GDAL in qualche script python o bash, mi piacerebbe risolvere il quesito rimanendo dentro QGIS e facendolo nel modo più veloce possibile (scarto l’ipotesi di caricarli uno ad uno).

Saluti

Con questo script da console dovresti risolvere,
le linee di print sono per debug, in esecuzione rallentano, per cui meglio commentarle una volta testato lo script:

import os

import geopandas as gpd
import pandas as pd

# Directory contenente i file GeoPackage (doppio slash \\ )
directory_path = "C:\\tua_directory"
print(f'>> Directory: {directory_path}')

# Nome del layer da unire
layer_name = "layer_da_unire"
print(f'>> Layer: {layer_name}')

# Lista per memorizzare i DataFrame
layers = []

# Scorrere tutti i file nella directory
for filename in os.listdir(directory_path):
    if filename.endswith('.gpkg'):
        # Costruire il percorso completo al file GeoPackage
        geopackage_path = os.path.join(directory_path, filename)
        print(f'>> geopackage_path: {geopackage_path}')

        # Caricare il layer dal GeoPackage
        layer = gpd.read_file(geopackage_path, layer=layer_name)
        layers.append(layer)
print(layers)

# # Unire tutti i DataFrame in uno solo
merged_layer = gpd.GeoDataFrame(pd.concat(layers, ignore_index=True))

# Salvare il risultato in un nuovo GeoPackage
merged_layer.to_file(
    'C:\\tua_directory\\merged_geopackage.gpkg',
    layer=layer_name,
    driver='GPKG')

Nota finale lo script deriva da diverse domande a ChatGpt e successivi adattamenti e correzioni
Cordiali Saluti

1 Like

Ciao Giulio,
ho fatto un test su due geopackage,
funziona perfettamente.

grazie mille.

PS:
Occorre installare geopandas per chi utilizza OSGeo4W Network Installer