GIS

[GIS] PostGIS : ST_Intersects함수를 통해 교차하는 지오메트리를 추출해보자.

모찌바라기 2023. 3. 4. 12:35
728x90
반응형

 

 

 

프로젝트때 맨날 쓰던건데, 막상 필요할 때 까먹어서 시간 날린 김에 ST_Intersects에 대해 정리해봄...

나중에 오나전히 포함하는 ST_within 함수도 정리해볼 생각임..

 

 

ST_Intersects 함수란?

 

ST_Intersects함수는 입력 매개변수(파라메터)로 2개의 형상이 교차하는 경우 1을 리턴한다.

교차하지 않는 경우에는 0을 리턴한다.

 

* 단 두 형상 중 어느 하나가 NULL이거나, 비어있는 경우에는 NULL이 리턴된다.

 

그림으로 대충 보면 다음과 같다.

 

 

PolygonTable1과 PolygonTable2라는 테이블이 있다. 각 테이블은 지오메트리 컬럼을 가지고 있고

PolygonTable1 테이블과 PolygonTable2 테이블의 각 컬럼 중 교차하는 컬럼을 추출 해내고 싶을 때

ST_Intersects 함수를 이용할 수 있다. 

 

만약 위와 같은 상황에서 ST_Intersects함수를 통해 PolygonTable1의 지오메트리를 추출한다면

A, D, F를 포함하는 3개의 row가 추출(true가 리턴) 될 것이다.

 

 

 

ST_Intersects 함수 사용방법

 

 

ST_Intersects 함수는 기본적으로 true 또는 false를 리턴한다.

그렇기 때문에 보통 ST_Intersects함수는 where의 조건절로 주로 사용된다. ( 샘플코드 참조 )

 

 

기본문법

SELECT st_intersects(a.geom, b.geom) FROM PolygonTable1 a, PolygonTable2 b;

 

true 반환

 

샘플코드

SELECT a.geom 
	FROM PolygonTable1 a, PolygonTable2 b
	WHERE st_intersects(a.geom, b.geom);

이렇게 where의 조건절에 사용하면 실제 교차하는 지오메트리를 추출 할 수 있다.

 

지오메트리 추출

 

 

※ 단 두 테이블의 지오메트리 컬럼의 좌표계가 일치해야 한다. 만약 일치 하지 않는다면

    st_transform함수를 통하여 좌표계를 변경해줘야 한다.

 

 

샘플코드

--PolygonTable1의 지오메트리 컬럼의 좌표계는 5174이고,
--PolygonTable2의 지오메트리 컬럼의 좌표계가 4326이라고 한다면
--st_transform함수를 이용하여 PolygonTable2의 지오메트리 컬럼의 좌표계를 5174로 변경하여 사용
SELECT a.geom FROM PolygonTable1 a, PolygonTable2 b 
WHERE st_intersects(a.geom, st_transform(b.geom , 5174));

 

이렇게 하면 좌표계가 서로 맞아 제대로 지오메트리를 추출할 수 있다.

 

 

728x90
반응형