세계지도 shape 파일을 Oracle DB에 저장하기
1. 데이터
1) TM_WORLD_BOUNDERS_SIMPL-0.3
https://www.igismap.com/download-free-shapefile-maps/
지구의 구형을 ‘Equirectangular projection’을 통해 2차원 지도로 만들고 각 나라에 대한 boundary를 shape파일로 제공한다.
2) Majorrivers_0_0
https://datacatalog.worldbank.org/dataset/major-rivers-world
지구에 존재하는 주요 강(river)들을 shape파일로 제공한다.
2. 데이터 가공 및 입력
일단 본 데이터들은 shape 파일이기때문에 이를 oracle table에 입력시키기 위해서는 데이터 가공이 필요하다.
따라서 shape파일에서 csv파일을 추출하여 각 나라의 attribute를 확인하고 xml파일을 추출하여 각 나라의 polygon 좌표를 추출한다. EDS Viewer 이용
이 데이터들을 oracle 질의문으로 가공하는데 이때 python 언어를 사용한다.
1) shp파일에서 추출한 csv파일 – 각 attribute가 들어있다.
2) shp파일에서 추출한 xml파일 – polygon의 좌표가 들어있다.
3) SQL_Gen.py
csv파일과 xml파일을 읽어 이를 SQL value insert문으로 변환시켜준다.
polygon의 크기가 너무 커지면 SDO_ORDINATE_ARRAY안에 한번에 넣을 수 없는 상황이 발생하는데 이 때는 PL/SQL문을 사용하여 ARRAY EXTEND를 사용한다.
이렇게 가공된 SQL 문을 Oracle SQL Developer 프로그램을 통해서 Table에 삽입한다.
(LANDS 삽입 – 하나의 독립된 land를 기준으로 삽입. 한 나라가 여러개의 land를 가질 수 있음.)
(River 삽입)
3. 질의
1) 각 나라의 넓이 구하기
- 질의문
- 질의 결과
2) 미국을 거쳐 흘러가는 모든 강의 이름 구하기
- 질의문
계산 속도를 최적화 하기위해 먼저 미국에 속해있는 land들을 US라는 하나의 view로 묶었고 그 후 미국의 MBR과 disjoint하지 않는 강을 US_river라는 view로 추려내었다. 마지막으로 정확히 두 view 사이에 어떤 interact가 있는지 질의하여 최종적으로 미국에서 흐르는 강의 정보를 얻을 수 있었다.
- 질의 결과