Membaca koneksi ODBC menggunakan QGIS? [Tutup]

16

Saya memiliki rekan kerja yang mengelola basis data MS Access besar yang berisi bidang X & Y untuk berbagai lokasi yang dilacaknya. Kami sebelumnya telah mengekspor data ke CSV dan menggunakan Plugin Teks Terbatas QGIS untuk memplot lokasi.

Kami sekarang ingin memplot data ini secara langsung di QGIS dengan menghubungkan ke MS Access db melalui koneksi ODBC (sebagai lawan dari ekspor ke CSV).

  1. Bisakah QGIS menggunakan data dari koneksi ODBC untuk memplot lokasi XY?
  2. Bisakah itu "terhubung langsung" ke koneksi ODBC sehingga ketika sebuah proyek dibuka kembali, layer "replots" semua lokasi lama dan baru ditambahkan secara dinamis (sebagai lawan dari mengekspor ke shapefile, yang akan membuat snapshot dalam waktu)?
  3. Bisakah Anda membuat koneksi ODBC tabel yang dapat digabungkan ke tabel spasial dalam QGIS?

Anda dapat melakukan semua ini di ArcGIS (alat "Tambahkan Data XY"), jadi alangkah baiknya jika kemampuan ini ada di QGIS. Saya tidak bisa menemukan tempat yang menyebutkan keberadaannya.

Saya tidak berencana untuk pindah ke basis data spasial. Sebagai orang GIS sendiri, ya saya tahu masuk akal untuk pindah ke basis data spasial, dan ya saya telah menggunakan PostGIS untuk mengelola data semacam ini. Tapi ini bukan opsi saat ini. Pengguna bukan orang GIS atau ingin, dan ia mengelola database sendiri di MS Access dan itu tidak akan berubah. Saya dan saya menariknya menendang dan berteriak ke dunia GIS dan ingin membuatnya semudah mungkin. Dia dapat hidup dengan mengekspor ke CSV, saya hanya berharap ada solusi yang lebih baik MENGGUNAKAN ODBC UNTUK MS ACCESS dan menampilkan data XY di QGIS.

RyanKDalton
sumber
Kemudian setahu saya, Anda tidak bisa melakukan apa yang Anda minta dengan QGIS. Saya setuju bahwa akan ada beberapa penggunaan ODBC setara dengan impor CSV, tetapi untuk segala jenis kinerja itu harus menjadi impor daripada koneksi dinamis - seperti halnya plugin CSV. Jadi tidak mungkin ada pengambilan kecuali Anda mendukung / mengembangkannya sendiri.
MerseyViking
@ MV- Saya biasanya setuju dengan Anda & melihat poin Anda. Namun, untuk pengguna non-gis yang terutama tertarik hanya memetakan data mereka dan tidak menganalisis data, kinerja QGIS tidak akan sepenting masalah. Saya akan membayangkan memiliki koneksi dinamis, "selalu hidup" ke data mereka hampir pasti akan melebihi masalah kinerja (sekali lagi memikirkan ini dari perspektif pengguna non-GIS).
RyanKDalton
Jawaban luar biasa untuk pertanyaan serupa di akses QGIS 2.4 .mdb add error
RyanKDalton

Jawaban:

7

Peringatan: Saya belum mencoba ini, jadi saya bersedia tunduk pada siapa pun dengan pengalaman langsung.

Anda dapat terhubung ke sumber data ODBC dalam dialog "tambahkan lapisan vektor", cukup pilih "database" sebagai jenis sumber dan ODBC sebagai jenis basis data. QGIS menggunakan driver ODBC untuk OGR , sehingga peringatan yang sama akan berlaku - yaitu Anda akan membutuhkan tabel yang disebut GEOMETRY_COLUMNS dan seterusnya, sehingga kolega Anda mungkin perlu memodifikasi database.

Saya tidak menggunakan Access sejak lama setelah rilis versi 1.0, tetapi karena tidak diaktifkan secara spasial, Anda mungkin akan menemukan kinerja menjadi masalah. Agaknya Anda tidak akan hanya meninggalkan Access dan mulai menggunakan basis data yang diaktifkan secara spasial, karena itu tidak mungkin layak secara ekonomi, tetapi jika rekan kerja Anda pernah merasakan dorongan untuk perubahan, saya sangat merekomendasikan untuk beralih ke sesuatu yang lebih sedikit. kuat.

MerseyViking
sumber
@ MV- Ini adalah informasi yang baik untuk dimiliki. Saya tidak menyadari Anda bisa menambahkan data tabular melalui opsi "add vector layer". Anda benar, karena tidak diaktifkan secara spasial, Anda masih harus entah bagaimana mengekspor ke format spasial. Dan Anda benar, pengguna tidak akan beralih ke db yang diaktifkan secara spasial karena mereka bukan GIS atau database. Mereka hanya memiliki cukup pelatihan akses yang berbahaya ...
RyanKDalton
7

Dengan alat "Pemrosesan" baru yang tersedia di QGIS 2, ini menjadi sedikit lebih mudah. Sementara saya masih belum menemukan cara untuk "live-link" data (sehingga jika Anda mengubah nilai-nilai dalam tabel MS Access, titik tersebut bergerak secara otomatis), metode ini tampaknya berfungsi dengan cukup baik.

Penghargaan diberikan kepada "Christina" dan "Bernd" di bagian komentar di halaman ini (dan tentu saja @underdark untuk blog) untuk cara membuat koneksi ODBC ke database MS Access Anda:

Buat Koneksi ODBC:

Untuk Win7, 32 bit: Buka panel kontrol / alat administratif / sumber data (ODBC)

Untuk Win7, 64 bit: Alih-alih menggunakan "panel kontrol / alat administratif / sumber data (ODBC)" default - dengan versi 64bit, Anda harus menggunakan C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Klik pada tab DSN pengguna dan kemudian 'tambahkan'
  2. Gulir ke bawah ke Microsoft Access Driver (* mdb) dan klik 'selesai'
  3. Beri nama pada koneksi, lalu pilih 'pilih' untuk meramban ke lokasi basis data, lalu klik 'ok' untuk keluar dari dialog dan kembali untuk menutup jendela dsn.

Muat layer ke QGIS:

  1. Pergi untuk menambahkan layer vektor dan pilih opsi database.
  2. Pastikan kotak 'ketik' di database mengatakan 'ODBC' dan klik 'baru'
  3. Di kotak nama ketikkan nama untuk koneksi
  4. Tuan rumah adalah localhost
  5. Nama basis data adalah nama dsn yang Anda buat pada langkah 4
  6. Semua kotak lain harus kosong tetapi Anda dapat mencentang kotak 'simpan kata sandi'.
  7. Uji koneksi dan catat kesalahan apa pun. Ketika berhasil, klik 'ok' untuk kembali ke dialog 'tambah lapisan vektor'
  8. Klik 'buka' untuk membuka koneksi ini, dan jika diminta kata sandi, klik 'ok'. Pilih layer Anda (tabel dari database), mengingat itu mungkin tidak memiliki geometri.

Konversikan data XY ke Poin:

  1. Dengan tabel di TOC, pergi ke "Memproses" -> Kotak Alat -> Geoalgoritma -> Vektor -> Penciptaan -> "Poin lapisan dari tabel".
  2. Isi formulir seperti yang terlihat di bawah ini:

Layer Poin dari Tabel

RyanKDalton
sumber
Jika Anda mengalami masalah dengan pendekatan ini, periksa akses QGIS 2.4 .mdb add error
RyanKDalton
Terima kasih banyak atas bantuan untuk menghubungkan akses ms ke QGIS. Saya menggunakan kode tiga negara surat sebagai lapisan bergabung dan itu bekerja dengan sangat baik
Jika saya memiliki tabel dengan Line atau Polygon, bagaimana saya bisa menghasilkan peta?
MichaelR
5

Sementara saya masih tertarik untuk mendengar jika ada opsi lain yang tersedia, saya menemukan posting pesan yang menyebutkan ini mungkin menggunakan Plugin eVis .

Dokumentasi menjelaskan di bagian Koneksi Database bagaimana Anda dapat terhubung ke koneksi MS Access atau ODBC untuk membuat lokasi titik XY dari database, tanpa membuat snapshot statis. Saya cukup mengetik "select * from" dan eV muncul kotak dialog yang meminta nama layer dan bidang XY.

Sayangnya ini tidak muncul untuk membuat koneksi "live-linked" ke MS Access db karena ketika proyek berikutnya dibuka, QGIS bingung ("tidak dapat membuka satu atau lebih lapisan proyek"). Namun, solusi untuk ini adalah membuat kueri XML yang telah ditentukan sebelumnya yang dapat dipilih pengguna.

Jadi, meskipun bukan solusi yang sempurna, ini adalah satu langkah lebih baik daripada mengekspor ke CSV. Di masa depan saya pikir akan bagus untuk melihat plugin Teks Dibatasi diperluas untuk menerima koneksi ODBC untuk tujuan ini.

RyanKDalton
sumber
Ah! Itu sangat berguna untuk diketahui. Ini melibatkan beberapa simpai, tetapi setidaknya harus satu kali set-up. Apakah akan memuat ulang data jika Anda mengubah tampilan di QGIS? Atau apakah itu hanya menyimpannya sampai Anda menjalankan kembali kueri secara manual?
MerseyViking
@ MV- Dari apa yang dapat saya katakan melalui eksperimen, eVis muncul untuk membuat lapisan cache di QGIS. Sebagai contoh, setelah saya memuat layer dengan eVis, saya menghapus salah satu catatan dari Access DB, layar QGIS segar, dan titik "dihapus" tetap ada. Tetapi ketika saya membuat lapisan cache baru, titik yang dihapus tidak ditampilkan (seperti yang diharapkan). Panning dan zooming tidak berpengaruh pada tampilan layer cache.
RyanKDalton
4

pendekatan alternatif adalah memindahkan data ke postgis. Anda dapat membaca file csv secara langsung dengan perintah copy postgresql. maka Anda dapat membuat poin dari bidang-xy.

maka jika Anda ingin menggunakan beberapa laporan atau fungsi lain dalam akses Anda dapat terhubung ke postgis dari akses.

manfaatnya adalah Anda meletakkan data spasial di tempatnya, dalam database spasial dan kemudian menggunakan odbc kembali untuk mengakses untuk menangani data non-spasial jika Anda karena alasan tertentu masih ingin melihat data Anda dalam akses.

ada tutorial yang bagus untuk postgis / postgresql untuk mengakses koneksi di postgresonline.com. tutorial tentang menerapkan ke postgis / postgresql dapat Anda temukan oleh penulis yang sama di bostongis.org

/ Nicklas

Nicklas Avén
sumber
0

Ada beberapa produk konversi yang dapat mengkonversi data akses ms ke postgres atau SQLite dan kembali lagi. Memindahkan data dengan sangat cepat dari satu sisi ke sisi lain. Menggunakan salah satu aplikasi ini dapat memberi Anda opsi untuk menjalankan QGIS pada snapshot data.

AndrewM
sumber
1
bisakah Anda menyarankan alat seperti itu?
Jens