공간 연산 함수를 이해하기에 앞서 아래 포스트를 먼저 참고하실 것을 권장드립니다.

 

공간 데이터 타입(Spatial Data Type)

Spatial(공간) DB가 필요한 이유? 혹시 아래 나열된 서비스나 시스템을 사용해보신 적이 있으신가요? 버스정보시스템(버스 실시간 도착 알림) 차량 네비게이션 시스템 지하철 앱 지도 앱 차량 호출 서비스 가까운..

sparkdia.tistory.com

 

공간 관계 함수(Spatial Relation Functions)

이전 포스팅에서는 공간 데이터 타입에 대해 알아봤습니다. 공간 데이터 타입(Spatial Data Type) Spatial(공간) DB가 필요한 이유? 혹시 아래 나열된 서비스나 시스템을 사용해보신 적이 있으신가요? 버스정보시..

sparkdia.tistory.com

 

  공간 연산 함수는 두 공간 객체의 연산 결과로 새로운 공간 객체를 반환해주는 함수입니다.

  MySQL에서 제공해주는 공간 연산 함수 중에서 자주 사용되는 함수는 아래와 같습니다

공간 연산 함수 설명
ST_Intersection (g1 Geometry, g2 Geometry)
 : Geometry
g1과 g2의 교집합인 공간 객체를 반환
ST_Union (g1 Geometry, g2 Geometry)
 : Geometry
g1과 g2의 합집합인 공간 객체를 반환
ST_Difference (g1 Geometry, g2 Geometry)
 : Geometry
g1과 g2의 차집합인 공간 객체를 반환
ST_Buffer (g1 Geometry, d Double )
 : Geometry
g1에서 d 거리만큼 확장된 공간 객체를 반환
ST_Envelope (g1 Geometry)
 : Polygon
g1을 포함하는 최소 MBR인 Polygon을 반환
ST_StartPoint (l1 LineString)
 : Point
l1의 첫 번째 Point를 반환
ST_EndPoint (l1 LineString)
 : Point
l1의 마지막 Point를 반환
ST_PointN (l1 LineString)
 : Point
l1의 n 번째 Point를 반환

 

  MySQL에서 공간 연산 함수의 테스트를 위해 아래 테스트 데이터를 사용자 변수에 저장하도록 하겠습니다.

SET @p0 = POINT(0,0);

SET @p1 = POINT(1,1);

SET @p2 = POINT(2,2);

SET @l1 = ST_GeomFromText('LineString(1 1, 3 3, 5 5, 10 10, 14 14)');

SET @l2 = ST_GeomFromText('LineString(2 2, 8 8)');

SET @b1 = ST_GeomFromText('Polygon((1 1,1 10,10 10,10 1,1 1))');

 

  위에서 정의한 사용자 변수를 가지고 아래와 같이 공간 연산 함수를 테스트해보았습니다.

SELECT ST_AsText(ST_Intersection(@p0, @p1)), ST_AsText(ST_Intersection(@b1, @p2));

SELECT ST_AsText(ST_Union(@p0, @p1)), ST_AsText(ST_Union(@l1, @p1));

SELECT ST_AsText(ST_Difference(@p0, @p1)), ST_AsText(ST_Difference(@l1, @p2));

SELECT ST_AsText(ST_Buffer(@b1,0));

SELECT ST_AsText(ST_Envelope(@l2));

SELECT ST_AsText(ST_StartPoint(@l1));

SELECT ST_AsText(ST_EndPoint(@l1));

SELECT ST_AsText(ST_PointN(@l1,3));

  테스트 결과 화면은 아래와 같습니다.

 

+ Recent posts