Da PostGIS a SpatiaLite

Dopo anni mi vengono chiesti i dati di un vecchio censimento che realizzai utilizzando un database PostgreSQL con estensione spaziale PostGIS, quindi nasce l’esigenza di esportare tutti le tabelle in un database spatialite che, tra l’altro, deve rispettare la suddivisione in due schemi presenti del database postgresql. Subito trovo un bel articolo che fa al caso mio dal titolo ‘da PostGIS a Spatialite‘ scritto da Flavio Rigolon nel 2010.

Modifico leggermente lo script suggerito dall’articolo e, dopo aver letto un pò sulle librerie ogr2ogr,  utilizzo il seguente script:


ogr2ogr –config PG_LIST_ALL_TABLES YES –config PG_SKIP_VIEWS NO -f “SQLite” nome_database.sqlite -progress PG:”dbname=’nome_database_pg’ active_schema=public,data_2015 schemas=public,data_2015 host=’localhost’ port=’5432′ user=’postgres’ password=’*********’ ” -lco LAUNDER=yes -dsco SPATIALITE=yes -lco SPATIAL_INDEX=no

view raw

da_pg_a_sl.txt

hosted with ❤ by GitHub

avvio la shell MSYS, installata assieme a QGIS (OSGeo4W), ed incollo lo script di sopra, in meno di 5 secondi ottengo il nuovo database spatialite con tutte le tabelle, wow!!!

N6
msys

Diversamente da quanto descritto nell’articolo di Rigolon (scritto nel 2010), lo script funziona benissimo e non occorre fare ulteriori modifiche, il db.sqlite funziona benissimo in QGIS!!!

 

Buon lavoro!!!

Pubblicità

2 pensieri su “Da PostGIS a SpatiaLite

  1. Veramente interessante l’argomento!
    Ho dovuto mettere le mani nella marmellata per tentare di esportare da Postgresql a Spatialite.
    Mi è riuscita “abbastanza” bene l’esportazione, (a parte un intoppo nel file di output Spatialite che ho dovuto fare un “update geometry_columns set geometry_type = nr_int where f_table_name = nometabella”, per il resto poi è filato liscio). Devo ancora capire bene come fare un output pulito al 100%.
    Dovendo fare un’esportazione periodica, ho creato un file BAT che fa il 99% del “lavoro sporco” 🙂
    Riporto il codice qui sotto che basta copiare e incollare in notepad e salvare come *.BAT

    @echo off
    title — DA POSTGRESQL A SPATIALITE —
    color 0D
    echo.
    echo Ciao!
    echo Oggi esporto in Spatialite vari layers del catasto.
    echo.
    echo.
    echo NOTA BENE!
    echo Dopo la creazione del db sqlite, bisogna ricreare (a motivo del bug di ogr2ogr) le colonne delle geometrie dei relativi layers in ambiente spatialite.
    echo Troverai al termine del processo il nuovo db sqlite e un file TXT con dentro il codice di intervento POST-CREAZIONE da applicare manualmente.
    echo.
    echo.
    pause

    if not exist “C:\_PG_TO_FILES\SQLITE\” mkdir “C:\_PG_TO_FILES\SQLITE\”

    ::call “C:\OSGeo4W64\bin\o4w_env.bat”
    call “C:\Programmi\QGIS 3.8\bin\o4w_env.bat”

    ::CATASTO
    ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, pt_ccat as cc, pt_code as num, pt_type, pt_fabb from cat.vl_parcel_poly” -dsco SPATIALITE=YES -lco GEOMETRY_NAME=geo -lco LAUNDER=YES -nln catasto

    ::CATASTO RIGHT POLY
    ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, rp_ccat as cc, rp_code as num, rp_type from cat.vl_right_poly” -lco GEOMETRY_NAME=geo -nln catasto_right_poly

    ::FIX POINTS
    ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, fp_ccat, fp_code, fp_ccode, fp_attend, fp_q_orto, fp_q_elli, fp_geog_fi, fp_geog_la, fp_utm_e, fp_utm_n from cat.fix_points” -lco GEOMETRY_NAME=geo -nln punti_fiduciali

    ::LOCAL NAME
    ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, ln_ccat, ln_text, ln_angle from cat.vl_local_name” -lco GEOMETRY_NAME=geo -nln nomi_locali

    echo update geometry_columns set geometry_type = 6 where f_table_name in (‘catasto’,’catasto_right_poly’); update geometry_columns set geometry_type = 1 where f_table_name in (‘punti_fiduciali’,’nomi_locali’); > C:\_PG_TO_FILES\SQLITE\Applicami!.txt

    echo.
    echo.
    echo.
    echo Wow fatto! 🙂
    echo Il db sqlite si trova in “C:\_PG_TO_FILES\SQLITE\”
    start C:\_PG_TO_FILES\SQLITE\
    echo.
    echo Premi un tasto qualsiasi per uscire …
    pause>nul

    Piace a 1 persona

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.