Bagaimana cara menentukan bidang yang akan diekspor dari QGIS?

9

Saya menggunakan QGIS 2.0.1 dan terhubung ke database MS SQL Server yang diaktifkan secara spasial (bukan ESRI). Saya dapat terhubung ke layer dan memuatnya ke dalam TOC saya dengan baik. Saya telah menyembunyikan sejumlah bidang yang tidak penting demi visibilitas.

Sekarang saya ingin mengekspor data itu ke tipe data lain (kami akan menggunakan shapefile untuk contoh ini). Ketika saya klik kanan layer, pilih "Save As" dan tentukan file output, saya mendapatkan kesalahan berikut:

Gagal mengekspor ke file vektor. Kesalahan: jenis tidak didukung untuk bidang GlobalID

Catatan 1 : Jika saya mencentang "Lewati pembuatan atribut" di kotak dialog, shapefile dibuat tanpa kesalahan.

Catatan 2 : ArcGIS tidak memiliki masalah ini, hanya mengubah bidang GUID ke tipe "TEXT".

Melihat tabel, salah satu bidang yang saya sembunyikan adalah GUID tipe SQL < uniqueidentifier >, yang kemungkinan besar adalah pelakunya. Dalam upaya untuk menyelesaikan ini, saya membuat bidang "tersembunyi". Saya akan berasumsi bahwa karena bidangnya disembunyikan, QGIS tidak akan mencoba untuk mengekspor bidang ini, tetapi ternyata tidak demikian.

Bisakah Anda menentukan bidang yang ingin Anda ekspor dari QGIS?

Apakah mungkin bagi QGIS untuk mengekspor hanya bidang "Terlihat"? Atau adakah cara alternatif lain untuk melakukan ini dari QGIS (mungkin mendefinisikan bidang melalui kueri ogr2ogr)? Ini tampak seperti kekurangan QGIS jika saya tidak dapat menentukan bidang mana yang akan diekspor.

UPDATE: Saya melakukan tes menggunakan sampel shapefile untuk melihat apakah saya dapat membatasi bidang output. Baris perintah ogr2ogr berikut bekerja dan menghapus semua bidang kecuali untuk "nama":

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

tetapi menggunakan QGIS dan menambahkan:

-sql "select name from city"

ke bagian "lapisan" pada dialog "Simpan Sebagai" tidak menghasilkan shapefile hanya dengan satu bidang. Jadi saya tidak benar-benar melihat bagaimana saya bisa memanipulasi output file untuk menunjukkan hanya beberapa bidang terpilih. Bantuan apa pun dihargai.

RyanKDalton
sumber
Jika ogr2ogr dapat melakukannya, QGIS dapat melakukannya, karena itulah alat yang berjalan di latar belakang. Sayangnya, saya tidak punya SQL Server db untuk menguji ...
underdark
Baik. Jadi saya mencoba menambahkan -sql "select <fields> from <table>"(tidak termasuk bidang GlobalID dari <fields>) ke bagian "Lapisan" dari dialog "Simpan Sebagai", tetapi kesalahan yang sama masih muncul. Apakah saya menyalahgunakan blok kode ini, atau ini bug?
RyanKDalton
jawaban ini menyarankan -pilih alih -sql gis.stackexchange.com/questions/30691/ ... ... Saya pikir itu masuk di bagian sumber data, bukan ke dalam lapisan.
underdark
Tidak beruntung bagi saya dengan salah satu saran Anda, saya juga mencoba beberapa kombinasi dari opsi-pilih & -sql di bidang "Lapisan" dan "Sumber Data" pada "Opsi pembuatan OGR" :( Tentunya, saya tidak bisa yang pertama dengan kebutuhan untuk mengekspor subset bidang ...
RyanKDalton
mungkin perlu diperiksa dengan pengembang. mungkin bug.
underdark

Jawaban:

1

Jika itu bekerja untuk Anda di baris perintah dengan ogr2ogr, saya pikir itu adalah solusi terbaik untuk menggunakannya. Anda dapat menulis file bat sederhana untuk membuat shapefile dari database MSSQL Anda. Jelas Anda tidak dapat mengedit data dan menyimpan kembali ke server dengan cara itu.

QGIS memiliki kotak input Sumber Data dan Lapisan, tetapi itu hanya untuk parameter -dsco dan -lco dari ogr2ogr. Driver OGR shapefile tidak memiliki dsco atau lco yang berguna untuk kebutuhan Anda:

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

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

Atau, mungkin untuk menulis plugin python yang meminta data dari server dengan perintah SQL SELECT sesuai kebutuhan Anda. Ini bahkan akan memungkinkan pengeditan data.

AndreJ
sumber
Sejauh ini sepertinya ide yang paling layak. Apakah ada cara untuk langsung memanggil ogr2ogr command-line dari antarmuka pengguna QGIS untuk memutar sintaks ogr2ogr Anda sendiri?
RyanKDalton
Tidak secara langsung. Tetapi Anda dapat membajak terminal gdalwarp untuk memasukkan perintah ogr2ogr Anda di sana. Anda mendapatkan kesalahan bahwa layer tidak dibuat, tetapi itu tetap ada di sistem file. Tidak yakin apa yang terjadi jika file sudah ada, jadi lebih baik tambahkan -tulis juga. Dan lebih baik gunakan nama path lengkap untuk file.
AndreJ
Atau, apakah Anda pernah mencoba menggunakan file virtual GDAL VRT sebagai mediator antara MSSQL dan QGIS?
AndreJ
Saya belum, tetapi bukankah GDAL bekerja dengan raster? Saya bekerja dengan layer vektor titik. Saya suka ide "tabel virtual" sebagai perantara. Bukankah QGIS 2 memiliki lapisan dalam memori yang dapat kami tulis?
RyanKDalton
1
Ada juga driver ogrvrt GDAL: gdal.org/ogr/drv_vrt.html . Tapi saya pikir ini harus lebih baik diajukan ke pertanyaan lain.
AndreJ
0

Saya akan menyarankan Anda untuk memeriksa tabel atribut untuk layer di TOC dan jika bidang GlobalID ada. Beralih ke mode edit, hapus kolom yang menciptakan masalah selama ekspor dan tutup jendela. Kemudian simpan sebagai shapefile atau format output apa pun yang Anda inginkan. Saya harap ini membantu.

Farhat Abbas
sumber
1
Saya tidak yakin apakah menghapus bidang dalam tabel SQL Server adalah pilihan yang baik. Mungkin masih dibutuhkan oleh server.
AndreJ
Saya pikir menghapus kolom atribut dari QGIS TOC Layer menyimpan struktur yang diperbarui dalam buffer QGIS dan memungkinkan Anda untuk mengekspor file dalam format lain. setelah Anda selesai ekspor, jangan menyimpan perubahan pada layer (apa yang telah Anda hapus)
Farhat Abbas