이전 포스팅에서는 공간 데이터 타입에 대해 알아봤습니다.

 

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

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

sparkdia.tistory.com

 

  이제 공간 데이터 타입으로 저장된 공간 데이터를 이용해 연산을 할 수 있는 공간 함수에 대해 알아보겠습니다.

  공간 함수는 공간 관계 함수와 공간 연산 함수로 구분 질 수 있는데, 이 중에서 공간 관계 함수는 두 공간 객체 간의 관계를 일반 데이터 타입(Boolean 또는 숫자)으로 반환해주는 함수입니다.

 

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

 

공간 관계 함수 설명
ST_Equals (g1 Geometry, g2 Geometry)
 : Boolean
g1과 g2가 동일하면 True를 반환하고 상이하다면 False를 반환 
ST_Disjoint (g1 Geometry, g2 Geometry)   
 : Boolean
g1과 g2가 겹치는 곳 없다면 True를 반환하고, 겹치는 곳이 있으면 False를 반환 
ST_Within (g1 Geometry, g2 Geometry)
  : Boolean
g1가 g2 영역 안에 포함된 경우 True를 반환하고 그렇지 않은 경우 False를 반환
ST_Overlaps (g1 Geometry, g2 Geometry) 
 : Boolean
g1과 g2 영역 중 교집합 영역이 존재하는 경우 True를 반환하고 존재하지 않는 경우 False를 반환
ST_Intersects (g1 Geometry, g2 Geometry)  
 : Boolean
g1과 g2 영역 간에 교집합이 존재하는 경우 True를 반환하고 그렇지 않은 경우 False를 반환
ST_Contains (g1 Geometry, g2 Geometry)
 : Boolean
g2가 g1 영역 안에 포함된 경우 True를 반환하고 그렇지 않은 경우 False를 반환
ST_Touches (g1 Geometry, g2 Geometry)
 : Boolean
g1과 g2가 경계 영역에서만 겹치는 경우 결과 값으로 True를 반환하며 경계 영역 외에서 겹치거나 겹치는 곳이 없다면 False를 반환
ST_Distance (g1 Geometry, g2 Geometry)
 : Double
g1과 g2간의 거리를 반환

 

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

SET @p0 = POINT(0,0);

SET @p1 = POINT(1,1);

SET @p2 = POINT(2,2);

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

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

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

 

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

SELECT ST_Equals(@p1, @p1), ST_Equals(@p1, @l1);

SELECT ST_Disjoint(@b1, @p0), ST_Disjoint(@b1, @p2);

SELECT ST_Within(@p2, @b1), ST_Within(@b1, @p2);

SELECT Overlaps(@l1, @l2), Overlaps(@l1, @p1);

SELECT ST_Intersects(@b1, @p2), ST_Intersects(@b1, @p1);

SELECT ST_Contains(@b1, @p2), ST_Contains(@p2, @b1);

SELECT ST_Touches(@b1, @p1), ST_Touches(@b1, @p2);

SELECT ST_Distance(@p1, @p2);

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

 

이어서, 다음 포스트에서는 공간 연산 함수에 대해 설명드리도록 하겠습니다.

 

 

공간 연산 함수(Spatial Operator Functions)

공간 연산 함수를 이해하기에 앞서 아래 포스트를 먼저 참고하실 것을 권장드립니다. 공간 데이터 타입(Spatial Data Type) Spatial(공간) DB가 필요한 이유? 혹시 아래 나열된 서비스나 시스템을 사용해보신 적이..

sparkdia.tistory.com

 

+ Recent posts