User Tools

Site Tools


tecnica:gps_cartografia_gis:gdal_oracle

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
Last revision Both sides next revision
tecnica:gps_cartografia_gis:gdal_oracle [2009/05/18 15:47]
niccolo
tecnica:gps_cartografia_gis:gdal_oracle [2010/06/01 10:58]
niccolo
Line 1: Line 1:
-====== GDAL/OGR su Debian GNU/Linux con supporto ad Oracle Spatial ======+====== GDAL/OGR con supporto ad Oracle su Debian GNU/Linux ====== 
 + 
 +Questa ricetta serve a compilare la libreria GDAL/OGR con il supporto ad Oracle su una Debian Lenny. 
 + 
 +Il supporto viene chiamato **OCI** (Oracle Call Interface) e viene fornito dal software Oracle Instantclient. Per la compilazione di GDAL è necessario anche il relativo Oracle Instantclient SDK. 
 + 
 +I passaggo sono i seguenti: 
 + 
 +  - **Trasformazione** dei pacchetti **rpm** forniti da Oracle in pacchetti **deb**. 
 +  - Installazione di Oracle Instantclient e relativo SDK. 
 +  - Compilazione di **gdal** con supporto **oci** dai sorgenti Debian. 
 +  - Intallazione dei pacchetti compilati.
  
 ===== Installazione di Oracle Instantclient ===== ===== Installazione di Oracle Instantclient =====
Line 27: Line 38:
 </code> </code>
  
-===== Compilare GDAL/OGR =====+La conversione da rpm a deb non suggerisce le dipendenze, bisogna installare manualmente il pacchetto Debian **libaio1**: 
 + 
 +<code> 
 +apt-get install libaio1 
 +</code> 
 + 
 +===== Compilare GDAL/OGR come pacchetto Debian =====
  
 Installare i pacchetti di sviluppo Debian, una selezione minima potrebbe essere: Installare i pacchetti di sviluppo Debian, una selezione minima potrebbe essere:
Line 51: Line 68:
 </file> </file>
  
-Le Debian rules (gdal 1.5.2-3) cercano la libreria Oracle **nnz10**, mentre attualmente esiste la libreria **nnz11**; sistemare con un link simbolico:+Le Debian rules cercano la libreria Oracle **nnz10** (almeno per gdal 1.5.2-3), mentre attualmente esiste la libreria **nnz11**; sistemare con un link simbolico:
  
 <code> <code>
Line 60: Line 77:
  
 <code> <code>
-dpkg-buildpackage -rfakeroor+dpkg-buildpackage -rfakeroot
 </code> </code>
  
 La libreria GDAL richiede la presenza di molte librerie e per la sua compilazione sono richiesti i rispettivi header file. Per fortuna ''dpkg-buildpackage'' elenca **tutti i pacchetti necessari** (le //**build dependencies**//) non appena viene lanciato. Si deve provvedere ad installare tutti i pacchetti richiesti. La libreria GDAL richiede la presenza di molte librerie e per la sua compilazione sono richiesti i rispettivi header file. Per fortuna ''dpkg-buildpackage'' elenca **tutti i pacchetti necessari** (le //**build dependencies**//) non appena viene lanciato. Si deve provvedere ad installare tutti i pacchetti richiesti.
  
 +Al termine della compilazione, nella directory padre si trovano i pacchetti:
 +
 +  * **gdal-bin**
 +  * **libgdal1-1.5.0**
 +  * **libgdal1-dev**
 +  * **libgdal-doc**
 +  * **libgdal-perl**
 +  * **libgdal-ruby**
 +  * **libgdal-ruby1.8**
 +  * **python-gdal**
 +
 +===== Installazione e verifica =====
 +
 +Si installano almeno i pacchetti **''gdal-bin''** e **''libgdal1-1.5.0''**. Conviene metterli //on-hold// per evitare che vengano aggiornati:
 +
 +<code>
 +echo "libgdal1-1.5.0 hold" | dpkg --set-selections 
 +echo "gdal-bin hold"       | dpkg --set-selections 
 +</code>
 +
 +Per verificare che la libreria installata abbia il supporto Oracle:
 +
 +<code>
 +ldd /usr/lib/libgdal1.5.0.so | grep oracle
 +ogrinfo --formats
 +</code>
 +
 +Una layer OGR/Oracle su MapServer si ottiene con un mapfile del tipo:
 +
 +<file>
 +  LAYER
 +    NAME "aree_strada"
 +    STATUS DEFAULT
 +    TYPE POLYGON
 +    CONNECTIONTYPE OGR
 +    CONNECTION "OCI:username/passwd@192.168.1.122"
 +    DATA "tablename"
 +    CLASS
 +      COLOR 212 164 96
 +    END
 +  END
 +</file>
 +
 +La stringa di connessione è composta come segue:
 +
 +<code>
 +OCI:username/passwd@host:port/service_name"
 +</code>
 +
 +Il server Oracle risponde sulla porta **1521 TCP**.
 +
 +Un esempio di **interrogazione SQL** con ''ogrinfo'':
 +
 +<code>
 +ogrinfo "OCI:username/passwd@host:port/service_name" \
 +    -sql 'SELECT TOPONIMO_STRADA FROM REPLICA_TOPONOMASTICA.TOP_CIVICI'
 +</code>
 +
 +===== Charset encoding =====
 +
 +Per determinare il charset utilizzato dalla libreria OCI si imposta la variabile d'ambiente **''NLS_LANG''**:
 +
 +<code>
 +export NLS_LANG=italian_italy.UTF8
 +</code>
 +
 +Tale configurazione è fondamentale ad esempio quando si importano dati da Oracle a PostgreSQL con **''ogr2ogr''** e il charset originale non coincide con quello desiderato.
 +
 +Per vedere il charset utilizzato da Orcale:
 +
 +<code sql>
 +SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
 +</code>
 +<code>
 +PARAMETER            VALUE
 +-------------------- -----------------
 +NLS_CHARACTERSET     WE8ISO8859P1
 +</code>
 +
 +È probabile che sia necessario impostare anche la variabile **''NLS_NUMERIC_CHARACTERS''** che definisce il carattere separatore dei decimali e il carattere di raggruppamento delle migliaia (il punto decimale e la virgola per gli anglosassoni, la virgola decimale e il punto per l'Italia):
 +
 +<code>
 +export NLS_NUMERIC_CHARACTERS=".,"
 +</code>
 +
 +Per sapere quale convenzione utilizza Oracle è sufficiente fare il dump della tabella con ''ogrinfo'' e visualizzare il contenuto:
 +
 +<code>
 +ogrinfo 'OCI:username/password@hostname:port/instance:tablename' geom_feature > tablename.dump
 +</code>
tecnica/gps_cartografia_gis/gdal_oracle.txt · Last modified: 2010/10/25 14:41 by niccolo