Wie gebe ich Felder an, die aus QGIS exportiert werden sollen?

9

Ich verwende QGIS 2.0.1 und bin mit einer räumlich aktivierten MS SQL Server-Datenbank (nicht ESRI) verbunden. Ich kann mich mit der Ebene verbinden und sie problemlos in mein Inhaltsverzeichnis laden. Ich habe eine Reihe von Feldern ausgeblendet, die für die Sichtbarkeit nicht wichtig sind.

Jetzt möchte ich diese Daten in einen anderen Datentyp exportieren (in diesem Beispiel wird Shapefile verwendet). Wenn ich mit der rechten Maustaste auf die Ebene klicke, "Speichern unter" wähle und die Ausgabedatei definiere, wird folgende Fehlermeldung angezeigt:

Export in Vektordatei fehlgeschlagen. Fehler: Nicht unterstützter Typ für das Feld GlobalID

Hinweis 1 : Wenn ich im Dialogfeld die Option "Attributerstellung überspringen" aktiviere, wird das Shapefile fehlerfrei erstellt.

Hinweis 2 : ArcGIS hat dieses Problem nicht. Es konvertiert lediglich das GUID-Feld in den Typ "TEXT".

In der Tabelle ist eines der Felder, die ich ausgeblendet habe, eine GUID vom SQL-Typ < eindeutige Kennung >, die höchstwahrscheinlich der Schuldige ist. Um dies zu beheben, habe ich das Feld "versteckt" gemacht. Ich hätte angenommen, dass QGIS nicht versuchen würde, dieses Feld zu exportieren, da das Feld ausgeblendet war, aber dies stellte sich als nicht der Fall heraus.

Können Sie die Felder definieren, die Sie aus QGIS exportieren möchten?

Kann QGIS nur die "Sichtbaren" Felder exportieren? Oder gibt es eine andere alternative Möglichkeit, dies über QGIS zu tun (definieren Sie die Felder möglicherweise über eine ogr2ogr-Abfrage)? Dies scheint ein Mangel von QGIS zu sein, wenn ich nicht definieren kann, welche Felder exportiert werden sollen.

UPDATE: Ich habe einen Test mit einem Beispiel-Shapefile durchgeführt, um festzustellen, ob ich die Ausgabefelder einschränken kann. Die folgende ogr2ogr-Befehlszeile hat alle Felder außer "Name" bearbeitet und entfernt:

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

aber mit QGIS und Hinzufügen:

-sql "select name from city"

Der Abschnitt "Ebene" des Dialogfelds "Speichern unter" führte nicht zu einem Shapefile mit nur einem einzelnen Feld. Ich sehe also nicht wirklich, wie ich die Dateiausgabe so manipulieren kann, dass nur einige ausgewählte Felder angezeigt werden. Jede Hilfe wird geschätzt.

RyanKDalton
quelle
Wenn ogr2ogr das kann, kann QGIS das, denn genau das läuft im Hintergrund. Leider habe ich keine SQL Server-Datenbank zum Testen ...
underdark
Richtig. Also habe ich versucht -sql "select <fields> from <table>", dem "Layer" -Teil des "Save As" -Dialogs (ohne das GlobalID-Feld aus den <Feldern>) hinzuzufügen , aber der gleiche Fehler ist immer noch aufgetreten. Habe ich diesen Codeblock missbraucht oder ist das ein Fehler?
RyanKDalton
Diese Antwort schlägt vor, -select anstelle von -sql gis.stackexchange.com/questions/30691/… ... Ich denke, es geht in den Datenquellenabschnitt, nicht in die Ebene.
Underdark
Kein Glück für mich mit einem Ihrer Vorschläge. Ich habe auch mehrere Kombinationen der Optionen -select und -sql in den Feldern "Layer" und "Data Source" der "OGR-Erstellungsoptionen" ausprobiert :( Sicher kann ich nicht der erste mit der Notwendigkeit, eine Teilmenge von Feldern zu exportieren ...
RyanKDalton
Vielleicht lohnt es sich, sich bei den Entwicklern zu erkundigen. könnte ein Fehler sein.
Underdark

Antworten:

1

Wenn es für Sie in der Befehlszeile mit ogr2ogr funktioniert, ist es meiner Meinung nach die beste Lösung, dies zu verwenden. Sie können eine einfache Bat-Datei schreiben, um ein Shapefile aus Ihrer MSSQL-Datenbank zu erstellen. Natürlich können Sie die Daten nicht bearbeiten und auf diese Weise auf dem Server speichern.

QGIS verfügt über die Eingabefelder Datenquelle und Ebene, diese gelten jedoch nur für die Parameter -dsco und -lco von ogr2ogr. Der OGR-Shapefile-Treiber hat kein nützliches dsco oder lco für Ihre Anforderungen:

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

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

Alternativ sollte es möglich sein, ein Python-Plugin zu schreiben, das die Daten vom Server mit einem SQL SELECT-Befehl nach Ihren Anforderungen anfordert. Dies würde sogar die Datenbearbeitung ermöglichen.

AndreJ
quelle
Bisher scheint dies die realisierbarste Idee zu sein. Gibt es eine Möglichkeit, die ogr2ogr-Befehlszeile direkt über die QGIS-Benutzeroberfläche aufzurufen, um Ihre eigene ogr2ogr-Syntax zu erstellen?
RyanKDalton
Nicht direkt. Sie können jedoch das Terminal von gdalwarp entführen, um dort Ihren Befehl ogr2ogr einzugeben. Sie erhalten die Fehlermeldung, dass der Layer nicht erstellt wurde, sich aber trotzdem im Dateisystem befindet. Ich bin mir nicht sicher, was passiert, wenn die Datei bereits vorhanden ist. Fügen Sie daher besser -overwrite hinzu. Verwenden Sie besser die vollständigen Pfadnamen für die Dateien.
AndreJ
Haben Sie jemals versucht, eine virtuelle GDAL VRT-Datei als Vermittler zwischen MSSQL und QGIS zu verwenden?
AndreJ
Ich habe nicht, aber ist GDAL nicht für die Arbeit mit Rastern? Ich arbeite mit einer Punktvektorebene. Ich mag jedoch die Idee eines "virtuellen Tisches" als Vermittler. Hat QGIS 2 nicht eine In-Memory-Schicht, in die wir schreiben könnten?
RyanKDalton
1
Es gibt auch einen GDAL-Ogrvrt-Treiber: gdal.org/ogr/drv_vrt.html . Aber ich denke, das sollte besser in eine andere Frage gestellt werden.
AndreJ
0

Ich würde vorschlagen, dass Sie die Attributtabelle auf Layer im Inhaltsverzeichnis überprüfen und ob das GlobalID-Feld vorhanden ist. Wechseln Sie in den Bearbeitungsmodus, entfernen Sie die Spalte, die das Problem beim Export verursacht, und schließen Sie das Fenster. Speichern Sie dann als Shapefile oder in einem beliebigen Ausgabeformat. Ich hoffe das hilft.

Farhat Abbas
quelle
1
Ich bin mir nicht sicher, ob das Löschen des Felds in der SQL Server-Tabelle eine gute Wahl ist. Möglicherweise wird es vom Server noch benötigt.
AndreJ
Ich denke, das Löschen einer Attributspalte aus dem QGIS TOC Layer speichert die aktualisierte Struktur im QGIS-Puffer und ermöglicht Ihnen das Exportieren von Dateien in einem anderen Format. Sobald Sie den Export beendet haben, speichern Sie keine Änderungen an der Ebene (was Sie gelöscht haben)
Farhat Abbas