logo

𝝅번째 알파카의 개발 낙서장

OpenLayers를 여행하는 개발자를 위한 안내서 - 6. 공간정보의 DB화

프로젝트
⏰ 2022-03-04 19:35:41

D O W N

https://user-images.githubusercontent.com/50317129/156607880-c5abad92-1991-4c01-b85f-7153bf89cb64.png
OpenLayers를 여행하는 개발자를 위한 안내서
이 게시글은 OpenLayers를 여행하는 개발자를 위한 안내서 시리즈의 26개 중 6번 째 게시글입니다.
https://user-images.githubusercontent.com/50317129/260317030-e4b8575b-f09e-47f4-ab70-168a817268c6.png

Table of Contents

https://user-images.githubusercontent.com/50317129/260317030-e4b8575b-f09e-47f4-ab70-168a817268c6.png

공간정보 데이터 관리하기

데이터의 CRUD 소요가 있는 서비스는 DB를 사용한다. 서비스 운영에 필요한 데이터를 DB에 저장하고, 이를 적절히 관리, 조작함으로써 서비스의 기능을 제공한다.

GIS의 경우, 그 특성상 대용량 데이터를 자주 접하게 된다. 일례로, 전국의 건물 수는 몇백만을 우습게 상회하기 때문. 단순 row가 백만 단위인 것도 문제지만, 건물 정보의 특성 상 column의 갯수 또한 수십 개 정도다. 때문의 데이터의 용량이 매우 커진다.

때문에 공간정보 역시 DB에 저장하여 관리할 필요성이 생긴다. 하지만 문제는 공간정보는 DB에 저장하기 꽤나 까다롭다. 다른 데이터야 문자열이든 정수형이든 대충 삽입하면 되지만, 좌표값에서 문제가 발생한다. 점의 경우 (x,y)(x, y)로 비교적 간단하지만, 선과 면의 경우 xyxy좌표가 무수히 나올 수 있으므로 문제가 커진다.

그 뿐만 아니라, 별도로 언급하지 않은 복잡한 형태의 도형(도넛처럼 가운데가 빈 면 등)을 저장할때도 많은 문제가 생긴다. 때문에 적절한 툴을 활용하여 DB에 SHP를 삽입하는 것이 가장 효과적이다.



ogr2ogr로 MariaDB에 SHP 삽입하기

이 장에서는 DB에 SHP를 삽입하는 방법으로 ogr2ogr을 사용한다. 이 툴은 공간정보를 다루는 라이브러리로, QGIS를 설치하면 자동으로 같이 설치된다.

ogr2ogr만 따로 설치하는 것보다 QGIS 설치해서 딸려나오는 걸 사용하는 게 훨씬 편하므로, 여기선 이 방법을 통해 기술한다.

QGIS 3.16 기준으로 일반적인 설치 경로는 C:\Program Files\QGIS 3.16이다. 물론 버전에 따라 경로는 조금씩 차이가 발생할 수 있으니 참고만 할 것.

C:\Program Files\QGIS 3.16\bin에서 ogr2ogr을 찾을 수 있다. 해당 경로에서 cmd를 통해 ogr2ogr에 명령어를 날려 SHP를 삽입해보자.


BATCH

1
ogr2ogr -f MySQL MySQL:"{DB명},host={DB 호스트},user={DB 계정명},password={DB 비밀번호}" {SHP 경로} -nln {생성할 테이블 이름} -a_srs {SHP의 EPSG 코드} -lco engine=MYISAM

위 명령어를 입력하여 SHP를 MariaDB에 삽입할 수 있다. -nln 옵션을 지정하지 않을 경우, SHP의 이름을 그대로 따라간다.

삽입 시, SHP의 테이블 외에도 공간정보의 메타데이터를 관리하는 테이블이 2개 생성되며, 각각 아래와 같다.

  • geometry_columns: 각 레이어의 좌표 정보에 대한 메타데이터
  • spatial_ref_sys: 사용된 좌표계의 메타데이터

위 두 테이블은 개발자가 직접 사용할 일은 거의 없으니 그냥 이런 게 있다고 알고만 있으면 된다. 이 점을 모를 경우, 내가 의도한 테이블 외에 다른 테이블이 생김에 혼란을 일으킬 수 있기 때문.


SHP 데이터를 입력하다보면, 잘못된 도형으로 인해 삽입이 되지 않는 현상을 종종 목격한다. 명령어 마지막에 --skipfailure 옵션을 붙여주면 오류가 난 행은 제외하고 삽입하니 참고할 것.

SHP를 MariaDB에 삽입한 예시. DBeaver로 데이터베이스를 확인하면 무려 OSM을 기반으로 데이터의 형태까지 보여준다. 하단의 메뉴에서 EPSG 코드를 설정할 수 있으니 참고할 것.

🏷️ Related Tag

# GIS
# MariaDB
# QGIS

😍 읽어주셔서 감사합니다!
도움이 되셨다면, 💝공감이나 🗨️댓글을 달아주시는 건 어떤가요?
블로그 운영에 큰 힘이 됩니다!
https://blog.itcode.dev/projects/2022/03/05/gis-guide-for-programmer-6