Bagaimana Cara Membuat Kotak di Dalam Poligon yang Berorientasi dengan Sisi Terpanjang?


13

Saya telah menggunakan proses yang disebut "Buat Poligon Graticule" untuk membuat kotak di dalam poligon dengan atribut baris dan kolom yang ditetapkan. Ini adalah alat SAGA yang telah saya jalankan di QGIS. Ini menghasilkan grid berdasarkan tingkat input poligon dengan sel menjalankan N ke S dan E ke W. Akan lebih baik untuk analisis saya jika arah grid sejajar dengan tepi terpanjang poligon. Untuk referensi saya telah melampirkan gambar output otomatis saat ini dan output yang saya ubah secara manual untuk menyelaraskan grid dengan poligon. Kisi-kisi awalnya menutupi seluruh tingkat poligon tetapi telah dipotong untuk menunjukkan hanya bagian sel yang ada di dalamnya.

Ini adalah alat default yang digunakan Gambar di atas adalah apa yang keluar dari alat secara default.

masukkan deskripsi gambar di sini Ini adalah gambar dari kisi yang diedit secara manual agar sesuai dengan parameter yang diperlukan.

Pertanyaan saya adalah, adakah cara untuk menghasilkan kisi-kisi yang disejajarkan seperti yang ada di gambar kedua secara otomatis? Saya perlu membuat grid untuk beberapa ribu poligon.


1
Apakah poligon adalah persegi panjang atau poligon umum dengan 4 tepi? Saya menanyakan ini kepada Anda karena bujur sangkar tampaknya tidak sejajar dengan tepi yang lebih pendek.
mgri

1
Tepi poligon tidak selalu sudut kanan, itulah sebabnya ujung tidak tepat. Juga diputar dengan alat digitasi sehingga mungkin ada beberapa kesalahan manusia. Poligon tidak semuanya empat sisi meskipun bentuk umumnya cukup teratur. Inilah mengapa saya berpikir bahwa penyelarasan sebaiknya dilakukan menggunakan tepi terpanjang, karena sisi yang berlawanan kemungkinan akan memiliki bantalan yang berbeda.
Kingfisher


Jawaban:


3

Jika Anda membuat kisi vektor Vector -> Research Tools -> Vector Grid, Anda dapat menentukan sudut rotasi.

masukkan deskripsi gambar di sini


Saya tidak melihat input sudut rotasi yang tersedia di alat Grid Vector. Ini dalam versi 2.18.17, Windows 32 bit. Mungkin saya kehilangan sesuatu.
jbgramm

Saya menambahkan gambar. saya menggunakan 2.14.18 windows 64 bit
neogeomat

Bisakah nilai sudut dipasok dari lapisan lain, mungkin di pemodel grafis? Ini terlihat menjanjikan, tetapi membosankan untuk OP, karena ia memiliki banyak poligon.
JoshC

1
@JoshC Itu adalah bagian dari plugin ftools di 2.14, yang ditolak karena beberapa skrip pemrosesan di 2.18. Carilah C:\Program Files\QGIS Essen\apps\qgis-ltr\python\plugins\fTools\tools\doVectorGrid.py. Anehnya ini tidak termasuk dalam QGIS 2.8.
AndreJ

1
Saya menambahkan laporan bug regresi untuknya: issues.qgis.org/issues/18725
AndreJ

1

QGIS 2.18

Ketika @ jbgramm mengomentari jawaban yang diberikan oleh @neogeomat, kami tidak melihat Rotation angleopsi dalam alat Vector Grid di QGIS 2.18 (2.18.15-17 diperiksa oleh @jbgramm, dan sama dengan 2.18.18).

Itu membuat kita dengan fungsi GRASS v.mkgrid .

masukkan deskripsi gambar di sini

Sudut diukur dari utara, berlawanan arah jarum jam. Jadi -30dalam gambar menghasilkan grid yang berorientasi pada N30E.


0

Saya juga mengalami masalah ini di QGIS 3 dan menemukan solusi ini di stack overflow

Pada dasarnya idenya adalah untuk menerapkan sudut pada poligon yang luasnya didefinisikan sebelum membuat grid. Jika poligon Anda bukan persegi panjang, Anda harus membuat layer dari tingkat poligon sebelumnya, dan kemudian memutarnya. Kemudian Anda dapat membuat kisi sesuai dengan tingkatan baru ini dan kemudian memutar poligon dan kisi kembali ke tingkat Poligon asli. Semua ini sambil memastikan koordinat x, y yang sama digunakan sebagai titik jangkar di kedua lapisan.

#Define extent of Polygon
ext = QgsVectorLayer('path_to_polygon.shp', '', 'ogr' ).extent()
xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
coords = "%f,%f,%f,%f" %(xmin, xmax, ymin, ymax)

#Define The angle of rotation. Change value to yours
azimut = 70.043

#define anchor point for rotation
anchor = "%f, %f" % (xmin, ymax)

#define x and y spacing of grid. Update to your desired spacing.
x = 3
y = 6

#create new polygon from extent
processing.run("native:extenttolayer", {'INPUT':coords,'OUTPUT':'Path_to_Output.shp'})

#Rotate Extent
processing.run("native:rotatefeatures", {'INPUT': 'Path_to_extent_Polygon.shp','ANGLE': azimut,'ANCHOR':anchor + '[EPSG:4326]','OUTPUT': 'Path_to_rotated_extent.shp'})

#Define extent of Rotated Polygon 
ext1 = QgsVectorLayer('Path_to_Rotated_Extent.shp', '', 'ogr' ).extent()
xmin1 = ext1.xMinimum()
xmax1 = ext1.xMaximum()
ymin1 = ext1.yMinimum()
ymax1 = ext1.yMaximum()
coords1 = "%f,%f,%f,%f" %(xmin1, xmax1, ymin1, ymax1)

#Create grid 
processing.run("qgis:creategrid", {'TYPE':0,'EXTENT': coords1 +'[EPSG:4326]','HSPACING':x,'VSPACING':y,'HOVERLAY':0,'VOVERLAY':0,'CRS':'EPSG:4326','OUTPUT': 'Path_to_grid.shp'})

#Rotate Grid to original extent
processing.run("native:rotatefeatures", {'INPUT': 'path_to_grid.shp','ANGLE': - 
azimut,'ANCHOR':rotate + '[EPSG:4326]','OUTPUT': 'path_to_rotated_grid.shp'})

# Clip Grid to Original Polygon
processing.run("native:clip", {'INPUT':'path_to_rotated_grid.shp','OVERLAY': 
'path_to_original_Polygon.shp','OUTPUT':'path_to_final_grid.shp'})
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.