가장 긴면을 향한 다각형 내부에 격자를 만드는 방법은 무엇입니까?


13

"Create Polygon Graticule"이라는 프로세스를 사용하여 행 및 열 속성이 할당 된 다각형 내에 그리드를 만듭니다. QGIS에서 실행 된 SAGA 도구입니다. 셀이 N에서 S로, E에서 W로 실행되는 입력 다각형의 범위에 따라 그리드를 생성합니다. 그리드의 방향이 다각형의 가장 긴 가장자리와 평행하면 분석에 더 좋습니다. 참고로 현재 자동 출력 이미지와 그리드를 다각형에 맞추기 위해 수동으로 변경 한 출력 이미지를 첨부했습니다. 격자는 원래 다각형의 전체 범위를 덮었지만 내부의 셀 부분 만 표시하도록 잘 렸습니다.

이것은 기본 도구입니다 위의 이미지는 기본적으로 도구가 표시하는 것입니다.

여기에 이미지 설명을 입력하십시오 필요한 매개 변수에 맞게 수동으로 편집 한 격자 이미지입니다.

내 질문은 자동화 된 방식으로 두 번째 이미지의 그리드와 같은 그리드를 생성하는 방법이 있습니까? 수천 개의 다각형에 대한 그리드를 생성해야합니다.


1
다각형은 모서리가 4 개인 직사각형 또는 일반 다각형입니까? 사각형이 짧은 가장자리에 정렬되지 않은 것 같습니다.
mgri

1
다각형의 가장자리가 반드시 직각 일 필요는 없으므로 가장자리가 정확하게 정렬되지 않습니다. 또한 디지털화 도구로 회전하여 인적 오류가있을 수 있습니다. 다각형의 모양은 일반적으로 매우 규칙적이지만 모두 4면이 아닙니다. 이것이 내가 맞은 편이 다른 베어링을 가질 수 있기 때문에 가장 긴 가장자리를 사용하여 정렬을 수행하는 것이 가장 좋을 것이라고 생각한 이유입니다.
Kingfisher


답변:


3

에서 벡터 격자를 만드는 경우 Vector -> Research Tools -> Vector Grid회전 각도를 지정할 수 있습니다.

여기에 이미지 설명을 입력하십시오


벡터 격자 도구에 회전 각도 입력이 표시되지 않습니다. 이것은 버전 2.18.17, 32 비트 Windows에 있습니다. 어쩌면 뭔가 빠졌을 수도 있습니다.
jbgramm

나는 그림을 추가했다. 나는 2.14.18 64 비트 창을 사용하고 있습니다
neogeomat

그래픽 모델러에서 다른 레이어에서 각도 값을 제공 할 수 있습니까? 그는 다각형이 많기 때문에 유망 해 보이지만 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의 벡터 그리드 도구에는 Rotation angle옵션 이 표시되지 않습니다 (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.