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


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.