본문 바로가기
Database/MARIADB

Mariadb Geo 함수 이용하기, 공간 데이터베이스

by 반화넬 2024. 7. 26.
반응형

 

공간 데이터베이스란 말 그대로 공간 정보를 저장할 수 있는 데이터베이스를 뜻한다.
좀 더 명확한 개념을 이야기해보자면 공간에 존재하는 점, 선, 폴리곤등을 포함하는 객체의 데이터를 저장하고, 검색하는데 최적화된 데이터베이스라고 정의할 수 있다.

공간 데이터베이스는 단순히 공간 데이터를 저장해줄 뿐 아니라 공간 데이터를 활용한 공간 함수을 함께 제공한다.

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

Mysql에서는 공간 데이터를 저장할 수 있도록 타입을 제공하고 있다.

타입정의예시

Point 좌표 공간의 한 지점 POINT(10 10)
LineString 다수의 Point를 연결해주는 선분 LINESTRING(10 10, 20 20, 30 30)
Polygon 다수의 선분들이 연결되어 닫혀있는 상태 POLYGON((10 10, 10 20, 20 10, 10 10))
Multi-Point 다수의 Point 집합 MULTIPOINT(10 10, 20 20)
Multi-LineString 다수의 LineString 집합 MULTILINESTRING((10 10, 20 20), (15 15, 25 25))
Multi-Polygon 다수의 Polygon 집합 MULTIPOLYGON(((10 10, 10 20, 20 10, 10 10)), ((40 40, 30 30, 40 40)))
GeomCollection 모든 공간 데이터들의 집합 GEOMETRYCOLLECTION(POINT(10 10), LINESTRING(20 20, 30 30))



📊 Mysql의 공간 함수

Mysql에서는 다양한 공간 함수를 제공하고 있다. 그 중에서 자주 사용되는 함수들은 아래의 표와 같다.

공간 연산 함수기능

ST_Intersection (g1 Geometry, g2 Geometry) : Geometry g1과 g2의 교집합인 공간 객체를 반환한다
ST_Buffer (g1 Geometry, d Double ) : Geometry g1에서 d 거리만큼 확장된 공간 객체를 반환한다
ST_StartPoint (l1 LineString) : Point l1의 첫 번째 Point를 반환한다
ST_EndPoint (l1 LineString) : Point l1의 마지막 Point를 반환한다
ST_PointN (l1 LineString) : Point l1의 n번째 Point를 반환한다

 

공간 관계 함수기능

ST_Equals (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_Distance (g1 Geometry, g2 Geometry): Double g1과 g2간의 거리를 반환한다

다양한 함수들이 많으니 공식 문서를 참고해서 원하는 기능의 함수를 잘 찾아서 사용하면 좋을 것 같다.
Mysql 공간 함수

 

 

좌표 사이의 거리 구하기

제가 사용중인 MySQL 8.0 버전에서 두 좌표의 거리를 계산할 수 있게 해주는

ST_Distance_Sphere 라는 함수를 사용할 수 있습니다

내용은 간단합니다

ST_Distance_Sphere(g1: geometry, g2: geometry)

Point는 geometry형에 속하므로 g1, g2에 Point 자료형을 넣어서 계산해주면 됩니다

실제로 실행해보겠습니다

SET @my_home = Point(127.0569, 37.2876);
SELECT id, name, ST_Distance_Sphere(coordinates, @my_home) as 'distance' FROM locations;

결과는 meter 기준입니다

km로 변환하면 13856.469km가 나오네요

 

 

############ 참고 설명 ############ 

기하학 인수는 (경도, 위도) 좌표 값을 지정하는 점으로 구성되어야 합니다.

경도와 위도는 각각 해당 지점의 첫 번째 좌표와 두 번째 좌표입니다.

두 좌표 모두 각도입니다.

경도 값은 (-180, 180] 범위에 있어야 합니다. 양수 값은 본초 자오선 동쪽입니다.

위도 값은 [-90, 90] 범위에 있어야 합니다. 양수 값은 적도 북쪽입니다.

반응형