SlideShare a Scribd company logo
1 of 20
Download to read offline
공간 데이터베이스
2020-04
H.J. Sim
Copyright⒞ 2020. H.J. Sim. All rights reserved.
목차
1. 일반 RDBMS에서의 공간 데이터 표현
2. OGC
3. 공간 데이터 타입
4. 공간 관계 함수
5. 공간 연산 함수
6. 공간 데이터베이스 활용
7. 공간 인덱스 R-Tree
2
Copyright⒞ 2020. H.J. Sim. All rights reserved.
1. 일반 RDBMS에서의 공간 데이터 표현
• 건물영역(다각형)좌표 저장을 위한 RDBMS 데이터 모델
3
- Case 1: 건물영역좌표 엔터티 생성 - Case 2: 건물영역좌표를 하나의 문자열로 입력
건물ID 건물좌표일련번호 X좌표 Y좌표
10 1 x1 y1
10 2 x2 y2
…
10 N xn yn
건물ID … 건물영역좌표
10 … x1 y1, x2 y2, … xn yn
공간 연산을 위해서 건물영역좌표 값을
분해하는 작업이 선행되어야 함.
저장 공간이 증가.
하나의 건물영역좌표가 다수의 블록에
분산되어 저장될 가능성이 높음.
Copyright⒞ 2020. H.J. Sim. All rights reserved.
1. 일반 DBMS에서의 공간 데이터 표현
4
• Case 1: 건물영역좌표 엔터티 생성
건물ID 건물좌표일련번호 X좌표 Y좌표
10 1 x1 y1
10 2 x2 y2
…
10 N xn yn
별도의 엔터티 생성이 필요하며,
좌표 값을 구별하기 위한 식별자 데
이터가 필요함.
건물영역은 다각형 형태이므로 건물영역좌표는
다수의 점 좌표로 구성.
하나의 건물영역좌표가 다수의 로우로 저장되므로
다수의 블록에 분산되어 저장될 가능성이 높음.
Data block Data block Data block
Data block Data block Data block
.
.
.
좌표 데이터 액세스 시 블록 액세스 횟수가 증가되어 성능 저하의 원인이 됨
. . .
. . .
Copyright⒞ 2020. H.J. Sim. All rights reserved.
1. 일반 DBMS에서의 공간 데이터 표현
• Case 2: 건물영역좌표를 하나의 문자열로 입력
– 예: 사용자 위치에서 가까운 순서대로 'GAS STATION'목록을 조회하는 SQL (Oracle)
5
WITH BLDS AS (
SELECT S.STORE_ID
, S.STORE_NM
, B.BLD_ID
, B.BLD_ADDR
, B.BLD_AREA_CRD
FROM STORE S
, BLD B
WHERE S.STORE_TYPE = 'GAS STATION'
AND S.BLD_ID = B.BLD_ID
)
SELECT STORE_ID
, STORE_NM
, BLD_ID
, BLD_ADDR
, DIST
FROM (
SELECT STORE_ID
, STORE_NM
, BLD_ID
, BLD_ADDR
, DIST
, ROW_NUMBER()
OVER(PARTITION BY BLD_ID
ORDER BY DIST) CRD_RN
FROM (
SELECT STORE_ID
, STORE_NM
, BLD_ID
, BLD_ADDR
, SQRT(ABS(POWER(REGEXP_SUBSTR(BLD_CRD, '[^ ]+', 1, 1) - :USER_X_CRD, 2))
+ ABS(POWER(REGEXP_SUBSTR(BLD_CRD, '[^ ]+', 1, 2) - :USER_Y_CRD, 2))) AS DIST
FROM (
SELECT STORE_ID
, STORE_NM
, BLD_ID
, BLD_ADDR
, BLD_CRD_SEQ
, REGEXP_SUBSTR(BLD_AREA_CRD, '[^,]+', 1, BLD_CRD_SEQ) AS BLD_CRD
FROM BLDS
, (SELECT LEVEL AS BLD_CRD_SEQ
FROM DUAL
CONNECT BY LEVEL
<= ( SELECT MAX( LENGTH(BLD_AREA_CRD)
- LENGTH(REPLACE(BLD_AREA_CRD, ',', ''))) + 1 FROM BLDS ) ) L
) A
WHERE BLD_CRD IS NOT NULL
) B
) C
WHERE C.CRD_RN = 1
ORDER BY DIST;
공간 연산 처리가 복잡하며, 쿼리가 길어져 가독성이 떨어짐.
공간 연산을 위해
문자열 형태(x1 y1, x2 y2, … xn yn)인 좌표 값을
점 좌표(x, y)로 변환하는 작업 필요.
Copyright⒞ 2020. H.J. Sim. All rights reserved.
2. OGC
• Open Geospatial Consortium
– 공간 정보에 관한 표준화 작업을 주도하고 있는 기관
– URL : http://www.ogc.org/
– Oracle, MS SQL Server, MySQL, MariaDB, PostgreSQL 등 다양한 DBMS에서 적용되어 공간 데이터를 저장,
관리, 액세스 할 수 있는 공간 데이터 타입과 함수를 지원
[ 표준 Spec. ]
6
Copyright⒞ 2020. H.J. Sim. All rights reserved.
3. 공간 데이터 타입 (1/3)
• 다차원의 공간 데이터를 저장할 수 있는 다양한 공간 데이터 타입이 존재
• MySQL에서는 아래와 같은 공간 데이터 타입을 지원
공간
데이터 타입
정의 SQL 예제
Point
좌표 공간에서 한 지점의 위치를
표시
POINT (10 10)
LineString 다수의 Point를 연결해주는 선분 LINESTRING (10 10, 20 25, 15 40)
Polygon
다수의 선분들이 연결되어 닫혀
있는 상태인 다각형
POLYGON ((10 10, 10 20, 20 20, 20 10, 10 10))
(1) Point (2) LineString (3) Polygon
7
Copyright⒞ 2020. H.J. Sim. All rights reserved.
3. 공간 데이터 타입 (2/3)
• 다차원의 공간 데이터를 저장할 수 있는 다양한 공간 데이터 타입이 존재
• MySQL에서는 아래와 같은 공간 데이터 타입을 지원
(4) Multi-Point (5) Multi-LineString (6) Multi-Polygon (7) GeomCollection
공간
데이터 타입
정의 SQL 예제
Multi-Point 다수 개의 Point 집합 MULTIPOINT (10 10, 30 20)
Multi-LineString 다수 개의 LineString 집합 MULTILINESTRING ((10 10, 20 20), (20 15, 30 40))
Multi-Polygon 다수 개의 Polygon 집합
MULTIPOLYGON ((( 10 10, 15 10, 20 15, 20 25, 15
20, 10 10 )) , (( 40 25, 50 40, 35 35, 25 10, 40 25 )) )
GeomCollection 모든 공간 데이터들의 집합
GEOMETRYCOLLECTION ( POINT (10 10),
LINESTRING (20 20, 30 40), POINT (30 15) )
8
Copyright⒞ 2020. H.J. Sim. All rights reserved.
3. 공간 데이터 타입 (3/3)
• 공간 데이터 타입 사용
– 테이블 생성 및 공간 데이터 입력 예제
9
Copyright⒞ 2020. H.J. Sim. All rights reserved.
4. 공간 관계 함수 (1/4)
• 두 개의 공간 객체간의 관계를 일반 데이터 타입(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를 반환
(1) ST_Equals
g1 g2
(2) ST_Disjoint
g1 g2
g1
g2
(3) ST_Within
g1
g2
(4) ST_Overlaps
g1
g2
g1
g2
10
Copyright⒞ 2020. H.J. Sim. All rights reserved.
4. 공간 관계 함수 (2/4)
• 두 개의 공간 객체간의 관계를 일반 데이터 타입(Boolean 또는 숫자)으로 반환해 주는 함수
• MySQL에서는 아래와 같은 공간 관계 함수를 지원
공간 관계 함수 설명
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를
반환하며 경계 영역 외에서 겹치거나 겹치는 곳이 없다면 Fa
lse를 반환
ST_Distance (g1 Geometry, g2 Geometry)
: Double
g1과 g2간의 거리를 반환
(7) ST_Touches(5) ST_Intersects (6) ST_Contains
g2
g1
g1
g2
g1
g2
g2
g2
g1
11
Copyright⒞ 2020. H.J. Sim. All rights reserved.
4. 공간 관계 함수 (3/4)
• 공간 관계 함수 사용 예
(1,1) (10,1)
(10,10)(1,10)
(2,2)
(3,3)
(4,4)
(0,0)
p0 : POINT(0,0)
p1 : POINT(1,1)
p2 : POINT(2,2)
l1 : LINESTRING(1 1, 3 3)
l2 : LINESTRING(2 2, 4 4)
b1 : Polygon(1 1,1 10,10
10,10 1,1 1)
12
Copyright⒞ 2020. H.J. Sim. All rights reserved.
4. 공간 관계 함수 (4/4)
• 공간 관계 함수 사용 예
(1,1) (10,1)
(10,10)(1,10)
(2,2)
(3,3)
(4,4)
(0,0)
p0 : POINT(0,0)
p1 : POINT(1,1)
p2 : POINT(2,2)
l1 : LINESTRING(1 1, 3 3)
l2 : LINESTRING(2 2, 4 4)
b1 : Polygon(1 1,1 10,10
10,10 1,1 1)
13
Copyright⒞ 2020. H.J. Sim. All rights reserved.
5. 공간 연산 함수 (1/5)
• 두 개의 공간 객체의 연산 결과를 공간 객체로 반환해 주는 함수
• 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 거리만큼 확장된 공간 객체를 반환
(1) ST_Intersection (2) ST_Union (3) ST_Difference (4) ST_Buffer
g1
g2
g1
g2
g1
g2 n
g1
14
Copyright⒞ 2020. H.J. Sim. All rights reserved.
5. 공간 연산 함수 (2/5)
• 두 개의 공간 객체의 연산 결과를 공간 객체로 반환해 주는 함수
• MySQL에서는 아래와 같은 공간 관계 함수를 지원
(7) ST_EndPoint(5) ST_Envelope (6) ST_StartPoint
g1
(8) ST_PointN
g1 g1
n = 3
g1
공간 연산 함수 설명
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를 반환
15
Copyright⒞ 2020. H.J. Sim. All rights reserved.
5. 공간 연산 함수 (3/5)
• 공간 연산 함수 사용 예
p0 : POINT(0,0)
p1 : POINT(1,1)
p2 : POINT(2,2)
l1 : LINESTRING(1 1, 3 3,
5 5, 10 10, 14 14)
l2 : LINESTRING(2 2, 8 8)
b1 : Polygon(1 1,1 10,10
10,10 1,1 1)
(10,1)
(10,10)(1,10)
(0,0)
(1,1)
(2,2)
(3,3)
(4,4)
(14,14)
(8,8)
16
Copyright⒞ 2020. H.J. Sim. All rights reserved.
5. 공간 연산 함수 (4/5)
• 공간 연산 함수 사용 예
p0 : POINT(0,0)
p1 : POINT(1,1)
p2 : POINT(2,2)
l1 : LINESTRING(1 1, 3 3,
5 5, 10 10, 14 14)
l2 : LINESTRING(2 2, 8 8)
b1 : Polygon(1 1,1 10,10
10,10 1,1 1)
(10,1)
(10,10)(1,10)
(0,0)
(1,1)
(2,2)
(3,3)
(4,4)
(14,14)
(8,8)
17
Copyright⒞ 2020. H.J. Sim. All rights reserved.
5. 공간 연산 함수 (5/5)
• 공간 연산 함수 사용 예
p0 : POINT(0,0)
p1 : POINT(1,1)
p2 : POINT(2,2)
l1 : LINESTRING(1 1, 3 3,
5 5, 10 10, 14 14)
l2 : LINESTRING(2 2, 8 8)
b1 : Polygon(1 1,1 10,10
10,10 1,1 1)
(10,1)
(10,10)(1,10)
(0,0)
(1,1)
(2,2)
(3,3)
(4,4)
(14,14)
(8,8)
18
Copyright⒞ 2020. H.J. Sim. All rights reserved.
6. 공간 데이터베이스 활용
• 공간 데이터베이스를 사용한 위치 기반 상점 검색 예
– 건물영역(다각형)좌표 저장을 위한 공간 데이터 모델
– 사용자 위치에서 가까운 'GAS STATION'목록을 상위 30건까지 조회하는 SQL (MySQL)
SELECT S.STORE_ID
, S.STORE_NM
, B.BLD_ID
, B.BLD_ADDR
, B.BLD_POLYGON
, ST_DISTANCE(B.BLD_ POLYGON, POINT(@USER_X_CRD, @USER_Y_CRD) ) DIST
FROM STORE S
, BLD B
WHERE S.STORE_TYPE = 'GAS STATION'
AND S.BLD_ID = B.BLD_ID
ORDER BY DIST;
19
공간 데이터 타입 사용으로
좌표를 저장하는 별도 엔터티 불필요
공간데이터 타입(Polygon) 사용
다양한 공간 연산이 가능
공간 연산자 사용으로 간결한 쿼리 작성 가능
건물ID … 건물Polygon
10 … Polygon(x1 y1, x2 y2, … xn yn)
Copyright⒞ 2020. H.J. Sim. All rights reserved.
7. 공간 인덱스 R-Tree
• R-Tree
– 공간 객체를 검색하기 위한 동적 인덱스 구조
– 리프 노드에 다차원 공간 객체의 위치 정보를 저장하고 있는 높이 균형 Tree
– 조회하고자 하는 공간 객체에 포함/교차되는 공간 데이터를 빠르게 검색 가능함
– 각 공간 객체는 객체가 포함되는 최소 경계 사각형인 MBR(Minimum Bounding Rectangle)로 표현됨
– 상위 노드는 하위 노드의 MBR을 모두 포함하는 MBR로 표현됨
– 중간 노드는 레벨이 같은 다른 중간 노드와 겹치는 영역이 존재함
– 신규 인덱스 엔트리가 추가 시 삽입될 노드의 선택 기준은 가장 가까우며 확장을 최소화 할 수 있는 노드임
R4R3
21 4 53 76
R2R1
9 108 1211
R6 R7R5
6
R
1
R1
R2
R3
R4
R5
R6
R7
2
5
4
3
7
8
10
9
11
12
공간
데이터
객체
( I , child-point )
( I , tuple-identifier )
* I : 하위 노드 내 MBR 집합
20

More Related Content

What's hot

공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습HaNJiN Lee
 
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판BJ Jang
 
[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해Kwang Woo NAM
 
오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용SANGHEE SHIN
 
공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재JungHwan Yun
 
지리정보체계(GIS) - [2] 좌표계 이해하기
지리정보체계(GIS) - [2] 좌표계 이해하기지리정보체계(GIS) - [2] 좌표계 이해하기
지리정보체계(GIS) - [2] 좌표계 이해하기Byeong-Hyeok Yu
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기Byeong-Hyeok Yu
 
Qgis 기초 2019
Qgis 기초 2019Qgis 기초 2019
Qgis 기초 2019Joonho Lee
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례BJ Jang
 
공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습BJ Jang
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)Byeong-Hyeok Yu
 
분석가과정Day2 공간분석과 시각화 slideshare
분석가과정Day2 공간분석과 시각화 slideshare분석가과정Day2 공간분석과 시각화 slideshare
분석가과정Day2 공간분석과 시각화 slideshareYongjae Park
 
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스Kyu-sung Choi
 
오픈소스 GIS 실습 (2)
오픈소스 GIS 실습 (2)오픈소스 GIS 실습 (2)
오픈소스 GIS 실습 (2)Byeong-Hyeok Yu
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)Byeong-Hyeok Yu
 
FOSS4G Firenze 2022 참가기
FOSS4G Firenze 2022 참가기FOSS4G Firenze 2022 참가기
FOSS4G Firenze 2022 참가기SANGHEE SHIN
 
공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정BJ Jang
 
超初心者向けハンズオン講座 「ゼロから始めるQGIS」
超初心者向けハンズオン講座 「ゼロから始めるQGIS」超初心者向けハンズオン講座 「ゼロから始めるQGIS」
超初心者向けハンズオン講座 「ゼロから始めるQGIS」Kazutaka ishizaki
 

What's hot (20)

공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
 
[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L06 GIS의 이해
 
오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용오픈소스GIS의 이해와 활용
오픈소스GIS의 이해와 활용
 
공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재
 
지리정보체계(GIS) - [2] 좌표계 이해하기
지리정보체계(GIS) - [2] 좌표계 이해하기지리정보체계(GIS) - [2] 좌표계 이해하기
지리정보체계(GIS) - [2] 좌표계 이해하기
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
 
Qgis 기초 2019
Qgis 기초 2019Qgis 기초 2019
Qgis 기초 2019
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
 
Gis개론
Gis개론Gis개론
Gis개론
 
공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)
 
분석가과정Day2 공간분석과 시각화 slideshare
분석가과정Day2 공간분석과 시각화 slideshare분석가과정Day2 공간분석과 시각화 slideshare
분석가과정Day2 공간분석과 시각화 slideshare
 
PostGIS 시작하기
PostGIS 시작하기PostGIS 시작하기
PostGIS 시작하기
 
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스
OpenStreetMap 기반의 Mapbox 오픈소스 매핑 서비스
 
오픈소스 GIS 실습 (2)
오픈소스 GIS 실습 (2)오픈소스 GIS 실습 (2)
오픈소스 GIS 실습 (2)
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)
 
FOSS4G Firenze 2022 참가기
FOSS4G Firenze 2022 참가기FOSS4G Firenze 2022 참가기
FOSS4G Firenze 2022 참가기
 
공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정
 
超初心者向けハンズオン講座 「ゼロから始めるQGIS」
超初心者向けハンズオン講座 「ゼロから始めるQGIS」超初心者向けハンズオン講座 「ゼロから始めるQGIS」
超初心者向けハンズオン講座 「ゼロから始めるQGIS」
 

Similar to 공간데이터베이스(Spatial db)

함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking재문 심
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째Jaeseok Park
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택JinTaek Seo
 
Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환BJ Jang
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국hanbeom Park
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
Bs webgl소모임002
Bs webgl소모임002Bs webgl소모임002
Bs webgl소모임002Seonki Paik
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법 2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법 Amazon Web Services Korea
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째Jaeseok Park
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)주영 송
 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungeescor7910
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례HaNJiN Lee
 

Similar to 공간데이터베이스(Spatial db) (20)

함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택
 
Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
Bs webgl소모임002
Bs webgl소모임002Bs webgl소모임002
Bs webgl소모임002
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법 2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법
2017 AWS DB Day | 개발자가 알아야 할 Amazon DynamoDB 활용법
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungee
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례오픈소스기반 상용소프트웨어 GXT의 적용사례
오픈소스기반 상용소프트웨어 GXT의 적용사례
 

공간데이터베이스(Spatial db)

  • 2. Copyright⒞ 2020. H.J. Sim. All rights reserved. 목차 1. 일반 RDBMS에서의 공간 데이터 표현 2. OGC 3. 공간 데이터 타입 4. 공간 관계 함수 5. 공간 연산 함수 6. 공간 데이터베이스 활용 7. 공간 인덱스 R-Tree 2
  • 3. Copyright⒞ 2020. H.J. Sim. All rights reserved. 1. 일반 RDBMS에서의 공간 데이터 표현 • 건물영역(다각형)좌표 저장을 위한 RDBMS 데이터 모델 3 - Case 1: 건물영역좌표 엔터티 생성 - Case 2: 건물영역좌표를 하나의 문자열로 입력 건물ID 건물좌표일련번호 X좌표 Y좌표 10 1 x1 y1 10 2 x2 y2 … 10 N xn yn 건물ID … 건물영역좌표 10 … x1 y1, x2 y2, … xn yn 공간 연산을 위해서 건물영역좌표 값을 분해하는 작업이 선행되어야 함. 저장 공간이 증가. 하나의 건물영역좌표가 다수의 블록에 분산되어 저장될 가능성이 높음.
  • 4. Copyright⒞ 2020. H.J. Sim. All rights reserved. 1. 일반 DBMS에서의 공간 데이터 표현 4 • Case 1: 건물영역좌표 엔터티 생성 건물ID 건물좌표일련번호 X좌표 Y좌표 10 1 x1 y1 10 2 x2 y2 … 10 N xn yn 별도의 엔터티 생성이 필요하며, 좌표 값을 구별하기 위한 식별자 데 이터가 필요함. 건물영역은 다각형 형태이므로 건물영역좌표는 다수의 점 좌표로 구성. 하나의 건물영역좌표가 다수의 로우로 저장되므로 다수의 블록에 분산되어 저장될 가능성이 높음. Data block Data block Data block Data block Data block Data block . . . 좌표 데이터 액세스 시 블록 액세스 횟수가 증가되어 성능 저하의 원인이 됨 . . . . . .
  • 5. Copyright⒞ 2020. H.J. Sim. All rights reserved. 1. 일반 DBMS에서의 공간 데이터 표현 • Case 2: 건물영역좌표를 하나의 문자열로 입력 – 예: 사용자 위치에서 가까운 순서대로 'GAS STATION'목록을 조회하는 SQL (Oracle) 5 WITH BLDS AS ( SELECT S.STORE_ID , S.STORE_NM , B.BLD_ID , B.BLD_ADDR , B.BLD_AREA_CRD FROM STORE S , BLD B WHERE S.STORE_TYPE = 'GAS STATION' AND S.BLD_ID = B.BLD_ID ) SELECT STORE_ID , STORE_NM , BLD_ID , BLD_ADDR , DIST FROM ( SELECT STORE_ID , STORE_NM , BLD_ID , BLD_ADDR , DIST , ROW_NUMBER() OVER(PARTITION BY BLD_ID ORDER BY DIST) CRD_RN FROM ( SELECT STORE_ID , STORE_NM , BLD_ID , BLD_ADDR , SQRT(ABS(POWER(REGEXP_SUBSTR(BLD_CRD, '[^ ]+', 1, 1) - :USER_X_CRD, 2)) + ABS(POWER(REGEXP_SUBSTR(BLD_CRD, '[^ ]+', 1, 2) - :USER_Y_CRD, 2))) AS DIST FROM ( SELECT STORE_ID , STORE_NM , BLD_ID , BLD_ADDR , BLD_CRD_SEQ , REGEXP_SUBSTR(BLD_AREA_CRD, '[^,]+', 1, BLD_CRD_SEQ) AS BLD_CRD FROM BLDS , (SELECT LEVEL AS BLD_CRD_SEQ FROM DUAL CONNECT BY LEVEL <= ( SELECT MAX( LENGTH(BLD_AREA_CRD) - LENGTH(REPLACE(BLD_AREA_CRD, ',', ''))) + 1 FROM BLDS ) ) L ) A WHERE BLD_CRD IS NOT NULL ) B ) C WHERE C.CRD_RN = 1 ORDER BY DIST; 공간 연산 처리가 복잡하며, 쿼리가 길어져 가독성이 떨어짐. 공간 연산을 위해 문자열 형태(x1 y1, x2 y2, … xn yn)인 좌표 값을 점 좌표(x, y)로 변환하는 작업 필요.
  • 6. Copyright⒞ 2020. H.J. Sim. All rights reserved. 2. OGC • Open Geospatial Consortium – 공간 정보에 관한 표준화 작업을 주도하고 있는 기관 – URL : http://www.ogc.org/ – Oracle, MS SQL Server, MySQL, MariaDB, PostgreSQL 등 다양한 DBMS에서 적용되어 공간 데이터를 저장, 관리, 액세스 할 수 있는 공간 데이터 타입과 함수를 지원 [ 표준 Spec. ] 6
  • 7. Copyright⒞ 2020. H.J. Sim. All rights reserved. 3. 공간 데이터 타입 (1/3) • 다차원의 공간 데이터를 저장할 수 있는 다양한 공간 데이터 타입이 존재 • MySQL에서는 아래와 같은 공간 데이터 타입을 지원 공간 데이터 타입 정의 SQL 예제 Point 좌표 공간에서 한 지점의 위치를 표시 POINT (10 10) LineString 다수의 Point를 연결해주는 선분 LINESTRING (10 10, 20 25, 15 40) Polygon 다수의 선분들이 연결되어 닫혀 있는 상태인 다각형 POLYGON ((10 10, 10 20, 20 20, 20 10, 10 10)) (1) Point (2) LineString (3) Polygon 7
  • 8. Copyright⒞ 2020. H.J. Sim. All rights reserved. 3. 공간 데이터 타입 (2/3) • 다차원의 공간 데이터를 저장할 수 있는 다양한 공간 데이터 타입이 존재 • MySQL에서는 아래와 같은 공간 데이터 타입을 지원 (4) Multi-Point (5) Multi-LineString (6) Multi-Polygon (7) GeomCollection 공간 데이터 타입 정의 SQL 예제 Multi-Point 다수 개의 Point 집합 MULTIPOINT (10 10, 30 20) Multi-LineString 다수 개의 LineString 집합 MULTILINESTRING ((10 10, 20 20), (20 15, 30 40)) Multi-Polygon 다수 개의 Polygon 집합 MULTIPOLYGON ((( 10 10, 15 10, 20 15, 20 25, 15 20, 10 10 )) , (( 40 25, 50 40, 35 35, 25 10, 40 25 )) ) GeomCollection 모든 공간 데이터들의 집합 GEOMETRYCOLLECTION ( POINT (10 10), LINESTRING (20 20, 30 40), POINT (30 15) ) 8
  • 9. Copyright⒞ 2020. H.J. Sim. All rights reserved. 3. 공간 데이터 타입 (3/3) • 공간 데이터 타입 사용 – 테이블 생성 및 공간 데이터 입력 예제 9
  • 10. Copyright⒞ 2020. H.J. Sim. All rights reserved. 4. 공간 관계 함수 (1/4) • 두 개의 공간 객체간의 관계를 일반 데이터 타입(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를 반환 (1) ST_Equals g1 g2 (2) ST_Disjoint g1 g2 g1 g2 (3) ST_Within g1 g2 (4) ST_Overlaps g1 g2 g1 g2 10
  • 11. Copyright⒞ 2020. H.J. Sim. All rights reserved. 4. 공간 관계 함수 (2/4) • 두 개의 공간 객체간의 관계를 일반 데이터 타입(Boolean 또는 숫자)으로 반환해 주는 함수 • MySQL에서는 아래와 같은 공간 관계 함수를 지원 공간 관계 함수 설명 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를 반환하며 경계 영역 외에서 겹치거나 겹치는 곳이 없다면 Fa lse를 반환 ST_Distance (g1 Geometry, g2 Geometry) : Double g1과 g2간의 거리를 반환 (7) ST_Touches(5) ST_Intersects (6) ST_Contains g2 g1 g1 g2 g1 g2 g2 g2 g1 11
  • 12. Copyright⒞ 2020. H.J. Sim. All rights reserved. 4. 공간 관계 함수 (3/4) • 공간 관계 함수 사용 예 (1,1) (10,1) (10,10)(1,10) (2,2) (3,3) (4,4) (0,0) p0 : POINT(0,0) p1 : POINT(1,1) p2 : POINT(2,2) l1 : LINESTRING(1 1, 3 3) l2 : LINESTRING(2 2, 4 4) b1 : Polygon(1 1,1 10,10 10,10 1,1 1) 12
  • 13. Copyright⒞ 2020. H.J. Sim. All rights reserved. 4. 공간 관계 함수 (4/4) • 공간 관계 함수 사용 예 (1,1) (10,1) (10,10)(1,10) (2,2) (3,3) (4,4) (0,0) p0 : POINT(0,0) p1 : POINT(1,1) p2 : POINT(2,2) l1 : LINESTRING(1 1, 3 3) l2 : LINESTRING(2 2, 4 4) b1 : Polygon(1 1,1 10,10 10,10 1,1 1) 13
  • 14. Copyright⒞ 2020. H.J. Sim. All rights reserved. 5. 공간 연산 함수 (1/5) • 두 개의 공간 객체의 연산 결과를 공간 객체로 반환해 주는 함수 • 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 거리만큼 확장된 공간 객체를 반환 (1) ST_Intersection (2) ST_Union (3) ST_Difference (4) ST_Buffer g1 g2 g1 g2 g1 g2 n g1 14
  • 15. Copyright⒞ 2020. H.J. Sim. All rights reserved. 5. 공간 연산 함수 (2/5) • 두 개의 공간 객체의 연산 결과를 공간 객체로 반환해 주는 함수 • MySQL에서는 아래와 같은 공간 관계 함수를 지원 (7) ST_EndPoint(5) ST_Envelope (6) ST_StartPoint g1 (8) ST_PointN g1 g1 n = 3 g1 공간 연산 함수 설명 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를 반환 15
  • 16. Copyright⒞ 2020. H.J. Sim. All rights reserved. 5. 공간 연산 함수 (3/5) • 공간 연산 함수 사용 예 p0 : POINT(0,0) p1 : POINT(1,1) p2 : POINT(2,2) l1 : LINESTRING(1 1, 3 3, 5 5, 10 10, 14 14) l2 : LINESTRING(2 2, 8 8) b1 : Polygon(1 1,1 10,10 10,10 1,1 1) (10,1) (10,10)(1,10) (0,0) (1,1) (2,2) (3,3) (4,4) (14,14) (8,8) 16
  • 17. Copyright⒞ 2020. H.J. Sim. All rights reserved. 5. 공간 연산 함수 (4/5) • 공간 연산 함수 사용 예 p0 : POINT(0,0) p1 : POINT(1,1) p2 : POINT(2,2) l1 : LINESTRING(1 1, 3 3, 5 5, 10 10, 14 14) l2 : LINESTRING(2 2, 8 8) b1 : Polygon(1 1,1 10,10 10,10 1,1 1) (10,1) (10,10)(1,10) (0,0) (1,1) (2,2) (3,3) (4,4) (14,14) (8,8) 17
  • 18. Copyright⒞ 2020. H.J. Sim. All rights reserved. 5. 공간 연산 함수 (5/5) • 공간 연산 함수 사용 예 p0 : POINT(0,0) p1 : POINT(1,1) p2 : POINT(2,2) l1 : LINESTRING(1 1, 3 3, 5 5, 10 10, 14 14) l2 : LINESTRING(2 2, 8 8) b1 : Polygon(1 1,1 10,10 10,10 1,1 1) (10,1) (10,10)(1,10) (0,0) (1,1) (2,2) (3,3) (4,4) (14,14) (8,8) 18
  • 19. Copyright⒞ 2020. H.J. Sim. All rights reserved. 6. 공간 데이터베이스 활용 • 공간 데이터베이스를 사용한 위치 기반 상점 검색 예 – 건물영역(다각형)좌표 저장을 위한 공간 데이터 모델 – 사용자 위치에서 가까운 'GAS STATION'목록을 상위 30건까지 조회하는 SQL (MySQL) SELECT S.STORE_ID , S.STORE_NM , B.BLD_ID , B.BLD_ADDR , B.BLD_POLYGON , ST_DISTANCE(B.BLD_ POLYGON, POINT(@USER_X_CRD, @USER_Y_CRD) ) DIST FROM STORE S , BLD B WHERE S.STORE_TYPE = 'GAS STATION' AND S.BLD_ID = B.BLD_ID ORDER BY DIST; 19 공간 데이터 타입 사용으로 좌표를 저장하는 별도 엔터티 불필요 공간데이터 타입(Polygon) 사용 다양한 공간 연산이 가능 공간 연산자 사용으로 간결한 쿼리 작성 가능 건물ID … 건물Polygon 10 … Polygon(x1 y1, x2 y2, … xn yn)
  • 20. Copyright⒞ 2020. H.J. Sim. All rights reserved. 7. 공간 인덱스 R-Tree • R-Tree – 공간 객체를 검색하기 위한 동적 인덱스 구조 – 리프 노드에 다차원 공간 객체의 위치 정보를 저장하고 있는 높이 균형 Tree – 조회하고자 하는 공간 객체에 포함/교차되는 공간 데이터를 빠르게 검색 가능함 – 각 공간 객체는 객체가 포함되는 최소 경계 사각형인 MBR(Minimum Bounding Rectangle)로 표현됨 – 상위 노드는 하위 노드의 MBR을 모두 포함하는 MBR로 표현됨 – 중간 노드는 레벨이 같은 다른 중간 노드와 겹치는 영역이 존재함 – 신규 인덱스 엔트리가 추가 시 삽입될 노드의 선택 기준은 가장 가까우며 확장을 최소화 할 수 있는 노드임 R4R3 21 4 53 76 R2R1 9 108 1211 R6 R7R5 6 R 1 R1 R2 R3 R4 R5 R6 R7 2 5 4 3 7 8 10 9 11 12 공간 데이터 객체 ( I , child-point ) ( I , tuple-identifier ) * I : 하위 노드 내 MBR 집합 20