교차로를 기반으로 한 거리의 다각형 레이어에서 구역 이름과 섹션 번호 연결

Nov 23 2020

QGIS 3.14에서는 거리 윤곽선 (다각형)이있는 레이어에 거리가 통과하는 영역의 이름과 통과하는 지적 플롯의 수를 기록하고 싶습니다.

거리가 여러 개체와 교차하는 경우 해당 이름은 쉼표 뒤의 한 필드에 작성되어야합니다. 이 문제를 어떻게 해결합니까?

거리 경계에 속하는 지역의 면적이 지정된 값보다 작 으면 이름이 고려되지 않습니다.

답변

Taras Nov 23 2020 at 20:59

에서 쿼리 확장하려면 이 답변을 으로 "영역" - 규칙, 즉 값이 교차 더 특정 값보다 경우에만 다음 약간 조정 쿼리를 고려 고려 :

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

또는 필드 계산기에서 다음 식을 고려하십시오.

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:="info",
  concatenator:=',',
  filter:=(intersects($geometry,geometry(@parent)) AND area(intersection($geometry,geometry(@parent))) > 80000000)
)

마음이하십시오 'area'α- 함수

기하학 다각형 객체의 영역을 반환합니다. 계산은 항상이 지오메트리의 SRS (Spatial Reference System)에서 평면 측정이며 반환 된 영역의 단위는 SRS의 단위와 일치합니다. 이것은 프로젝트의 타원체 및 면적 단위 설정을 기반으로 타원체 계산을 수행하는 $ area 함수에 의해 수행되는 계산과 다릅니다.

겹치는 피처 영역을 추가로 계산해야하는 경우이 기능을 사용하십시오.

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info,
            GROUP_CONCAT(round(ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)), 4)) AS a_b_areas
            -- GROUP_CONCAT(round(ST_AREA(b.geometry), 4)) AS b_areas
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

또는 면적 값에 대한 새 필드가있는 필드 계산기에서 :

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:=to_string(round(area(intersection($geometry,geometry(@parent))),4)),
  # expression:=to_string(round(area($geometry),4)), concatenator:=',', filter:=(intersects($geometry,geometry(@parent)) AND area(intersection($geometry,geometry(@parent))) > 80000000)
)