[Gfoss] importare più shapefile in db spatialite

a.furieri a lqt.it a.furieri a lqt.it
Mer 24 Maggio 2017 20:13:57 CEST


On Wed, 24 May 2017 18:01:04 +0200, Totò Fiandaca wrote:
> Salve a tutti,
> vorrei importare, in un db spatialite, più shapefile 
> contemporaneamente;
> ho fatto alcune ricerche nel web e l'unica soluzione trovata è quella
> spiegata da Furieri qui [0], ho seguito la procedura ma con esito 
> negativo;
>
> uso spatialite_gui 2.0.0 devel
> spatialite 4.3.0a
> sqlite 3.8.11.1
> su win 10 64 bit
>
> procedura usata:
>
> creo script sql:
> SELECT InitSpatialMetadata(1);
> SELECT ImportSHP('C:\Users\Salvatore\Desktop\wrf23032\retic',
> 'retic','CP1252', 23032);
> SELECT ImportSHP('C:\Users\Salvatore\Desktop\wrf23032\reg', 
> 'reg','CP1252',
> 23032);
>
> avvio shell OSGeo4W e digito:
> SET SPATIALITE_SECURITY=relaxed
>
> poi
>
> spatialite_gui db_toto_2.sqlite  mysqlscript.sql
>
>
> risultato:
> si avvia correttamente spatialite_gui con il db, ma non importa 
> nulla.
>
> dove sbaglio?
>

ciao Toto',

stai facendo un po' di confusione tra ambienti di
shell (riga di comando) e ambienti grafici (GUI).

tanto per iniziare, la variabile di ambiente
SPATIALITE_SECURITY_RELAXED la devi impostare
esplicitamente solo quando usi i tools a riga
di comando direttamente dalla shell.
ma non serve assolutamente a nulla quando usi
spatialite_gui; la GUI e' sempre autorizzata
by default a leggere e scrivere sul filesystem,
e se proprio vuoi abilitare/disabilitare questa
funzionalita' lo devi fare tramite gli appositi
pulsanti della toolbar.

a seguire: la GUI non e' lo strumento migliore
per eseguire uno SQL script.
usa piuttosto uno dei tools command line, che
sono fatti apposte per integrarsi nell'ambiente
di shell. quindi:
- puoi usare direttamente spatialite.exe
- oppure puoi usare sqlite3.exe, ma in questo
   caso devi modificare il tuo SQL script in
   modo tale da caricare per prima cosa il
   modulo di estensione spatialite.
   sostanzialmente, basta aggiungere questa
   riga in testa allo SQL script:
   SELECT load_extension('mod_spatialite'),

ultimo errore: il tuo comando e' il seguente:

spatialite_gui db_toto_2.sqlite  mysqlscript.sql

abbiamo gia' visto che e' sbagliato utilizzare
spatialite_gui, casomai dovresti usare spatialite.exe;
ma anche in questo caso stai usando la sintassi
sbagliata.
il path del datatabase-file e' un argomento di
invocazione, ma il path dello script lo devi
passare come redirezione dello standard input;
invece come lo stai passando tu diventa
semplicemente un ulteriore argomento, e viene
semplicemente ignorato.
la sintassi corretta (sia su Windows che su Linux)
e' questa qua:

spatialite db_toto_2.sqlite  <mysqlscript.sql

in cui quel segno "minore" davanti al path dello
SQL script serve proprio per ridirigere lo
standard input del processo.
in soldoni: stai semplicemente chiedendo al
comando spatialite.exe di leggere i comandi
SQL da un file (lo script, appunto) invece
che dalla tastiera come normalmente accade;
qundo l'ultimo dei comandi presenti nello
SQL script spatialite.exe terminera'.

ovviamente questo "barbatrucco" non potra' mai
funzionare con un'applicazione GUI, semplicemente
perche' nell'ambiente GUI non esiste proprio il
concetto di uno standard input associato al processo.

ultima osservazione: se proprio ritieni
indispensabile utilizzare la GUI anche per
eseguire gli SQL script lo puoi comunque
fare (anche se non ha molto senso).
se cerchi bene tra i vari pulsanti della
toolbar vedrai che e' presente un pulsantino
"execute SQL script"

ciao Sandro




Maggiori informazioni sulla lista Gfoss