User Tools

Site Tools


batimetrielagunave:lineenavigazione

This is an old revision of the document!


Linee di navigazione

Uno degli output previsti nel flusso di elaborazione dei dati multibeam in CARIS è l'esportazione delle linee di navigazione in shapefiles. Il codice che identifica nello shapefile le singole linee è composto di 24 caratteri.

Problema: duplicazione shapefile in CARIS

Il problema è che (per qualche ragione a me sconosciuta) CARIS richiede di salvare 2 shapefiles, uno con il campo “Source” contenente le prime 12 cifre dell'identificativo della linea, e un secondo shapefile che nel campo “Source” contiene le ultime 12 cifre.

Se ho capito bene, la procedura attuale prevede di aprire i dbf dei due shapefiles, copiare il contenuto delle due colonne Source in un foglio di calcolo che in una terza colonna concatena le stringhe dei 2 campi nei 24 richiesti, ricopiare tale colonna in uno dei due file originali, cancellare l'altro shapefile.

Soluzione con ogr2ogr in Linux

Per automatizzare la procedura attraverso l'utilizzo di un solo comando ho utilizzato il pacchetto ogr2ogr (http://www.gdal.org/ogr2ogr.html).

Il seguente comando, lanciato da terminale (in ambiente Linux) all'interno della cartella contenente i due shapefile di input (file_first12 e file_last12), permette di ottenere in output un file (output.shp) contenente nel campo Source tutti il 24 caratteri richiesti.

Comando completo

ogr2ogr file_first12_FID.shp file_first12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_first12” && ogr2ogr file_last12_FID.shp file_last12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_last12” && ogr2ogr -f “ESRI Shapefile” -overwrite output.shp file_first12_FID.shp -sql “SELECT Key, Feature, CONCAT(file_first12_FID.Source, file_last12_FID.Source) AS Source, Theme, Length, MinZ, MaxZ FROM file_first12_FID LEFT JOIN 'file_last12_FID.dbf'.file_last12_FID ON file_first12_FID.FID4JOIN = file_last12_FID.FID4JOIN” && rm *_FID*

Maggiori informazioni sul significato dei singoli comandi qui: Spiegazione dettagliata del comando

Utilizzo in Windows

Per eseguire in Windows il comando descritto è necessario installare il pacchetto (OSGeo4W).

Diversamente dalla procedura descritta sul sito (e per evitare di installare software non necessari allo scopo), consiglio di seguire le seguenti istruzioni:

  • dopo aver scaricato la versione a 32bit o 64bit
  • lanciare il file .exe
  • scegliere Advanced Install > Avanti
  • Install from Internet > Avanti
  • lasciare le impostazioni di Default > Avanti
  • lasciare le impostazioni di Default > Avanti
  • lasciare le impostazioni di Default > Avanti
  • selezionare http://download.osgeo.org > Avanti
  • selezionare in Libs il pacchetto gdal come da immagine sottostante

  • Avanti
  • Attendere il download e l'installazione dei pacchetti
  • per lanciare la shell cliccare sull'icona OSGeo4W Shell che dovrebbe essere presente ora sul Desktop
  • il comando va leggermente modificato, modificando l'ultima istruzione che rimuove i file di passaggio da rm *_FID* in del *_FID*. Risulterà quindi il seguente:

ogr2ogr file_first12_FID.shp file_first12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_first12” && ogr2ogr file_last12_FID.shp file_last12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_last12” && ogr2ogr -f “ESRI Shapefile” -overwrite output.shp file_first12_FID.shp -sql “SELECT Key, Feature, CONCAT(file_first12_FID.Source, file_last12_FID.Source) AS Source, Theme, Length, MinZ, MaxZ FROM file_first12_FID LEFT JOIN 'file_last12_FID.dbf'.file_last12_FID ON file_first12_FID.FID4JOIN = file_last12_FID.FID4JOIN” && del *_FID*

Spiegazione dettagliata del comando

Qui di seguito provo a descrivere nel dettaglio cosa fa il comando.

  • nel codice qui sopra sono in realtà presenti 3 chiamate distinte a ogr2ogr, concatenate tra loro in un unico flusso di esecuzione tramite l'operatore &&
  • i primi 2 comandi sono ogr2ogr file_first12_FID.shp file_first12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_first12” e ogr2ogr file_last12_FID.shp file_last12.shp -sql “SELECT *, FID AS FID4JOIN FROM file_last12”. Lo scopo è di creare, per ciascuno dei file in input, un nuovo shapefile, uguale a quello di partenza, con in più un campo FID4JOIN. Questo campo contiene i FID (Feature ID) dello shapefile, cioè gli identificativi che automaticamente vengono creati negli shapefile per identificare automaticamente in modo univoco ogni record. I FID servono successivamente nel comando per effettuare il JOIN tra i due shapefile. Tali identificativi sono “nascosti” nei dbf e, poiché la successiva istruzione SQL nel JOIN usa un file dbf, ho dovuto come prima cosa creare 2 shapefile che contengono esplicitamente (quindi anche nei dbf) un campo contenente il FID. Questi due shapefile “di passaggio” vengono cancellati alla fine del comando globale tramite rm *_FID*
  • entrando nel dettaglio dei comandi precedenti, ogr2ogr: chiama il pacchetto ogr2ogr
  • file_first12_FID.shp è il nuovo file in output contenente il nuovo campo FID
  • file_first12.shp è lo shapefile originale
  • -sql dice che la seguente espressione contenuta tra virgolette è un'istruzione SQL
  • l'istruzione seleziona (SELECT) e quindi restituisce in output, tutti i campi presente nel file originale (*) e in più anche il campo FID, che viene rinominato in FID4JOIN (perché sarà usato in funzione del JOIN successivo)
  • a questo punto abbiamo due nuovi shapefile file_first12_FID.shp e file_last12_FID.shp che verranno usati nel comando successivo

ogr2ogr -f “ESRI Shapefile” -overwrite output.shp file_first12_FID.shp -sql “SELECT Key, Feature, CONCAT(file_first12_FID.Source, file_last12_FID.Source) AS Source, Theme, Length, MinZ, MaxZ FROM file_first12_FID LEFT JOIN 'file_last12_FID.dbf'.file_last12_FID ON file_first12_FID.FID4JOIN = file_last12_FID.FID4JOIN”

  • di nuovo viene chiamato il comando ogr2ogr
  • il parametro -f “ESRI Shapefile” dice che i successivi file in input sono di tipo ESRI shapefile
  • -overwrite sovrascrive il file di output, se presente
  • output.shp è il file in output
  • file_first12_FID.shp è il file principale, verso cui si fa il join
  • -sql dice nuovamente che la seguente espressione contenuta tra virgolette è un'istruzione SQL
  • l'istruzione SQL fa un JOIN tra il file file_first12_FID.shp e il file file_last12_FID.dbf usando il campo univoco FID4JOIN presente in entrambi i file (istruzione LEFT JOIN 'file_last12_FID.dbf'.file_last12_FID ON file_first12_FID.FID4JOIN = file_last12_FID.FID4JOIN)
  • il SELECT crea uno shapefile contenente tutti i campi originali (Key, Feature, Source, Theme, Length, MinZ, MaxZ) con Source che però contiene l la concatenazione (CONCAT) dei due campi Source originari.
batimetrielagunave/lineenavigazione.1383640926.txt.gz · Last modified: 2015/09/11 08:57 (external edit)