最長辺を向いたポリゴン内にグリッドを作成する方法は?


13

行と列の属性が割り当てられたポリゴン内にグリッドを作成するために、「Create Polygon Graticule」というプロセスを使用しています。QGISで実行しているSAGAツールです。セルがNからSおよびEからWである入力ポリゴンの範囲に基づいてグリッドを生成します。グリッドの方向がポリゴンの最長エッジに平行である場合、分析に適しています。参考のために、現在の自動出力と、グリッドをポリゴンに合わせるために手動で変更した出力の画像を添付しました。グリッドは元々ポリゴンの範囲全体をカバーしていましたが、内側にあるセル部分のみを表示するためにクリップされています。

これはデフォルトのツール出力です 上記の画像は、ツールがデフォルトで出力するものです。

ここに画像の説明を入力してください これは、必要なパラメーターに合うように手動で編集されたグリッドの画像です。

私の質問は、自動化された方法で2番目の画像のグリッドのように整列したグリッドを作成する方法はありますか?数千のポリゴンのグリッドを生成する必要があります。


1
多角形は長方形ですか、それとも4つの辺を持つ一般的な多角形ですか?正方形が短い辺に揃えられていないようですので、これをお願いします。
mgri

1
ポリゴンのエッジは必ずしも直角ではないため、エッジが正確に整列しません。また、デジタイズツールでローテーションされたため、ヒューマンエラーが発生する可能性があります。多角形はすべて4辺形ではありませんが、形状は通常かなり規則的です。これが、反対側のベアリングが異なる可能性が高いため、最も長いエッジを使用してアライメントを行うのが最善だと考えていた理由です。
カワセミ


回答:


3

からベクトルグリッドを作成する場合Vector -> Research Tools -> Vector Grid、回転角度を指定できます。

ここに画像の説明を入力してください


ベクトルグリッドツールで使用可能な回転角度入力が表示されません。これは、バージョン2.18.17、32ビットWindowsです。たぶん私は何かが欠けています。
jbgramm

写真を追加しました。私は2.14.18 64ビットの窓使用しています
neogeomat

おそらくグラフィカルモデラーで、角度値を別のレイヤーから提供できますか?これは有望に見えますが、OPには多くのポリゴンがあるため、OPにとっては面倒です。
JoshC

1
@JoshC 2.14ではftoolsプラグインの一部でしたが、2.18では一部の処理スクリプトを支持して却下されました。探してくださいC:\Program Files\QGIS Essen\apps\qgis-ltr\python\plugins\fTools\tools\doVectorGrid.py。奇妙なことに、これはQGIS 2.8に含まれていませんでした。
-AndreJ

1
回帰バグレポートを追加しました:issues.qgis.org/issues/18725
AndreJ

1

QGIS 2.18

@jbgrammが@neogeomatの回答にコメントしたように、QGIS 2.18のVector GridツールにはRotation angleオプションがありません(@jbgrammでチェックされた2.18.15-17、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.