User Tools

Site Tools


batimetrielagunave:lineenavigazione

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
batimetrielagunave:lineenavigazione [2013/10/31 11:14]
alesarrett [Utilizzo in Windows]
batimetrielagunave:lineenavigazione [2015/09/11 08:57] (current)
Line 4: Line 4:
 Il codice che identifica nello shapefile le singole linee è composto di 24 caratteri. Il codice che identifica nello shapefile le singole linee è composto di 24 caratteri.
  
-===== Duplicazione ​shapefile in CARIS =====+===== 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. 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.
Line 10: Line 10:
 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. 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 =====+===== 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). Per automatizzare la procedura attraverso l'​utilizzo di un solo comando ho utilizzato il pacchetto **ogr2ogr **(http://​www.gdal.org/​ogr2ogr.html).
Line 18: Line 18:
 ==== Comando completo ==== ==== 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*''​+''​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, ​substr(file_last12_FID.Source,5)) 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*''​
  
-==== Spiegazione dettagliata del comando ​====+Maggiori informazioni sul significato dei singoli comandi qui: [[batimetrielagunave:​lineenavigazione#​spiegazione_dettagliata_del_comando|Spiegazione dettagliata del comando]]
  
-Qui di seguito provo a descrivere nel dettaglio cosa fa il comando. +===== Utilizzo in Windows ​=====
-  * 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. +
- +
-==== Utilizzo in Windows ====+
  
 Per eseguire in Windows il comando descritto è necessario installare il pacchetto ([[http://​trac.osgeo.org/​osgeo4w/​|OSGeo4W]]). Per eseguire in Windows il comando descritto è necessario installare il pacchetto ([[http://​trac.osgeo.org/​osgeo4w/​|OSGeo4W]]).
Line 55: Line 36:
   * lasciare le impostazioni di Default > Avanti   * lasciare le impostazioni di Default > Avanti
   * selezionare ''​http://​download.osgeo.org''​ > Avanti   * selezionare ''​http://​download.osgeo.org''​ > Avanti
-  * selezionare ​il **Lib** il pacchetto **gdal** come da immagine sottostante+  * selezionare ​in **Libs** il pacchetto **gdal** come da immagine sottostante
 {{:​batimetrielagunave:​gdal.png?​800|}} {{:​batimetrielagunave:​gdal.png?​800|}}
   * Avanti   * Avanti
   * Attendere il download e l'​installazione dei pacchetti   * Attendere il download e l'​installazione dei pacchetti
-  * per lanciare la shell cliccare sull'​icona ​//OSGeo4W Shell// che dovrebbe essere presente ora sul Desktop +  * 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:+  * altrimenti, se non è presente alcuna icona sul desktop, basta lanciare **OSGeo4W.bat** da C:​\OSGeo4W64 
 +  * nella finestra del terminale è necessario spostarsi nella cartella contenente gli shapefile originali da unire, utilizzando ​il comando ​''​cd''​ ([[http://​comandi-dos-e-altro.jimdo.com/​i-comandi-dos/​cd-o-chdir|qui]] alcune info in più) 
 +  * il comando è leggermente modificato ​rispetto a quello in Linux, modificando l'​ultima istruzione che rimuove i file di passaggio da ''​rm *_FID*''​ in ''​del *_FID*''​. Risulterà quindi il seguente: 
 + 
 +''​ogr2ogr NAV_XX_WEEK_first12_FID.shp NAV_XX_WEEK_first12.shp -sql "​SELECT *, FID AS FID4JOIN FROM NAV_XX_WEEK_first12"​ && ogr2ogr NAV_XX_WEEK_last12_FID.shp NAV_XX_WEEK_last12.shp -sql "​SELECT *, FID AS FID4JOIN FROM NAV_XX_WEEK_last12"​ && ogr2ogr -f "ESRI Shapefile"​ -overwrite NAV_XX_WEEK.shp NAV_XX_WEEK_first12_FID.shp -sql "​SELECT CONCAT(NAV_XX_WEEK_first12_FID.Source,​ SUBSTR(NAV_XX_WEEK_last12_FID.Source,​5)) AS Source, Length FROM NAV_XX_WEEK_first12_FID LEFT JOIN '​NAV_XX_WEEK_last12_FID.dbf'​.NAV_XX_WEEK_last12_FID ON NAV_XX_WEEK_first12_FID.FID4JOIN = NAV_XX_WEEK_last12_FID.FID4JOIN"​ && del *_FID*''​ 
 + 
 +  * in un editor di testo basterà sostituire nel comando le "​XX"​ con il numero di settimana corrispondente 
 +===== 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,​ substr(file_last12_FID.Source,​5)) 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. In realtà dal secondo campo viene estratta una stringa a partire dal 5° carattere tramite il comando ''​substr(nomeFile.campo,​5)''​
  
-''​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*''​ 
batimetrielagunave/lineenavigazione.1383214447.txt.gz · Last modified: 2015/09/11 08:57 (external edit)