MySQL에서 지원하는 Geometry(Vector)를 사용하여 지도의 정보를 저장 할 수 있다.
ogr2ogr을 사용하면 .shp파일에 있는 공간에 대한 정보를 DB에 저장도 가능하고 다양한 방법으로 활용이 가능한듯 하다.
작업중인 프로젝트에서는 .shp파일에 저장된 지도 데이터를 DB에 저장을 해야 하고, 해당 데이터를 사용하여 경로 선택, 최단거리 계산 등 다양한 웹페이지, 서버에서의 동작 등을 해야한다.
1. 우분투에서 ogr2ogr 설치
- 설치 명령어 : apt-get install gdal-bin
- 참고 사이트 : https://gdal.org/drivers/vector/mysql.html
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을 많이 쓰는듯 보였다. 전환이 필요할지 의문이 들지만 일단 밀고 나가야 할듯 하다.
'DATABASE' 카테고리의 다른 글
mysql 오류 확인 및 리커버리(innodb_force_recovery) (0) | 2021.08.24 |
---|---|
MySQL deterministic에 대해서(with function) (0) | 2021.07.29 |
varchar타입에 order by를 써야하는 경우 (0) | 2021.07.20 |
date, datetime 속도 이슈 정리(feat timestamp를 쓰도록...) (0) | 2021.06.08 |
mysql union과 union all의 차이 (0) | 2021.05.31 |
댓글