한국 도시 철도의 이전/다음역 및 노선번호 정보의 Graph 자료구조 표현을 위한 정점(Vertices), 간선(Edges) 데이터
현재는 서울시만 구현되어 있고, 다른 노선은 언젠가 구현 예정입니다.
Korea Metro Graph에서 파생된 프로젝트로, Korea Metro Graph에서 사용하는 데이터를 생성할 수 있고, 그 산출물만을 관리합니다.
해당 프로젝트를 만들게 된 목적은 두 가지입니다.
-
서울시 역코드로 지하철역 정보 검색 API의 늦은 업데이트. 새로운 노선이 생길때마다 공개 API만 의존하며 애플리케이션에서 대응하지 못하는 경우는 없어야겠죠?
일해라 서울교통공사! -
프로젝트 결합도(Coupling) 감소. Korea Metro Graph는 읽는 기능만 있을 뿐, 쓰는 기능이 없습니다. 매번 새로운 노선이 생기는 등의 작업을 수행할 때마다 Korea Metro Graph 프로젝트를 갱신할 이유가 전혀 없기 때문입니다.
Korea Metro Graph에서만 이용할 수 있는 데이터는 아닙니다. 잘 가공하면 Database에서도 넣을 수 있는 (아마도?) 잘 가공된 JSON Data입니다.
main/resources/seoul
아래 파일들이 제공 됩니다.
서울시 역코드로 지하철역 정보 검색 공개 API의 JSON 파일을 가공한 파일입니다.
2019.10.01
기준으로 해당 API에서 지원하지 않는 자기부상
, 서해
, 우이신설경전철
, 김포골드라인
노선 정보가 추가되어 있습니다. 하지만 공식정보가 아닌 관계로 몇몇의 정보가 누락되어 있습니다.
또한 추가 기능으로 병기역명(sub_station_nm)
이 모든 노선에 추가되어 있습니다.
Korea Metro Graph에서 사용할 수 있는 형태로 가공된, 필요한 정보만을 추출하여 압축한 데이터입니다.
각 요소의 명세는 아래와 같습니다.
필드 | 설명 |
---|---|
identifier | 현재역/이전역/다음역 구분. CURRENT/PREVIOUS/NEXT. |
mainLine | 주노선 구분. true/false |
station_nm | 역 이름 |
sub_station_nm | 병기역명 |
line_num | 노선 이름 |
fr_code | 외부역 코드 |
station_cd | 역 코드 |
xpoint_wgs | 위도 (Latitude, WGS84) |
ypoint_wgs | 경도 (Longitude, WGS84) |
station_nm_han | 역 이름 (한자) |
station_nm_eng | 역 이름 (영문) |
sub_station_nm_han | 병기역명 (한자) |
sub_station_nm_eng | 병기역명 (영문) |
lineNum
은 아래와 같은 값을 가집니다. 이는 서울시 열린 데이터 광장의 서울시 역코드로 지하철역 정보 검색 API의 LINE_NUM 필드를 기준으로 작성됐습니다. (자기부상선, 서해선, 김포골드라인 제외)
- 1 ~ 9 : 1 ~ 9호선
- A : 공항철도
- B : 분당선
- E : 에버라인 (용인경전철)
- G : 경춘선
- I : 인천1호선
- I2 : 인천2호선
- K : 경의중앙선
- KK : 경강선
- S : 신분당선
- SU : 수인선
- U : 의정부경전철
- UI : 우이신설경전철
- M : 자기부상선
- W : 서해선
- GG : 김포골드라인
vertices.min.json
과 내용은 같은 파일로, 사람이 읽기 편한 형태로 가공된 파일입니다.
각 정점의 연결정보를 표현합니다. 각 요소의 명세는 아래와 같습니다.
필드 | 설명 |
---|---|
from | 출발역 정점 |
to | 도착역 정점 |
distance | 거리(Meter) |
time | 시간(Minutes) |
edges.json
을 압축한 데이터입니다.
- 원본이 되는
vertices.json
,edges.json
수정. test
패키지에 있는Test.java
이용.
public class Test {
public static void main(String[] args) throws IOException {
Compressor.INSTANCE.compressVertices("src/main/resources/seoul/vertices.json");
Compressor.INSTANCE.compressEdges("src/main/resources/seoul/edges.json");
}
}