วิธีสร้างกริดภายในรูปหลายเหลี่ยมที่เน้นด้านยาวที่สุด


13

ฉันใช้กระบวนการที่เรียกว่า "Create Polygon Graticule" เพื่อสร้างกริดภายในรูปหลายเหลี่ยมด้วยแอตทริบิวต์แถวและคอลัมน์ที่กำหนด มันเป็นเครื่องมือ SAGA ที่ฉันใช้ใน QGIS มันสร้างกริดตามขอบเขตของรูปหลายเหลี่ยมอินพุตกับเซลล์ที่ใช้ N ถึง S และ E ถึง W มันจะดีกว่าสำหรับการวิเคราะห์ของฉันหากทิศทางของกริดนั้นขนานกับขอบที่ยาวที่สุดของรูปหลายเหลี่ยม สำหรับการอ้างอิงฉันได้แนบรูปภาพของเอาท์พุทอัตโนมัติปัจจุบันและเอาท์พุทที่ฉันแก้ไขด้วยตนเองเพื่อจัดตำแหน่งกริดกับรูปหลายเหลี่ยม แต่เดิมกริดครอบคลุมขอบเขตทั้งหมดของรูปหลายเหลี่ยม แต่ถูกตัดเพื่อแสดงเฉพาะส่วนของเซลล์ที่อยู่ภายใน

นี่คือเครื่องมือเริ่มต้นที่วาง ภาพด้านบนเป็นสิ่งที่เครื่องมือออกวางตามค่าเริ่มต้น

ป้อนคำอธิบายรูปภาพที่นี่ นี่คือรูปภาพของกริดที่ถูกแก้ไขด้วยตนเองเพื่อให้พอดีกับพารามิเตอร์ที่จำเป็น

คำถามของฉันคือมีวิธีสร้างกริดที่จัดแนวเช่นหนึ่งในภาพที่สองในแบบอัตโนมัติหรือไม่? ฉันจะต้องสร้างกริดสำหรับรูปหลายเหลี่ยมสองสามพัน


1
รูปหลายเหลี่ยมเป็นรูปสี่เหลี่ยมผืนผ้าหรือรูปหลายเหลี่ยมทั่วไปที่มี 4 ขอบหรือไม่? ฉันถามคุณแบบนี้เพราะสี่เหลี่ยมดูเหมือนจะไม่ถูกจัดชิดขอบที่สั้นกว่า
mgri

1
ขอบของรูปหลายเหลี่ยมไม่จำเป็นต้องเป็นมุมฉากซึ่งเป็นสาเหตุที่ทำให้มุมไม่ตรงกัน นอกจากนี้มันถูกหมุนด้วยเครื่องมือทำให้เป็นดิจิทัลดังนั้นอาจมีข้อผิดพลาดของมนุษย์เกิดขึ้น รูปหลายเหลี่ยมนั้นไม่ใช่ทั้งสี่ด้าน แต่รูปร่างโดยทั่วไปค่อนข้างปกติ นี่คือเหตุผลที่ฉันคิดว่าการจัดตำแหน่งจะทำได้ดีที่สุดโดยใช้ขอบที่ยาวที่สุดเนื่องจากฝั่งตรงข้ามจะมีตลับลูกปืนที่แตกต่างกัน
Kingfisher

เกี่ยวข้อง: gis.stackexchange.com/q/30988/66673
Kingfisher

อาจเกี่ยวข้อง: gis.stackexchange.com/questions/210461/…
AndreJ

คำตอบ:


3

หากคุณสร้างกริดเวกเตอร์จากVector -> Research Tools -> Vector Gridคุณสามารถระบุมุมการหมุน

ป้อนคำอธิบายรูปภาพที่นี่


ฉันไม่เห็นอินพุตมุมการหมุนที่มีอยู่ในเครื่องมือ Vector Grid นี่เป็นรุ่น 2.18.17, Windows 32 บิต บางทีฉันอาจจะพลาดอะไรซักอย่าง
jbgramm

ฉันเพิ่มรูปภาพ ฉันใช้ 2.14.18 windows 64 บิต
neogeomat

สามารถกำหนดค่ามุมได้จากเลเยอร์อื่นหรืออาจเป็นในตัวสร้างแบบกราฟิกหรือไม่? สิ่งนี้ดูมีแนวโน้ม แต่น่าเบื่อสำหรับ OP เนื่องจากเขามีรูปหลายเหลี่ยมมากมาย
JoshC

1
@JoshC มันเป็นส่วนหนึ่งของปลั๊กอิน ftools ใน 2.14 ซึ่งถูกไล่ออกเพื่อสนับสนุนสคริปต์การประมวลผลใน 2.18 C:\Program Files\QGIS Essen\apps\qgis-ltr\python\plugins\fTools\tools\doVectorGrid.pyมองหา น่าแปลกที่เรื่องนี้ไม่รวมอยู่ใน QGIS 2.8
AndreJ

1
ฉันเพิ่มรายงานข้อผิดพลาดในการถดถอยสำหรับ: problems.qgis.org/issues/18725
AndreJ

1

QGIS 2.18

ตามที่ @ jbgramm แสดงความคิดเห็นกับคำตอบที่ได้รับจาก @neogeomat เราไม่เห็นRotation angleตัวเลือกในเครื่องมือVector Gridใน QGIS 2.18 (2.18.15-17 ที่ตรวจสอบโดย @jbgramm และเช่นเดียวกันกับ 2.18.18)

นั่นทำให้เรามีฟังก์ชันGRASS v.mkgrid

ป้อนคำอธิบายรูปภาพที่นี่

มุมวัดจากทิศเหนือทวนเข็มนาฬิกา ดังนั้น-30ในภาพจะสร้างกริดที่เน้น N30E


0

ฉันเจอปัญหานี้ใน QGIS 3 และพบวิธีแก้ปัญหานี้ในสแตกล้น

โดยพื้นฐานแล้วแนวคิดจะใช้มุมบนรูปหลายเหลี่ยมที่ขอบเขตถูกกำหนดไว้ก่อนสร้างกริด หากรูปหลายเหลี่ยมของคุณไม่ใช่รูปสี่เหลี่ยมผืนผ้าคุณจะต้องสร้างเลเยอร์จากขอบเขตของรูปหลายเหลี่ยมของคุณก่อนแล้วจึงหมุน จากนั้นคุณสามารถสร้างกริดตามขอบเขตใหม่นี้แล้วหมุนรูปหลายเหลี่ยมของคุณและกริดกลับไปเป็นขอบเขตรูปหลายเหลี่ยมดั้งเดิม ทั้งหมดนี้เพื่อให้แน่ใจว่าใช้พิกัด x, y เดียวกันกับจุดยึดในทั้งสองเลเยอร์

#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'})
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.