Estrarre le tabelle dei domini di campo da un FileGDB
Come estrarre le tabelle dei domini di campo da un FileGDB usando ogr2ogr
A cura di
Totò Fiandaca
| issue
#236
| guida/e
Andrea Borruso
Caso d’uso
Dato un FileGDB DBGT_10K_22_V01.gdb (pesa circa 5 GB con oltre 300 tabelle, relazioni e domini), che contiene semplici tabelle e tabelle con attributi geometrici e domini di campo. Queste ultime però non sono presenti direttamente come tabelle nel gdb ma sono impostate come domini e quindi non c'è modo di esportarle se non dopo averle convertite in tabelle, ma è un lavoro manuale e ripretitivo (sono oltre 200).
Soluzione
ogrinfo -json DBGT_10K_22_V01.gdb | jq -r '.domains|keys[]' | while IFS="" read -r domain;do ogrinfo -json DBGT_10K_22_V01.gdb | jq -r '.domains.'"$domain"'.codedValues' | mlr --j2c reshape -r '.' -o k,v >"$domain".csv;done
dove:
-json
: è il formato di output di GDAL, necessita >= GDAL 3.7ogrinfo -json DBGT_10K_22_V01.gdb
: estrae dal database un unico file json con tutte le info (dbgt10k_fc_domain.json);jq -r '.domains|keys[]'
: estrae, dall’output del precedente comando, solo i nomi dei domini di campo;while IFS="" read -r domain;do ogrinfo -json DBGT_10K_22_V01.gdb
: crea un ciclo, e per ogni nome del dominio estrae l’elenco chiave valore presenti nel database;jq -r '.domains.'"$domain"'.codedValues'
: estrae i domini di campo di tipo codedValues;mlr --j2c reshape -r '.' -o k,v
: converte dal formato json a csv e sistema le colonne k e v
script bash:
#!/bin/bash
set -x
set -e
set -u
set -o pipefail
folder="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# occorre >=GDAL 3.7
# lista_demain.csv:
# ogrinfo -json DBGT_10K_22_V01.gdb | jq -r '.domains|keys[]'
# file json con le info su un FileGDB:
# ogrinfo -json DBGT_10K_22_V01.gdb
# crea cartella per i dati, se non esiste
mkdir -p "$folder"/data
# rimuovi i file csv, se esistono
find "$folder"/data -type f -name '*.csv' -delete
# ciclo
while IFS="" read -r domain; do
jq -r '.domains.'"$domain"'.codedValues' dbgt10k_fc_domain.json |
mlr --j2c reshape -r '.' -o k,v >"$folder"/data/"$domain".csv
done <lista_demain.csv
Dati
download file pesante +5 GB
Riferimenti utili
- ogr2ogr: https://gdal.org/programs/ogr2ogr.html
- jq: https://stedolan.github.io/jq/
- Miller (mlr): https://miller.readthedocs.io/
Ultima modifica 12/02/2023: update link Miller (fac1a84)