Come specificare i campi da esportare da QGIS?


9

Sto usando QGIS 2.0.1 e sono collegato a un database abilitato spazialmente MS SQL Server (non ESRI). Sono in grado di connettermi al livello e caricarlo nel mio sommario bene. Ho nascosto un numero di campi che non sono importanti per motivi di visibilità.

Ora voglio esportare quei dati in un altro tipo di dati (useremo shapefile per questo esempio). Quando faccio clic con il pulsante destro del mouse sul livello, scelgo "Salva con nome" e definisco il file di output, viene visualizzato il seguente errore:

Esportazione in un file vettoriale non riuscita. Errore: tipo non supportato per il campo GlobalID

Nota 1 : Se seleziono "Salta creazione attributo" nella finestra di dialogo, lo shapefile viene creato senza errori.

Nota 2 : ArcGIS non presenta questo problema, converte semplicemente il campo GUID nel tipo "TEXT".

Guardando la tabella, uno dei campi che ho nascosto è un GUID di tipo SQL < uniqueidentifier >, che è probabilmente il colpevole. Nel tentativo di risolvere questo, ho reso il campo "nascosto". Avrei supposto che, poiché il campo era nascosto, QGIS non avrebbe tentato di esportare questo campo, ma non si è rivelato il caso.

Puoi definire i campi che vuoi esportare da QGIS?

È possibile per QGIS esportare solo i campi "Visibili"? Oppure esiste un altro modo alternativo per farlo da QGIS (forse definire i campi tramite una query ogr2ogr)? Questo sembra un difetto di QGIS se non riesco a definire quali campi esportare.

AGGIORNAMENTO: ho eseguito un test utilizzando uno shapefile di esempio per vedere se potevo limitare i campi di output. La seguente riga di comando ogr2ogr ha funzionato ed eliminato tutti i campi tranne "nome":

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

ma usando QGIS e aggiungendo:

-sql "select name from city"

nella sezione "layer" della finestra di dialogo "Salva con nome" non ha prodotto un file di forma con solo il campo singolo. Quindi non vedo davvero come posso manipolare l'output del file per mostrare solo alcuni campi selezionati. Qualsiasi aiuto è apprezzato.


Se ogr2ogr può farlo, QGIS può farlo, perché è esattamente lo strumento in esecuzione in background. Sfortunatamente, non ho alcun db di SQL Server da testare ...
underdark

Giusto. Quindi ho provato ad aggiungere -sql "select <fields> from <table>"(escludendo il campo GlobalID da <campi>) alla parte "Livello" della finestra di dialogo "Salva con nome", ma lo stesso errore è ancora apparso. Ho utilizzato in modo improprio questo blocco di codice o è un bug?
RyanKDalton,

questa risposta suggerisce -seleziona invece di -sql gis.stackexchange.com/questions/30691/… ... Penso che vada nella sezione dell'origine dati, non nel livello.
underdark

Non ho avuto fortuna con nessuno dei tuoi suggerimenti. Ho anche provato più combinazioni di entrambe le opzioni -select e -sql in entrambi i campi "Livello" e "Origine dati" delle "Opzioni di creazione OGR" :( Sicuramente, non posso essere il primo con la necessità di esportare un sottoinsieme di campi ...
RyanKDalton,

potrebbe valere la pena verificare con gli sviluppatori. potrebbe essere un bug.
underdark

Risposte:


1

Se funziona per te nella riga di comando con ogr2ogr, penso che sia la soluzione migliore per usarlo. Puoi scrivere un semplice file bat per creare uno shapefile dal tuo database MSSQL. Ovviamente non è possibile modificare i dati e salvare nuovamente sul server in questo modo.

QGIS ha le caselle di input Origine dati e Livello, ma quelle sono solo per i parametri -dsco e -lco di ogr2ogr. Il driver OGR shapefile non ha dsco o lco utili per le tue esigenze:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

In alternativa, dovrebbe essere possibile scrivere un plug-in Python che richiede i dati dal server con un comando SQL SELECT in base alle proprie esigenze. Ciò consentirebbe anche la modifica dei dati.


Finora questa sembra l'idea più fattibile. C'è un modo per chiamare direttamente la riga di comando di ogr2ogr dall'interfaccia utente di QGIS per eseguire il roll della tua sintassi di ogr2ogr?
RyanKDalton,

Non direttamente Ma puoi dirottare il terminale di gdalwarp per inserire il tuo comando ogr2ogr. Si ottiene un errore che il layer non viene creato, ma è comunque nel file system. Non sono sicuro di cosa succede se il file esiste già, quindi meglio aggiungere anche -overwrite. E meglio usare nomi di percorso completi per i file.
AndreJ,

In alternativa, hai mai provato a utilizzare un file virtuale GDAL VRT come mediatore tra MSSQL e QGIS?
AndreJ,

Non l'ho fatto, ma GDAL non lavora con raster? Sto lavorando con un livello punto vettoriale. Mi piace l'idea di una "tabella virtuale" come via di mezzo, però. QGIS 2 non ha un livello in memoria su cui scrivere?
RyanKDalton,

1
Esiste anche un driver ogrvrt GDAL: gdal.org/ogr/drv_vrt.html . Ma penso che questo dovrebbe porre meglio un'altra domanda.
AndreJ,

0

Vorrei suggerire di controllare la tabella degli attributi per il livello nel sommario e se esiste un campo GlobalID. Passa alla modalità di modifica, rimuovi la colonna che crea il problema durante l'esportazione e chiudi la finestra. Quindi salva come shapefile o qualunque formato di output desideri. Spero che questo possa essere d'aiuto.


1
Non sono sicuro che l'eliminazione del campo nella tabella di SQL Server sia una buona scelta. Potrebbe essere ancora necessario dal server.
AndreJ,

Penso che l'eliminazione di una colonna di attributi dal livello TOC di QGIS salvi la struttura aggiornata nel buffer QGIS e ti consenta di esportare file in altri formati. una volta terminata l'esportazione non salvare le modifiche al livello (ciò che hai eliminato)
Farhat Abbas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.