QGIS를 사용하여 한 라인 레이어에서 피처의 교차점 찾기
아래 그림과 같이 같은 레이어에서 교차점을 찾고 싶습니다. 모든 라인은 동일한 레이어에있는 별도의 피쳐입니다.
QGIS에서 이러한 교차점을 어떻게 찾을 수 있습니까?

답변
다음 스크립트를 사용하면 예상 한 결과를 얻을 수 있습니다. 그러나 먼저 "Vector geometry > Multipart to singleparts"
동일한 색상의 선 쌍이 동일한 기능이면 도구를 사용 하십시오. 스크립트는 도형 사이의 가장 가까운 지점을 사용하기 때문입니다.
레이어 이름을 설정합니다. 또한 eps
두 선이 교차하거나 접촉한다고 가정하려면 엡실론 ( ) 값 을 설정해야합니다 . 좌표에서 소수의 작은 변화가 결과에 영향을 미치기 때문입니다. 따라서 지오메트리와 관련된 일부 도구 및 기능에는 임계 값이 포함됩니다.
데이터가 투영 된 좌표계에 있다고 가정합니다. 지리적 인 경우 eps
.
# specify minimum distance to assume that lines intersect/touch
eps = 0.01 # 0.01 meter = 1 cm
line_lyr = QgsProject.instance().mapLayersByName('LINE_LAYER_NAME')[0]
crs = line_lyr.crs().authid()
# make new point layer
point_lyr = QgsVectorLayer("Point?crs=" + crs, "points", "memory")
point_lyr.startEditing()
for line1 in line_lyr.getFeatures():
geom1 = line1.geometry()
for line2 in line_lyr.getFeatures():
geom2 = line2.geometry()
if (geom1.distance(geom2) < eps
and line1.id() < line2.id()): # to avoid duplicate points
point = geom1.nearestPoint(geom2)
feature = QgsFeature()
feature.setGeometry(point)
point_lyr.addFeature(feature)
point_lyr.commitChanges()
QgsProject.instance().addMapLayer(point_lyr)

참고 : 스크립트는 이미지에서 강조 표시된 교차점도 제공합니다.
선이 교차 하는 지점을 생성 하는 "선 교차" 지리 알고리즘을 사용해보십시오 .

주 동안 그 'Input layer'
와 'Intersect layer'
같은 라인 층이 선택되었다.
선이 분리 된 경우 (아래 이미지 참조) 추가 형상 조정 (예 : 스냅)이 필요합니다.

레이어의 지오메트리를 동일한 레이어 내의 지오메트리에 스냅 하려면 "지오메트리를 레이어에 스냅"을 적용 합니다.

그리고 "선 교차로"지리 알고리즘을 적용한 후.
각 세그먼트가 하나의 기능이 아니라 각 선이 하나의 기능이라고 가정합니다. 그런 다음 버퍼링 된 시작 및 끝 노드를 라인 레이어와 오버레이 할 수 있습니다.
- 0 및 -1로 특정 정점 추출을 실행합니다 (모든 시작 및 끝 노드에 대한 점을 가져 오기 위해)
- 데이터에 따라 0.2 미터 정도의 결과에 버퍼 를 사용하십시오 .
- 실행 위치 (요약)으로 속성 가입 입력과 버퍼 시작과 끝 노드와 레이어에 참여하기로 라인 층을. 상자를 확인해야합니다 카운트 에서 계산에 요약 . 이렇게하면이 버퍼링 된 노드가 겹치는 라인 수를 계산할 수 있습니다.
- 조인의 출력 레이어에서 개수가 2 미만인 모든 피처를 필터링합니다. 나머지 요소는 교차점이어야합니다.
- 결과에서 Centroids 를 실행 하여 노드를 포인트로 되돌 리거나 Select by location을 통해 결과와 겹치는 원래 추출 된 노드를 선택합니다 .
아이디어는 모든 버퍼링 된 노드가 다른 라인과 교차하지 않는 한 자체 원래 라인에서 1 개의 겹침을 가져야한다는 것입니다. 그러면 카운트는 2 (또는 여러 라인 교차의 경우 그 이상)가됩니다.