https://www.baeldung.com/java-geospatial-applications
https://t1.daumcdn.net/cfile/tistory/24338140578C65662D?original
GIS 애플리케이션 구축 시 요구사항
1.지리 공간 데이터에 대한 실시간 분석을 하는 경우가 많음
수많은 지리 공간 데이터를 저장하고, 대기 시간이 매우 짧은 임의 쿼리를 용이하게 하는 것!
2. 공간 데이터의 특성과 처리가 필요한 이유를 이해하는 것도 중요
도시 주변에 여러 개의 특정 위치가 있다고 가정해보자,
보통 위도, 경도, +고도로 표현된다.
이제 중요한 것은 주어진 위치에 가까운 위치를 찾는 것!
따라서 이 위치에서 가능한 모든 위치까지의 거리를 계산해야 한다.
이때 사용하는 쿼리는 공간쿼리로, 일반 DB 쿼리와는 다르다!
공간쿼리는 Geometry데이터 유형을 포함하고, 이런 기하학 사이의 공간적 관계를 고려한다.
공간 데이터도 인덱싱이 필요하다. 그러나 특성상, 일방 인덱스는 공간 데이터 및 공간 쿼리에 효율적이지 못하다.
따라서 공간 작업을 효율적으로 수행하는데 도움이 되는 공간 인덱스라는 특수 인덱스가 필요하다!
공간 데이터 유형!
이제 여러 유형의 공간 데이터와, 쿼리에 대해 알아보자.
보통 곤간 참조 시스템과 관련하여 공간 데이터에 대해 이야기한다.
보통 좌표계와 데이텀(datum)으로 구성된다.
데이텀은 원점의 위치, 축척 및 좌표계의 방향을 정의하는 매개변수 묶음이다.
보통 데이터베이스는 공간데이터를 2가지 카테고리로 나누어 지원한다.
Gemetry, geography
Geometry는 spatial data를 평면 좌표계(coordinate system)에 저장한다.
이는 점,선,영역 등의 모양을 나타낼 수 있다.
Geography는 둥근 지구좌표계를 기반으로 spatial data를 저장한다.
이는 위도, 경도 좌표를 사용하여 지구 표면에 모양을 나타낼 때 유용하다.
공간 데이터로 할 수 있는 2가지 기본 유형의 조회가 있다.
1. 가장 가까운 위치를 찾거나
2. 다른 유형의 range 쿼리를 보내기
우리는 이미 위에서 가까운 위치를 찾는것을 보았다.
보통은 쿼리 지점에 가장 가까운 특정 수의 항목 확인하는 것이다.
또다른 중요한 쿼리 유형은 range 쿼리이다.
만약 한 지점에서 일정 범위 이내에 떨어져있는 모든 항목을 알고싶다.
쿼리 범위는 한 지점에서 특정 반경을 가진 사각형 또는 원이 될 수 있다.
예를 들어 우리는 이 타입의 쿼리를 현재 위치에서 2마일 이내에 떨어져 있는 모든 이탈리안 레스토랑을 확인할 때 사용할 수 있다.
공간 데이터의 구조
이제 공간 인덱스를 구축하는데 더 적합한 일부 데이터 구조를 이해해보자!
이를 통해 일반 인덱스와 어떻게 다른지, 공간 작업을 처리하는데 더 효율적인 이유를 이해할 수 있다.
일단 거의 모든 데이터 구조는 트리 데이터 구조의 변형이다.
일반 데이터베이스 인덱스
index는 일반적으로 데이 검색 작업 속도를 향상시키는 데이터 구조이다.
key를 가져오는 단계 수를 줄이고, 이를 위한 디스크 작업 수를 줄이는 것이 중요하다.
B-tree 또는 balanced tree는 모든 노드에 정렬된 여러 키-값 쌍을 저장하는 자체 균형 트리 데이터 구조이다.
이렇게 하면 디스크에서 단일 읽기 작업으로 프로세서 캐시에서 더 큰 키 집합을 가져올 수 있따.
공간 데이터베이스 index
공간 프로그램에서는 보통 가까운 지점, 또는 범위 쿼리를 사용한다.
예를 들어 특정 지점에서 10마일 이내의 모든 위치를 찾고 싶어할 수 있다.
일번 DB index는 여기서 유용하지 않다.
따라서 공간인덱스를 구축하는데 더 적합한 다른 데이터 구조가 있다.
가장 일반적으로 사용되는 데이터 구조 중 하나는 R-tree이다.
위치같은 공간 개체를 저장하는데 적합하다.
R 트리는 근처에 있는 객체를 그룹화하고, 트리의 다음 상위 수준에서 최소 경계 사각형으로 표시하는 것이다