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