본문 바로가기
DATABASE

MySQL ogr2ogr(공간정보 저장에 대해서)

by 하이바네 2021. 7. 28.
반응형

MySQL에서 지원하는 Geometry(Vector)를 사용하여 지도의 정보를 저장 할 수 있다.

 

ogr2ogr을 사용하면 .shp파일에 있는 공간에 대한 정보를 DB에 저장도 가능하고 다양한 방법으로 활용이 가능한듯 하다.

 

작업중인 프로젝트에서는 .shp파일에 저장된 지도 데이터를 DB에 저장을 해야 하고, 해당 데이터를 사용하여 경로 선택, 최단거리 계산 등 다양한 웹페이지, 서버에서의 동작 등을 해야한다. 

 

1. 우분투에서 ogr2ogr 설치

- 설치 명령어 : apt-get install gdal-bin
- 참고 사이트 : https://gdal.org/drivers/vector/mysql.html

 

MySQL — GDAL documentation

The MySQL driver does not support creation of new datasets (a database within MySQL), but it does allow creation of new layers within an existing database. By default, the MySQL driver will attempt to preserve the precision of OGR features when creating an

gdal.org

2. 테이블에 데이터 저장

 - 저장 명령어 : ogr2ogr -f MySQL MySQL:DB NAME,host=localhost,user=root,password=password A2_LINK.shp -nln table_name -lco GEOMETRY_NAME=path


위의 명령어를 보면 일단 다른것보다 A2_LINK.shp와 GEOMETRY_NAME을 보면 된다. 해당 파일 안에 있는 geometry 데이터를 GEOMETRY_NAME으로 지정한 이름으로 컬럼이 저장이 된다. 나의 경우에는 path라는 이름으로 지정하였고 결과는 아래와 같이 되었다.

geometry는 바이너리로 저장되어서 그런지 현재 보는 툴에서는 깨져서 나오지만 select를 할때 특정 함수를 사용하면 원하는 데이터로 출력이 가능하다.

3. select 방법

- SELECT ST_AsGeoJSON(path),id FROM table_name;

path라는 곳에 geometry가 저장되어 있다면 위의 명령어를 치면 해당 경로에 대한것 json형태로 출력된다.

- SELECT ST_ASTEXT(path) FROM table_name;

위의 명령어 치면 저장된 Spatial Data type과 함께 데이터가 나타난다.

 

아직 진행중이지만 처음에는 GeoJSON형태를 그대로 MySQL의 JSON타입에 모든 것을 넣으려고 했었다. 하지만 MySQL에서는 이미 예전부터 geometry에 대해 많은 것을 지원을 해주고 있었고...그것들을 활용해서 방법을 찾아보려고 한다. 그리고 하나 생기는 의문. MySQL을 계속 써야만 하는걸까? 다른 DBMS도 많은데....일단 지도쪽에서는 PostgreSQL을 많이 쓰는듯 보였다. 전환이 필요할지 의문이 들지만 일단 밀고 나가야 할듯 하다. 

728x90

댓글