QGISからエクスポートするフィールドを指定するにはどうすればよいですか?


9

QGIS 2.0.1を使用していて、MS SQL Serverの空間対応データベース(ESRIではない)に接続しています。レイヤーに接続してTOCに問題なく読み込むことができます。見やすくするために重要ではないフィールドをいくつか隠しました。

次に、そのデータを別のデータ型にエクスポートします(この例ではシェープファイルを使用します)。レイヤーを右クリックして[名前を付けて保存]を選択し、出力ファイルを定義すると、次のエラーが発生します。

ベクターファイルへのエクスポートに失敗しました。エラー:フィールドGlobalIDでサポートされていないタイプ

注1:ダイアログボックスで[属性の作成をスキップ]をオンにすると、エラーなしでシェープファイルが作成されます。

注2:ArcGISにはこの問題はありません。GUIDフィールドを「TEXT」タイプに変換するだけです。

表を見ると、私が隠していることを分野の一つは、SQLタイプ<のGUIDであるuniqueidentifierで、すべてのlikelyhoodに犯人です>、。これを解決するために、フィールドを「非表示」にしました。フィールドが非表示になっているため、QGISがこのフィールドをエクスポートしようとはしなかったと思いましたが、そうではありませんでした。

QGISからエクスポートするフィールドを定義できますか?

QGISが「可視」フィールドのみをエクスポートすることは可能ですか?または、QGISからこれを行う別の代替方法はありますか(おそらくogr2ogrクエリを介してフィールドを定義します)?エクスポートするフィールドを定義できない場合、これはQGISの欠点のようです。

更新:サンプルシェープファイルを使用して、出力フィールドを制限できるかどうかをテストしました。次のogr2ogrコマンドラインが機能し、「name」以外のすべてのフィールドが削除されました。

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

QGISを使用して追加:

-sql "select name from city"

[名前を付けて保存]ダイアログの[レイヤー]セクションに、単一のフィールドのみを含むシェープファイルは作成されませんでした。そのため、ファイル出力を操作して、選択したいくつかのフィールドだけを表示する方法がわかりません。どんな助けでもありがたいです。


ogr2ogrがそれを実行できる場合、QGISを使用できます。これはまさにバックグラウンドで実行されているツールだからです。残念ながら、テストするSQL Server dbがありません...
アンダーダーク

正しい。そこで-sql "select <fields> from <table>"、[名前を付けて保存]ダイアログの[レイヤー]部分に(<fields>からGlobalIDフィールドを除外して)追加しようとしましたが、同じエラーがまだポップアップしました。このコードブロックを誤用しましたか、それともバグですか?
RyanKDalton 2013

この回答は、-sqlではなく-selectを示唆しています。gis.stackexchange.com/questions/30691 / …... レイヤーではなく、データソースセクションにあると思います。
アンダーダーク

私はあなたの提案のいずれでも運がありませんでした私はまた、「OGR作成オプション」の「レイヤー」フィールドと「データソース」フィールドの両方で-selectと-sqlオプションの両方の複数の組み合わせを試しました:(確かに、私はできませんフィールドのサブセットをエクスポートする必要がある最初の
バージョン

開発者に確認する価値があるかもしれません。バグかもしれません。
アンダーダーク

回答:


1

ogr2ogrを使用してコマンドラインで機能する場合は、それを使用するのが最善の解決策だと思います。単純なbatファイルを作成して、MSSQLデータベースからシェープファイルを作成できます。当然、データを編集してサーバーに保存することはできません。

QGISには[データソース]および[レイヤー]入力ボックスがありますが、これらはogr2ogrの-dscoおよび-lcoパラメーター専用です。OGRシェープファイルドライバーには、ユーザーのニーズに対応する便利なdscoまたはlcoがありません。

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

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

あるいは、必要に応じてSQL SELECTコマンドを使用してサーバーからのデータを要求するPythonプラグインを作成することもできます。これにより、データ編集も可能になります。


これまでのところ、これは最も実現可能なアイデアのようです。独自のogr2ogr構文をロールするために、QGISユーザーインターフェイスからogr2ogrコマンドラインを直接呼び出す方法はありますか?
RyanKDalton 2013年

直接ではありません。しかし、gdalwarpのターミナルをハイジャックして、そこにogr2ogrコマンドを入力することができます。レイヤーが作成されていないというエラーが表示されますが、ファイルシステムにあります。ファイルが既に存在する場合はどうなるかわからないため、-overwriteも追加することをお勧めします。また、ファイルにはフルパス名を使用することをお勧めします。
AndreJ 2013年

または、GDAL VRT仮想ファイルをMSSQLとQGISの間のメディエーターとして使用してみたことはありますか?
AndreJ 2013年

持っていませんが、GDALはラスターでの作業に適していませんか?ポイントベクターレイヤーで作業しています。でも私は仲介役として「仮想テーブル」のアイデアが好きです。QGIS 2には、書き込み可能なインメモリレイヤーがありませんか?
RyanKDalton 2013年

1
GDAL ogrvrtドライバーもあります:gdal.org/ogr/drv_vrt.html。しかし、これは別の質問に入れるべきだと思います。
AndreJ 2013年

0

TOCでレイヤーの属性テーブルを確認し、GlobalIDフィールドが存在するかどうかを確認することをお勧めします。編集モードに切り替え、エクスポート中に問題を引き起こす列を削除し、ウィンドウを閉じます。次に、シェープファイルまたは必要な出力形式で保存します。これがお役に立てば幸いです。


1
SQL Serverテーブルのフィールドを削除するのが適切かどうかはわかりません。それでもサーバーで必要になる場合があります。
AndreJ 2013年

QGIS TOCレイヤーから属性列を削除すると、更新された構造がQGISバッファーに保存され、ファイルを他の形式でエクスポートできるようになると思います。エクスポートが完了したら、レイヤーへの変更(削除したもの)を保存しないでください
Farhat Abbas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.