En Uzun Tarafa Yönlendirilmiş Bir Çokgenin İçinde Izgara Nasıl Oluşturulur?


13

Atanmış satır ve sütun öznitelikleri olan bir çokgen içinde bir ızgara oluşturmak için "Çokgen Graticule Oluştur" adlı bir işlem kullanıyorum. QGIS'te çalıştırdığım bir SAGA aracı. N ile S ve E ile W arasında çalışan hücre ile giriş çokgeni boyutuna göre bir ızgara oluşturur. Izgara yönünün çokgenin en uzun kenarına paralel olması analizim için daha iyi olur. Referans için geçerli otomatik çıktının görüntülerini ve ızgarayı çokgene hizalamak için manuel olarak değiştirdiğim bir çıktıyı ekledim. Izgaralar başlangıçta çokgenin tüm alanını kapladı, ancak yalnızca içerideki hücre parçalarını göstermek için kırpıldı.

Bu varsayılan araç çıkışıdır Yukarıdaki resim, araç çıkışının varsayılan olarak koyduğu şeydir.

resim açıklamasını buraya girin Bu, gerekli parametrelere uyacak şekilde manuel olarak düzenlenen bir ızgaranın görüntüsüdür.

Benim sorum, ikinci görüntüdeki gibi otomatikleştirilmiş ızgaralar üretmenin bir yolu var mı? Birkaç bin çokgen için ızgara oluşturmam gerekecek.


1
Çokgenler dikdörtgen veya 4 kenarlı genel çokgenler midir? Bunu size soruyorum çünkü kareler daha kısa kenara hizalanmış görünmüyor.
mgri

1
Çokgenlerin kenarları mutlaka dik açılar değildir, bu nedenle kenarlar tam olarak hizalanmaz. Ayrıca sayısallaştırma araçlarıyla döndürüldü, böylece insan hatası mevcut olabilir. Şekiller genellikle oldukça düzenli olmasına rağmen çokgenler dört kenarlı değildir. Bu yüzden hizalamanın en iyi kenarı kullanarak yapılabileceğini düşünüyordum, çünkü karşı tarafın muhtemelen farklı bir yönü olacaktır.
Kingfisher


Yanıtlar:


3

'Den bir vektör ızgarası oluşturursanız Vector -> Research Tools -> Vector Grid, dönüş açısını belirleyebilirsiniz.

resim açıklamasını buraya girin


Vector Grid aracında bir döndürme açısı girişi görmüyorum. Bu sürüm 2.18.17, 32 bit Windows'tur. Belki bir şey eksik.
jbgramm

Resmi ekledim. 2.14.18 64 bit pencereler kullanıyorum
neogeomat

Açı değeri, belki de grafiksel modelleyicide başka bir katmandan sağlanabilir mi? Bu, çokgenleri olduğu için OP için umut verici, ancak sıkıcı görünüyor.
JoshC

1
@JoshC 2.14'te ftools eklentisinin bir parçasıydı ve 2.18'de bazı işleme komut dosyaları lehine reddedildi. Bakın C:\Program Files\QGIS Essen\apps\qgis-ltr\python\plugins\fTools\tools\doVectorGrid.py. Garip bir şekilde bu QGIS 2.8'e dahil edilmedi.
AndreJ

1
Bunun için bir regresyon hata raporu ekledim: issue.qgis.org/issues/18725
AndreJ

1

QGIS 2.18

@Jbgramm @ neogeomat tarafından verilen cevaba yorum yaptığında, QGIS 2.18'de (2.j.1gram-17 @jbgramm tarafından kontrol edilen ve 2.18.18 ile aynı) Vector Grid aracında bir Rotation angleseçenek görmüyoruz .

Bu da bizi GRASS v.mkgrid işleviyle terk ediyor .

resim açıklamasını buraya girin

Açı kuzeyden saat yönünün tersine ölçülür. Yani -30resimde N30E'ye yönelik bir ızgara üretiliyor.


0

Ayrıca QGIS 3'te bu problemle karşılaştım ve bu çözümü yığın taşmasında buldum

Temel olarak fikir , ızgarayı oluşturmadan önce açının tanımlandığı çokgene uygulanmasıdır . Çokgeniniz bir dikdörtgen değilse, daha önce çokgeninizin boyutundan bir katman oluşturmanız ve ardından döndürmeniz gerekir. Ardından ızgarayı bu yeni dereceye göre oluşturabilir ve daha sonra çokgeninizi ve ızgarayı orijinal Çokgen kapsamına döndürebilirsiniz. Bütün bunlar , her iki katmanda da sabit x, y koordinatının bağlantı noktası olarak kullanıldığından emin olur .

#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'})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.