Saya ingin membuat poligon di sepanjang baris untuk menggunakannya untuk AtlasCreator di langkah selanjutnya.
ArcMap memiliki alat yang disebut Fitur Strip Map Index .
Dengan alat ini saya dapat memilih tinggi dan lebar poligon saya (katakan 8km x 4km) dan menghasilkan / memutarnya sepanjang garis secara otomatis.
Salah satu atribut yang dihasilkan dari setiap poligon adalah sudut rotasi yang saya perlukan untuk memutar panah utara saya di Generator Atlas sesudahnya.
Adakah yang punya ide bagaimana menyelesaikan tugas ini di QGIS / dengan pyQGIS? Algoritma Grass- atau SAGA atau prossessing-toolbox-model yang dapat digunakan di dalam plugin kustom juga tidak masalah;) Edit1: Saya tidak hanya memerlukan luasan cetak tetapi juga poligon itu sendiri karena saya ingin mencetak peta dengan semua poligon / luasan sebagai semacam peta ikhtisar.
Sunting2: Saya menawarkan hadiah karena saya masih mencari solusi PyQGIS yang dapat digunakan dalam QGIS-Plugin tanpa perlu menginstal perangkat lunak selain dari QGIS (tidak ada RDBMS seperti PostGIS / Oracle)
Jawaban:
Pertanyaan menarik! Ini adalah sesuatu yang ingin saya coba sendiri, jadi cobalah.
Anda dapat melakukan ini di PostGRES / POSTGIS dengan fungsi yang menghasilkan seperangkat poligon.
Dalam kasus saya, saya memiliki tabel dengan satu fitur (MULTILINESTRING) yang mewakili jalur kereta api. Perlu menggunakan CRS dalam meter, saya menggunakan osgb (27700). Saya telah melakukan 4km x 2km 'halaman'.
Di sini, Anda dapat melihat hasilnya ... hal-hal hijau adalah jaringan jalan, terpotong ke penyangga 1 km di sekitar rel, yang sesuai dengan ketinggian poligon dengan baik.
Inilah fungsinya ...
Menggunakan fungsi ini
Ini sebuah contoh; 4km x 2km halaman, epsg: 27700 dan 10% tumpang tindih
Setelah menjalankan ini, Anda dapat mengekspor dari PgAdminIII ke file csv. Anda dapat mengimpor ini ke QGIS, tetapi Anda mungkin perlu mengatur CRS secara manual untuk layer - QGIS tidak menggunakan SRID di EWKT untuk mengatur layer CRS untuk Anda: /
Menambahkan atribut bearing
Ini mungkin lebih mudah dilakukan dalam postgis, bisa dilakukan dalam ekspresi QGIS tetapi Anda harus menulis beberapa kode. Sesuatu seperti ini...
Peringatan
Agak sedikit diretas, dan hanya memiliki kesempatan untuk menguji pada satu dataset.
Tidak 100% yakin dua simpul mana yang harus Anda pilih pada pembaruan atribut bantalan itu
query
.. mungkin perlu bereksperimen.Saya harus mengakui bahwa saya tidak tahu mengapa saya perlu melakukan formula berbelit-belit untuk memutar poligon agar sesuai dengan segmen garis saat ini. Saya pikir saya bisa menggunakan output dari ST_Azimuth () di ST_Rotate (), tetapi sepertinya tidak.
sumber
Ada beberapa solusi yang berbeda. Dan ini dapat bekerja dengan polyline sederhana dan beberapa entitas terpilih
diagram blok:
Parameter
loop pada OrderNodes
buat Anda titik pertama sebagai jangkar
untuk setiap titik menambahkannya pada dict x, y, id dan menghitung vektor
Anda dapat mengubah proposisi ini jika tidak benar-benar jelas atau berkomentar.
sumber
Steven Kays menjawab dalam pyqgis. Cukup pilih garis di lapisan Anda sebelum menjalankan skrip. Script tidak mendukung linemerging sehingga tidak dapat bekerja pada layer dengan multilinestring
sumber
Dua jawaban (pada saat posting) adalah cerdik dan dijelaskan dengan baik. Namun, ada juga solusi SANGAT sederhana namun efektif yang memungkinkan untuk ini (dengan asumsi Anda akan menerima semua peta Anda sejajar dengan Utara di jalan tradisional, daripada arah Utara acak berdasarkan sungai). Jika Anda ingin rotasi, itu mungkin tetapi sedikit lebih rumit (lihat bagian bawah).
Pertama lihat posting saya di sini . Ini memberi Anda cara untuk membuat cakupan peta untuk Atlas. Metode yang Anda inginkan adalah adaptasi dari 'Workflow 2' di caranya. Membagi fitur linier Anda dengan simpul atau panjang dan buffer fitur dengan jumlah berapa pun. Jumlah yang Anda buffer sebagian akan menentukan tumpang tindih (tapi lihat di bawah) tetapi yang lebih penting, itu menciptakan fitur dengan suatu area. Anda dapat menggunakan sejumlah plugin untuk membagi baris tetapi GRASS v.split.length dan v.split.vert adalah opsi yang baik (tersedia di Processing Toolbox).
Setelah mengaktifkan Atlas Generation di Map Composer dan memilih layer buffered Anda, kembali ke tab item dan pilih objek peta Anda. Lihat 'Dikendalikan oleh Atlas', dan dalam kasus penggunaan Anda, saya akan memilih fitur Margin. Ini akan mengontrol tumpang tindih Anda di antara peta (atau Anda dapat memilih skala tetap).
Anda dapat mempratinjau Atlas Anda menggunakan Tombol Pratinjau Atlas di bilah alat atas penggubah dan melihat berapa banyak halaman yang akan dihasilkan. Catatan Anda dapat memilih untuk mengekspor semua halaman dalam satu PDF atau sebagai file terpisah.
Untuk membuat peta berputar di sepanjang garis, ada bidang rotasi di properti Item Komposer Peta. Anda perlu mengatur ekspresi (gunakan tombol kecil di sebelah kanan kotak rotasi). Pilih variabel sebagai opsi Anda dan kemudian Edit. Pembuat ekspresi akan muncul dan di sana Anda dapat mengakses geometri atau bidang fitur atlas. Anda kemudian dapat membangun ekspres untuk memutar peta sesuai dengan rotasi fitur (Anda dapat menghitung bantalan menggunakan titik awal dan akhir dari setiap segmen garis dan sedikit pemicu). Ulangi proses yang sama untuk memutar panah Utara Anda (menggunakan ekspresi yang sama atau variabel yang dihitung sebelumnya).
sumber