Closed pigreco closed 1 year ago
Ottimo @pigreco
Con la recente novità di avere l'output in JSON, diventa tutto molto più facile e diretto, perché il JSON è testo strutturato ed estrai quindi in modo diretto quello che vuoi.
Dovrebbe essere qualcosa come
ogrinfo -so -json input.gdb | jq -r '.layers[].name'
@aborruso
il JSON è testo strutturato ed estrai quindi in modo diretto quello che vuoi.
ma occorrerebbe sempre un loop per estrarre i 4 file descritti sopra?
Totò non ho idea, avrei bisogno del file.
Volevo soltanto sottolineare che con il JSON come output, è tutto più semplice
Usando il formato json
e questo costrutto:
ogrinfo -so -json "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb" | jq -c ".layers[]|{name:.name,geom_type:.geometryFields[].type}" | mlr --ijsonl --ocsv unsparsify
ottengo:
CS_MAR_CS_MAR_LIN_SG,MultiLineStringZ
META,MultiPolygon
MN_CON_MN_CON_SUP_SR,MultiPolygonZ
PALO,PointZ
ARGINE_ARGN_SUP_SR,MultiPolygonZ
CV_LIV,MultiLineStringZ
SCR_CR_POINTXSCR,Point
CONDOT,MultiLineStringZ
.....
ma non prende tutte le tabelle che NON hanno geometry, ovvero, non esiste questo oggetto geom_type:.geometryFields[].type
ovvero per i layer senza geometry
sono così:
{
"name":"CANALE_CS_ACQ_NOM_T",
"metadata":{
},
"geometryFields":[
],
"featureCount":3006,
"fidColumnName":"OBJECTID",
quelli con geometry è così:
{
"name":"AR_VRD_AR_VRD_SUP_L",
"metadata":{
},
"geometryFields":[
{
"name":"Shape",
"type":"MultiLineStringZM",
"nullable":true,
"extent":[
431766.13599999994,
4304316.3300000001,
568452.46200000029,
4563953.5470000003
],
allego output di ogrinfo -so -json "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb"
Ciao @pigreco , devi mettere in questo caso una condizione if in jq
Qualcosa come
<out.json jq -c '.layers[]|{name:.name,geom_type:(if (.geometryFields|length) > 0 then .geometryFields[].type else "none" end) }' | mlr --ijsonl --ocsv unsparsify
che verifica la "lunghezza" del campo geometryFields
. Quando è > 0
estrae il tipo, altrimenti gli assegna none
restituisce un errore:
@pigreco apri una shell linux nella cartella in cui hai il file JSON e prova
<out.json jq -c '.layers[]|{name:.name,geom_type:(if (.geometryFields|length) > 0 then .geometryFields[].type else "none" end) }' | mlr --ijsonl --ocsv unsparsify
@aborruso in bash è ok
@aborruso in bash è ok
ok e allora passalo da batch al jq di wsl, tramite wsl
.
Non ho installato jq e Miller su win, quindi non posso fare subito prove
ricetta fatta e pubblicata
https://tansignari.opendatasicilia.it/ricette/bash/estrarre_nomi_organizzare_layer_da_filegdb/
Grazie a
ogrinfo
è possibile estrarre - da un FileGDB - la lista dei layer presenti:dalla lista si nota che ci sono quattro tipologie di oggetti:
lista.txt
Per estrarre solo i nomi dei layer, senza la parte iniziale
Layer:
e la parte finale tra le parentesi tonde, ho usato il seguente script:Spettacolare!