बहुभुज के अंदर एक ग्रिड कैसे बनाएं जो सबसे लंबे पक्ष के साथ उन्मुख हो?


13

मैं असाइन किए गए पंक्ति और स्तंभ विशेषताओं के साथ बहुभुज के भीतर एक ग्रिड बनाने के लिए "क्रिएज पॉलीगॉन ग्रिच्युल" नामक एक प्रक्रिया का उपयोग कर रहा हूं। यह एक सागा उपकरण है जिसे मैं QGIS में चला रहा हूं। यह इनपुट बहुभुज की सीमा के आधार पर N और S को E से W को चलाने वाली सेल के साथ ग्रिड उत्पन्न करता है। यह मेरे विश्लेषण के लिए बेहतर होगा यदि ग्रिड की दिशा बहुभुज के सबसे लंबे किनारे के समानांतर होती। संदर्भ के लिए मैंने वर्तमान स्वचालित आउटपुट और एक आउटपुट के चित्र संलग्न किए हैं जिसे मैंने बहुभुज के साथ ग्रिड को संरेखित करने के लिए मैन्युअल रूप से बदल दिया है। ग्रिड मूल रूप से बहुभुज की संपूर्ण सीमा को कवर करते हैं, लेकिन केवल उन सेल भागों को दिखाने के लिए क्लिप किया गया है जो अंदर हैं।

यह डिफ़ॉल्ट टूल आउट पुट है ऊपर की छवि वह है जो टूल आउट डिफ़ॉल्ट रूप से डालता है।

यहाँ छवि विवरण दर्ज करें यह एक ग्रिड की एक छवि है जिसे आवश्यक मापदंडों को फिट करने के लिए मैन्युअल रूप से संपादित किया गया था।

मेरा सवाल यह है कि क्या ग्रिड बनाने का कोई तरीका है जो एक स्वचालित फैशन में दूसरी छवि में जैसे संरेखित हो? मुझे कुछ हजार बहुभुजों के लिए ग्रिड बनाने की आवश्यकता होगी।


1
क्या बहुभुज 4 किनारों के साथ आयताकार या सामान्य बहुभुज हैं? मैं आपसे यह पूछता हूं क्योंकि वर्गों को छोटे किनारे से संरेखित नहीं किया जाता है।
16

1
बहुभुज के किनारों को सही कोण जरूरी नहीं है, यही वजह है कि किनारों को बिल्कुल संरेखित नहीं किया गया है। इसके अलावा इसे डिजिटाइज़िंग टूल के साथ घुमाया गया ताकि कुछ मानवीय त्रुटि मौजूद हो। बहुभुज सभी चार तरफा नहीं होते हैं, हालांकि आकार आम तौर पर बहुत नियमित होते हैं। यही कारण है कि मैं सोच रहा था कि संरेखण को सबसे लंबे किनारे का उपयोग करके किया जाएगा, क्योंकि इसके विपरीत पक्ष का एक अलग असर होगा।
किंगफिशर


शायद संबंधित: gis.stackexchange.com/questions/210461/…
AndreJ

जवाबों:


3

यदि आप से एक वेक्टर ग्रिड बनाते हैं Vector -> Research Tools -> Vector Grid, तो आप रोटेशन कोण निर्दिष्ट कर सकते हैं।

यहाँ छवि विवरण दर्ज करें


मुझे वेक्टर ग्रिड टूल में उपलब्ध रोटेशन एंगल इनपुट नहीं दिखता है। यह संस्करण 2.18.17, 32 बिट विंडोज में है। हो सकता है कि मुझसे कुछ छूट रहा हो।
jbgramm

मैंने चित्र जोड़ा। मैं 2.14.18 64 बिट विंडो का उपयोग कर रहा हूं
neogeomat

क्या एंगल वैल्यू किसी अन्य लेयर से सप्लाई की जा सकती है, शायद ग्राफिकल मॉडलर में? यह ओपी के लिए आशाजनक, लेकिन थकाऊ लगता है, क्योंकि उसके पास कई बहुभुज हैं।
जोश

1
@JoshC यह 2.14 में फ़ुटबॉल प्लगइन का हिस्सा था, जिसे 2.18 में कुछ प्रोसेसिंग स्क्रिप्ट के पक्ष में खारिज कर दिया गया था। के लिए देखो C:\Program Files\QGIS Essen\apps\qgis-ltr\python\plugins\fTools\tools\doVectorGrid.py। अजीब तरह से यह QGIS 2.8 में शामिल नहीं था।
आंद्रेजे

1
मैंने इसके लिए एक प्रतिगमन बग रिपोर्ट जोड़ी: मुद्दों.qgis.org/issues/18725
AndreJ

1

QGIS 2.18

जैसा कि @jbgramm ने @neogeomat द्वारा दिए गए उत्तर पर टिप्पणी की है, हम QGIS 2.18 Rotation angleमें वेक्टर ग्रिड टूल में विकल्प नहीं देखते हैं (@jbgramm द्वारा जाँच की गई 2.18.15-17, और 2.18.18 के साथ ही)।

यह हमें GRASS v.mkgrid फ़ंक्शन के साथ छोड़ देता है ।

यहाँ छवि विवरण दर्ज करें

कोण उत्तर, वामावर्त से मापा जाता है। तो -30तस्वीर में N30E के लिए उन्मुख एक ग्रिड का उत्पादन होता है।


0

मैं भी क्यूजीआईएस 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'})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.