최적거리를 산출할때 필요한 노드 링크 형태의 네트워크 데이터 생성
도로 네트워크의 노드 링크는 ITS 전국표준노드링크에서 데이터를 제공하고 있다.
https://www.its.go.kr/nodelink/nodelinkRef
ITS 국가교통정보센터
ITS 국가교통정보센터
its.go.kr
그런데 여기서 제공되는 자료는 2차로 이상이라 실제 도로 중에 상당부분이 제외되어 있다.
전국의 모든 도로는 행안부 도로명주소인 실폭도로를 사용하는 것이 정확하다.
https://business.juso.go.kr/addrlink/main.do?cPath=99JM
주소기반산업지원서비스
본인인증 사용중인 휴대전화번호로 인증 인증하기 아이핀 인증 본인 명의 아이핀 계정으로 인증 인증하기
business.juso.go.kr
제공하는 주소 → 도로명이 부여된 도로도형
본인 인증과 승인을 받는 과정이 있다. 승인을 받기까지 몇일의 시간이 필요하기도 하다.
실폭도로는 실제 도로의 폭을 측정한 데이터로서 도로명 주소의 기반이며 네비게이션 탐색주소로 활용되고 있다.
그런데 문제는 노드, 링크가 분리가 안되어 있다는 것. '26년 경에 출시될 것으로 알고 있다. 따라서 이 데이터만을 갖고 네비게이션처럼 최적거리 산출에 활용하기는 어렵다.
대안으로 실폭도로에 거의 유사한 OSM 데이터를 사용하기로 해보았다. osmnx라는 라이브러리를 사용해서 국내 도로를 선택하고 간단한 명령으로 노드와 링크를 분리할 수 있다. 이미지를 비교했을때 실폭도로와 거의 유사하다. 공개 지도이지만 차이를 찾기 어려울 정도로 정교하다.
그런데 파이썬을 사용하게 되면 fiona, shapely, proj같은 충돌로 유명한 라이브러리가 기다린다. 게다가 공간데이터 사용하면 메모리 부족 오류도 자주 발생한다. 같은 시스템에서 postgres를 사용하면 아무 문제가 되지 않는데도 불구하고....
특히 geopandas는 주변의 많은 이들이 충돌 문제를 경험한 라이브러리기도 하다. geodataframe이라고 새로 나온게 있는 것 같은데 아직 사용은 안해봤다.
만약 postgres로 위의 과정을 사용하려면 osm2pgsql을 사용하면 된다.
가급적 윈도우 용을 사용하자.
https://github.com/osm2pgsql-dev/osm2pgsql/releases
Releases · osm2pgsql-dev/osm2pgsql
OpenStreetMap data to PostgreSQL converter. Contribute to osm2pgsql-dev/osm2pgsql development by creating an account on GitHub.
github.com
지도에서 내보내기 방식
타임캡슐공원 | 오픈스트리트맵
오픈스트리트맵 (OpenStreetMap)은 여러분과 같은 사람들이 만들어, 개방형 라이선스에 따라 자유롭게 사용할 수 있는 세계 지도입니다.
www.openstreetmap.org
OSM이 공개 데이터라 과연 정확할까란 의심이 들지만 전국 100대 명산의 절반 이상을 다녀오고, 천체사진 촬영때문에 주변에 빛이 없는 오지를 찾아다니는 입장이라 별별 희한한 길을 다 다녔다. 그런데 정말 사람들이 모르는 길도 표시가 되어 있다.
지도에서 export 방식을 사용해도 되고....
OSM파일을 다운 받아서 처리하는 방법도 있다. 이 경우 osm2pgsql을 사용해서 아이디와 패스워드 DB를 설정해줘야 한다.
https://download.geofabrik.de/asia/south-korea.html
Geofabrik Download Server
download.geofabrik.de
DB로 적재하면 planet으로 시작하는 여러 테이블 중 road를 우선 확인해본다.
planet_osm_road라는 테이블이다.
뭬야. 도로만 나오는게 아니라 관제구역까지 나타난다.
다양한 컬럼이 있는데 highway컬럼이 고속도로, 이면도로, 골목 등을 구분하는 역할이다.
노드를 추출하는 명령
CREATE TABLE road_nodes AS SELECT DISTINCT (ST_DumpPoints(way)).geom AS geom FROM planet_osm_roads; SELECT 1752545 Query returned successfully in 4 secs 120 msec. |
도로 하나를 포인트로 분리하면...
select (st_dumppoints(way)).geom from planet_osm_roads where osm_id=484622183
각 점을 잇는 순간 link가 된다.
그런데 웹으로 추출하는 지도와 좀 다르다. 이유가 뭘까? 이건 좀 더 생각해봐야 겠다.
pgadmin은 가끔씩 명령어를 처리하다 말고 알아서 꺼지는 경우가 있다. 이런 오류는 4~5년째 반복적으로 발생하고 있다. 왜 그럴까.
확인해보니...
→ 맵 아카이브와 웹 사이에 차이가 있다. 웹으로 사용해야 한다. 그리고 Highway 속성에서 residential, service 등이 모두 포함되어야 한다.