4. 교차#


 이전 단원에서 다룬 withincontains처럼 공간적인 관계를 판단하는 것과 유사하게, 두 도형이 교차(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)])

 두 선 line1line2이 교차하며, 접촉합니다.

line1.intersects(line2)
True
line1.touches(line2)
True

shapely.geometry.MultiLineString에 두 줄 line1line2를 추가하면 Jupyter Notebook 내에서 간단하게 시각화할 수 있습니다.

geom.MultiLineString([line1, line2])
../../_images/11da88e78204634e71bb08019c239f070d997e170c43b72991e23afb51f9b7f2.svg

 위 그림에서 line1이 끝나고 line2가 시작되는 지점인 (1, 1)을 공유하므로 교차(intersects)하는 것을 확인할 수 있습니다. 또한 두 선은 내부가 교차되지 않으므로 접촉(touches)의 조건도 만족하는 것을 확인할 수 있습니다.

 만약 줄(line)이 내부의 일부를 공유한다면 접촉으로 간주되지 않습니다. 예를 들어 line1line1과 교차(intersects)하지만 내부도 공유하므로 접촉(touches)에 해당하지는 않습니다.

line1.intersects(line1)
True
line1.touches(line1)
False