[Gfoss] Connessione a SQL Server

Salve a tutti,
sto cercando di creare in QGIS una connessione dinamica ad un database SQL Server 8; attraverso la connessione ODBC presente nella funzione ‘Aggiungi vettore’, la procedura mi permette di selezionare l’origine dati ODBC configurata nel Pannello di controllo (Strumenti di amministrazione), si connette al database, mi permette di selezionare la tabella o la vista da visualizzare, ma viene aggiunto un layer non georiferito, benchè siano presenti le colonne X e Y. E’ possibile visualizzare la tabella attributi ma nn si riesce a spazializzarlo. Interrogando le proprietà (Metadati) compaiono le seguenti informazioni:



Generale:



Tipo di archiviazione per questo layer : ODBC



Sorgente per questo layer : ODBC:WEBGIS/@srv09


Tipo di geometrie per gli elementi in questo layer : Unknown geometry



Numero di elementi presenti in questo layer: 1329



Possibilità di modifica per questo layer : Accesso veloce agli elementi all’ID



Estensione:



Unità del sistema di riferimento spaziale usato nel layer : Empty



Sistema di Riferimento Spaziale del layer:



+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs

Perchè non si riesce a georeferirlo? La procedura si aspetta un diverso nome delle colonne? si aspetta delle colonne con l’indicazione del tipo di geometria da rappresentare? Oppure manca la parte per specificare le colonne X e Y come nel plugin ‘Crea un layer da un file di testo delimitato’?
Ho provato con la connessione database Evis e si riesce a effettuare la connessione e a vedere i dati georeferiti ma salvando il progetto non rimane la connessione dinamica con i dati e quindi bisogna rifare la connessione ogni volta che si vogliono visualizzare dati ‘freschi’.

Suggerimenti?

Grazie, DieGo


Colla Diego
Arpa Piemonte
Dipartimento Tematico Radiazioni
Via Jervis 30
10025 Ivrea (TO)
tel: +39 0125 6453540
fax: +39 0125 6453584
diego.colla@arpa.piemonte.it
www.arpa.piemonte.it


Riservatezza/Confidentiality

In ottemperanza al D.Lgs. n. 196 del 30/06/03 in materia di protezione
dei dati personali, le informazioni contenute in questo messaggio sono
strettamente riservate ed esclusivamente indirizzate al destinatario
indicato (oppure alla persona responsabile di rimetterlo al
destinatario). Vogliate tener presente che qualsiasi uso, riproduzione o
divulgazione di questo messaggio sono vietati. Nel caso in aveste
ricevuto questo messaggio per errore, vogliate cortesemente avvertire il
mittente e distruggere il presente messaggio.

According to italian law D.lgs. 196/2003 concerning privacy, if you are
not the addressee (or responsible for delivery of the message to such
person) you are hereby notified that any disclosure, reproduction,
distribution or other dissemination or use of this communication is
strictly prohibited. If you have received this message in error, please
destroy it and notify us by email.

2011/11/23 Colla Diego <diego.colla@arpa.piemonte.it>

Salve a tutti,
sto cercando di creare in QGIS una connessione dinamica ad un database SQL Server 8; attraverso la connessione ODBC presente nella funzione 'Aggiungi vettore', la procedura mi permette di selezionare l'origine dati ODBC configurata nel Pannello di controllo (Strumenti di amministrazione), si connette al database, mi permette di selezionare la tabella o la vista da visualizzare, ma viene aggiunto un layer non georiferito, benchè siano presenti le colonne X e Y. E' possibile visualizzare la tabella attributi ma nn si riesce a spazializzarlo. Interrogando le proprietà (Metadati) compaiono le seguenti informazioni:

Ciao

non ho tempo di provare ne conosco le modalita' di collegamento di
QGIS con data sources ODBC, ma vado a naso.
Immagino che QGIS sfrutti il driver ODBC RDBMS di GDAL [1].
Da una rapida scorsa alla documentazione indicata, devi avere sul tuo
db una tabella GEOMETRY_COLUMNS che immagino tu non abbia, altrimenti
tutte le tabelle non saranno spazializzate.

All'interno di tale tabella devi aggiungere un record per ogni tabella
spaziale presente sul tuo database.
Segui comunque in maniera pedissequa le istruzioni presenti.

NB: e' un driver in sola lettura, quindi non potrai fare editing

ciao
P

[1] http://www.gdal.org/ogr/drv_odbc.html

--
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti

2011/11/23 Paolo Corti <pcorti@gmail.com>:

2011/11/23 Colla Diego <diego.colla@arpa.piemonte.it>

Salve a tutti,
sto cercando di creare in QGIS una connessione dinamica ad un database SQL Server 8; attraverso la connessione ODBC presente nella funzione 'Aggiungi vettore', la procedura mi permette di selezionare l'origine dati ODBC configurata nel Pannello di controllo (Strumenti di amministrazione), si connette al database, mi permette di selezionare la tabella o la vista da visualizzare, ma viene aggiunto un layer non georiferito, benchè siano presenti le colonne X e Y. E' possibile visualizzare la tabella attributi ma nn si riesce a spazializzarlo. Interrogando le proprietà (Metadati) compaiono le seguenti informazioni:

Ciao

non ho tempo di provare ne conosco le modalita' di collegamento di
QGIS con data sources ODBC, ma vado a naso.
Immagino che QGIS sfrutti il driver ODBC RDBMS di GDAL [1].
Da una rapida scorsa alla documentazione indicata, devi avere sul tuo
db una tabella GEOMETRY_COLUMNS che immagino tu non abbia, altrimenti
tutte le tabelle non saranno spazializzate.

All'interno di tale tabella devi aggiungere un record per ogni tabella
spaziale presente sul tuo database.
Segui comunque in maniera pedissequa le istruzioni presenti.

NB: e' un driver in sola lettura, quindi non potrai fare editing

ciao
P

[1] http://www.gdal.org/ogr/drv_odbc.html

Ho riletto bene la tua domanda, in effetti non stai usando SQL Server
col formato spaziale come pensavo, quindi non hai una colonna
geometrica, bensi una colonna per le x ed una per le y e la soluzione
precedente non e' applicabile.

Una cosa che potresti provare pero' e' la seguente: aggiungi una
colonna testo sulla tabella (o crea una vista con una nuova colonna).
La nuova colonna deve presentare le coordinate in formato wkt [1].
Ad es per un punto con X=10, Y=20, la nuova colonna dovrebbe essere
valorizzata a 'POINT (10 20)'.

Potresti ad es creare una vista con la seguente query (concettuale,
non ho modo di provarla su SQL Server:

CREATE MYVIEW AS
SELECT COL1, COL2, 'POINT (' + COLX + ' ' + COLY + ')' AS GEOMETRY FROM MYTABLE

A questo punto aggiungi il record in questione sulla tabella GEOMETRY_COLUMNS.
Da quanto riportato sulla documentazione potrebbe ssere sufficiente
usare il parametro table_list, senza necessita' di creare la tabella
GEOMETRY_COLUMNS.

Facci sapere il risultato :wink:
P

[1] http://en.wikipedia.org/wiki/Well-known_text

--
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti

Ciao e grazie mille con le tue indicazioni e l’aiuto del documento http://www.gdal.org/ogr/drv_odbc.html
siamo riusciti a collegarci dinamicamente ad un db SQL Server, tramite la connessione ODBC della funzione Aggiungi Vettore.

Praticamente ho aggiunto alla vista da visualizzare una colonna GEOMETRY. In questa colonna ho fatto scrivere la stringa ‘POINT (’ + COLX + ’ ’ + COLY + ‘)’ dove COLX e COLY sono i campi contenenti le coordinate. In realtà, per problemi di sintassi, nella concatenazione ho dovuto trasformare i campi coordinate in stringa ed eliminare gli spazi in più. Questa è la query che ho utilizzato per la mia vista:

SELECT Provincia, Comune, TIPO_VIA + ’ ’ + NOME_VIA + ’ ’ + N_CIVICO AS INDIRIZZO, Minimo, Massimo, Medio, Dt_Installazione, DT_Prelevamento, UTMX_CENTR AS X, UTMY_CENTR AS Y, ‘POINT (’ + LTRIM(STR(UTMX_CENTR)) + ’ ’ + LTRIM(STR(UTMY_CENTR)) + ‘)’ AS GEOMETRY
FROM dbo.TBL_INTERVENTI
WHERE (UTMX_CENTR > 0) AND (UTMY_CENTR > 0)

Poi ho creato una nuova tabella geometry_columns

CREATE TABLE geometry_columns ( f_table_catalog     VARCHAR(18),
                                f_table_schema      VARCHAR(18) NOT NULL,
                                f_table_name        VARCHAR(18) NOT NULL,
                                f_geometry_column   VARCHAR(18) NOT NULL,
                                srid                INTEGER NOT NULL,
                                storage_type        INTEGER NOT NULL,
                                geometry_type       INTEGER NOT NULL,
                                coord_dimension     INTEGER NOT NULL,
                                max_ppr             INTEGER NOT NULL)

e vi ho inserito le informazioni richieste. In particolare il nome della tabella/vista da visualizzare, il nome della colonna che contiene la geometria nella mia tabella/vista ed il tipo di geometria rappresentata. Queste sono tutte le informazioni inserite:

‘’,‘db_emittenti’,‘QGIS_CENTRALINE’,‘GEOMETRY’,1978,0,1,2,10

Così facendo si riesce a avere spazializzata la vista del db e man mano che vengono aggiunti record alla vista questi possono essere visualizzati immediatamente.

Alessandro e Diego


2011/11/23 Paolo Corti pcorti@gmail.com:

2011/11/23 Colla Diego diego.colla@arpa.piemonte.it

Salve a tutti,
sto cercando di creare in QGIS una connessione dinamica ad un database SQL Server 8; attraverso la connessione ODBC presente nella funzione ‘Aggiungi vettore’, la procedura mi permette di selezionare l’origine dati ODBC configurata nel Pannello di controllo (Strumenti di amministrazione), si connette al database, mi permette di selezionare la tabella o la vista da visualizzare, ma viene aggiunto un layer non georiferito, benchè siano presenti le colonne X e Y. E’ possibile visualizzare la tabella attributi ma nn si riesce a spazializzarlo. Interrogando le proprietà (Metadati) compaiono le seguenti informazioni:

Ciao

non ho tempo di provare ne conosco le modalita’ di collegamento di
QGIS con data sources ODBC, ma vado a naso.
Immagino che QGIS sfrutti il driver ODBC RDBMS di GDAL [1].
Da una rapida scorsa alla documentazione indicata, devi avere sul tuo
db una tabella GEOMETRY_COLUMNS che immagino tu non abbia, altrimenti
tutte le tabelle non saranno spazializzate.

All’interno di tale tabella devi aggiungere un record per ogni tabella
spaziale presente sul tuo database.
Segui comunque in maniera pedissequa le istruzioni presenti.

NB: e’ un driver in sola lettura, quindi non potrai fare editing

ciao
P

[1] http://www.gdal.org/ogr/drv_odbc.html

Ho riletto bene la tua domanda, in effetti non stai usando SQL Server
col formato spaziale come pensavo, quindi non hai una colonna
geometrica, bensi una colonna per le x ed una per le y e la soluzione
precedente non e’ applicabile.

Una cosa che potresti provare pero’ e’ la seguente: aggiungi una
colonna testo sulla tabella (o crea una vista con una nuova colonna).
La nuova colonna deve presentare le coordinate in formato wkt [1].
Ad es per un punto con X=10, Y=20, la nuova colonna dovrebbe essere
valorizzata a ‘POINT (10 20)’.

Potresti ad es creare una vista con la seguente query (concettuale,
non ho modo di provarla su SQL Server:

CREATE MYVIEW AS
SELECT COL1, COL2, ‘POINT (’ + COLX + ’ ’ + COLY + ‘)’ AS GEOMETRY FROM MYTABLE

A questo punto aggiungi il record in questione sulla tabella GEOMETRY_COLUMNS.
Da quanto riportato sulla documentazione potrebbe ssere sufficiente
usare il parametro table_list, senza necessita’ di creare la tabella
GEOMETRY_COLUMNS.

Facci sapere il risultato :wink:
P

[1] http://en.wikipedia.org/wiki/Well-known_text


Colla Diego
Arpa Piemonte
Dipartimento Tematico Radiazioni
Via Jervis 30
10015 Ivrea (TO)
tel: +39 0125 6453540
fax: +39 0125 6453584
diego.colla@arpa.piemonte.it
www.arpa.piemonte.it