프로젝트때 맨날 쓰던건데, 막상 필요할 때 까먹어서 시간 날린 김에 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;
샘플코드
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));
이렇게 하면 좌표계가 서로 맞아 제대로 지오메트리를 추출할 수 있다.
'GIS' 카테고리의 다른 글
[GIS] WMS 배경을 투명하게 만드는 방법 ( transparent 옵션 ) (0) | 2023.03.09 |
---|---|
[GIS] PostGIS : ST_Within함수를 통해 지오메트리의 완전 포함여부를 확인해보자. (0) | 2023.03.04 |
[GIS] 타일 이미지를 Geoserver의 GeoWebCache를 통해 타일링을 떠보자. ( + 타일링을 미리 떠놓는 이유 ) (0) | 2023.02.22 |
[GIS] Geoserver : could not locate a layer or layer group with id... 에러 해결방법 (0) | 2023.02.22 |
[일상] 지오서버에서 레이어 발행시 FileNotFoundException (Is a Directory) 에러를 뱉었던 일 (0) | 2023.02.16 |