Saya memiliki lapisan MultiLineStringZM dalam database sqlite, dan saya mencoba memvisualisasikan ukuran atau nilai-m di vertex. Saya sudah mencoba mencari informasi tentang cara melakukan ini di QGIS, dan yang bisa saya kumpulkan adalah bahwa ini tidak mungkin secara langsung dari lapisan linestring dan bahwa poin-poin perlu diekstraksi ke lapisan yang terpisah.
Saya telah menggunakan Vector
-> Geometry Tools
-> Extract nodes
untuk membuat layer multipoint yang mewakili vertex dari layer multlinestring saya, tetapi prosesnya kehilangan nilai-m dari vertex tersebut. Saya perlu nilai-m dipertahankan dengan menyimpan nilai-m sebagai atribut dari titik, atau sesuatu yang lain?
Secara internal kami memiliki alat baris perintah yang mengubah linestrings ke shapefile titik dengan nilai-m yang disimpan sebagai atribut pada setiap titik, dan saya telah menggunakannya untuk memverifikasi bahwa ada nilai-m yang ditugaskan ke vertex, dan saya bisa menggunakan bahwa jika saya harus, tetapi jika mungkin akan lebih baik jika ini dapat dilakukan langsung di dalam QGIS.
EDIT - Mengulangi apa yang telah saya katakan di atas, tetapi menekankan kembali fakta bahwa kita memang memiliki alat baris perintah yang dapat mencapai hasil yang saya cari yang menggunakan pustaka GDAL, jadi solusi yang menunjukkan hanya sebagian jawaban di PyQGIS bukan jawaban yang saya cari. Saya mencari alat bawaan, plugin yang siap dibuat untuk QGIS, atau skrip lengkap yang dapat mengekstraksi (tidak membuat / menghasilkan) dan memvisualisasikan nilai-m dari MultiLineStringZM atau LineStringZM geometri.
sumber
Jawaban:
Dari apa yang saya temukan di sana tampaknya tidak ada solusi yang ada untuk situasi yang tepat ini, tapi saya masih ingin dapat melakukan ini di QGIS, jadi saya mengambil terjun ke skrip python.
Panduan untuk menulis algoritma pemrosesan dapat ditemukan di sini https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html
Untuk menggunakan kode ini, buka kotak alat Pemrosesan, kemudian perluas Skrip, lalu rentangkan Alat. Pilih "Buat skrip baru" dan salin dan tempel kode di bawah ini ke jendela skrip (hati-hati saat menyalin dan menempelkan kode python karena spasi putih secara sintaksis signifikan. Jika Anda mengalami masalah, masukkan kode ke editor teks yang menunjukkan spasi putih dan pastikan yang disalin dengan benar). Simpan di mana pun Anda inginkan dan ada tombol skrip eksekusi di bagian atas jendela. Setelah Anda menyimpannya, Anda dapat "Menambahkan skrip dari file" dan secara permanen memiliki skrip di bawah "Skrip pengguna".
Ketika jendela pemrosesan muncul pilih layer yang berisi geometri vektor dan pilih jalankan. Script berperilaku sama dengan "Extract Nodes" kecuali bahwa ia menambahkan kolom yang disebut
MValues
dan atauZValues
tergantung pada apa yang tersedia dalam geometri input.sumber
Dengan QGIS 3.0 atau yang lebih baru, tugas ini sepele. Dalam "Memproses Toolbox" (Buka dengan ctrl + alt + t atau Memproses -> Toolbox) cari "Ekstrak simpul" dan jalankan algoritma itu.
Pilih garis M atau ZM atau geometri poligon sebagai lapisan Input, dan jalankan.
Verteks akan diekstraksi dengan nilai-nilai M dan Z utuh tergantung pada apa yang ada di geometri asli.
Jika nilai M diperlukan sebagai bidang dalam tabel atribut, maka kalkulator bidang dapat digunakan dengan ekspresi seperti
m($geometry)
sumber