4. 교차#
이전 단원에서 다룬 within
과 contains
처럼 공간적인 관계를 판단하는 것과 유사하게, 두 도형이 교차(intersect)하는지 또는 접촉(touch)하는지 확인하는 쿼리를 작성할 수 있습니다. Shapely
라이브러리를 활용해 아래 두 쿼리를 사용할 수 있습니다.
intersects()
: 한 객체의 경계 또는 내부가 다른 객체의 경계 또는 내부와 교차하는 경우touches()
: 두 객체가 적어도 하나의 공통된 점(point)을 가지고 있으면서 서로 닿지만, 내부는 교차하지 않는 경우
아래 예시에서 두 개의 줄(line)에 대해 위 함수들을 사용해 보겠습니다.
import shapely.geometry as geom
line1 = geom.LineString([(0, 0), (1, 1)])
line2 = geom.LineString([(1, 1), (0, 2)])
두 선 line1
과 line2
이 교차하며, 접촉합니다.
line1.intersects(line2)
True
line1.touches(line2)
True
shapely.geometry.MultiLineString
에 두 줄 line1
과 line2
를 추가하면 Jupyter Notebook 내에서 간단하게 시각화할 수 있습니다.
geom.MultiLineString([line1, line2])
위 그림에서 line1
이 끝나고 line2
가 시작되는 지점인 (1, 1)
을 공유하므로 교차(intersects
)하는 것을 확인할 수 있습니다. 또한 두 선은 내부가 교차되지 않으므로 접촉(touches
)의 조건도 만족하는 것을 확인할 수 있습니다.
만약 줄(line)이 내부의 일부를 공유한다면 접촉으로 간주되지 않습니다. 예를 들어 line1
은 line1
과 교차(intersects
)하지만 내부도 공유하므로 접촉(touches
)에 해당하지는 않습니다.
line1.intersects(line1)
True
line1.touches(line1)
False