6. API 규격¶
Endpoint
- RUUT 교통 정보 : /ruut/version/segments
- RUUT 이벤트 정보 : /ruut/version/incidents
- RUUT TPEG : /ruut/version/tpeg
6.1. Geo Filtering¶
지도 상의 영역을 지정하고 해당 영역 내에 포함되는 데이터만 추출하는 데 사용합니다. 인증, V2X를 제외한 모든 RUUT 플랫폼 기능의 필수 파라미터 입니다. Geo Filtering 은 총 5개 종류가 제공되며 각각의 필터 타입을 규정하기 위한 파라미터를 병용 하여야 합니다.
6.1.1. Geo Filtering 파라미터 리스트¶
5개의 필터는 geoFilter 파라미터의 값 영역에 명시하여 활성화 할 수 있습니다. 각각의 필터는 동시 사용이 불가합니다. 또한, 해당 필터와 병용 되어야 하는 파라미터가 추가로 명시되지 않을 경우 필터가 정상 동작하지 않습니다.
Note
예) /endpoint?geoFilter=box&corner1={gps}&corner2={gps} *box should be combined with corner1 and corner2
| Params | Type | Value | Description |
|---|---|---|---|
| geoFilter | String | box | 2개 gps 좌표로 이루어진 사각 영역 필터링 |
| circle | 중심 좌표(gps)와 반지름 으로 이루어진 원 영역 필터링 | ||
| polygon | 3개 이상의 gps 좌표로 이루어진 다각형 영역 필터링 (8개 좌표 이내) | ||
| pos | 1개 gps 좌표에서 가장 가까운 세그먼트 필터링 (250미터 이내) | ||
| centerpointBox | 1개 gps 좌표를 무게중심으로 하는 사각형 영역 필터링 | ||
| corner1 | String | gps 좌표 | box 필터의 대각 gps 좌표 (corner2 와 쌍) |
| corner2 | String | gps 좌표 | box 피렅의 대각 gps 좌표 (corner1 과 쌍) |
| center | String | gps 좌표 | circle or centerpointBox 필터의 중심 좌표 |
| radius | Integer | radius | circle 필터의 반지름 (미터) |
| height | Integer | height | centerpointBox 필터의 세로 값 (미터) |
| width | Integer | width | centerpointBox 필터의 가로 값 (미터) |
| points | String | gps 좌표 리스트 | polygon 필터의 gps 좌표. 파이프 기호로 구분된 목록 |
| point | String | gps 좌표 | pos 필터의 gps 좌표 |
| regionId | Integer | 지역코드 | 행정 구역 단위 필터링을 위한 지역 코드 [1] |
6.1.2. Geo Filtering 제한 사항¶
Geo filtering 은 파라미터 규칙 외 필터 성능 최적화 및 사용성 강화를 위한 제한 사항이 포함 됩니다.
- 탐색을 요청하는 도로 등급에 따라 제한이 적용 됩니다 (circle/box 필터 기준)
- FRC 레벨 == 0 (고속도로) : 반지름 및 가로/세로 200km 이내 제한
- 0 < FRC 레벨 < 3 (국도, 고속화도로) : 반지름 및 가로/세로 100km 이내 제한
- 2 < FRC 레벨 (모든 도로) : 반지름 및 가로/세로 20km 이내 제한
- regionId 필터링에 대한 응답은 별도 요청에 한하여 제공합니다.
해당 제한을 따르지 않은 요청에 대해서는 정상 응답을 하지 않으니 이에 유의 하시기 바랍니다 (오류 응답)
6.1.3. Geo Filtering 예제¶
Geo filter 는 모든 교통 정보 데이터 검색 요청의 필수 요소 입니다. 아래에 나온 필터의 종류에 따른 URL sample 을 참고하여 원하는 영역에 대한 필터링 조건을 설정하고 해당 URL 의 뒤에 세부 요청 파라미터를 추가하는 형태로 API 호출이 진행 됩니다.
- region 의 경우 별도 채널을 통해 인증 받은 사용자만 사용 가능 합니다.
| Filter | Method | URL Sample |
|---|---|---|
| box | GET | /endpoint?geoFilter=box&corner1={gps}&corner2={gps} |
| circle | GET | /endpoint?geoFilter=circle¢er={gps}&radius={km} |
| polygon | GET | /endpoint?geoFilter=polygon&points={gps}|{gps}|{gps}|… |
| pos | GET | /endpoint?geoFilter=pos&point={gps} |
| centerpointBox | GET | /endpoint?geoFilter=centerpointBox¢er={gps}&height={km}\ &length={km} |
| region | GET | /endpoint?geoFilter=region®ionId={region ID} |
6.2. RUUT¶
RUUT 플랫폼에서 자체적으로 제공하고 있는 API 구성을 설명 합니다. RUUT API 는 크게 Segement 와 Incident 로 구성 되어 있습니다. Segement 는 실시간 교통 정보 검색에 사용되며, Incident 는 실시간 이벤트 (사고, 공사, 재해 등) 검색에 사용됩니다. TPEG2 데이터 검색은 TPEG2 섹션을 참고 하시기 바랍니다.
6.2.1. Segment¶
RUUT API 의 path 파라미터로 사용되는 segment 는 실시간 교통 정보를 요청 하기 위해 사용 됩니다. 해당 교통 정보에 이벤트 (사고, 재해, 공사등)정보는 포함되지 않습니다. 이벤트 정보는 아래 incident 를 참조하시기 바랍니다.
Segment Request
| GET | /ruut/{version}/segments?{geo-query}?{set of parameters} |
RUUT API 에 대한 요청은 위와 같은 URL로 구성 됩니다. 앞서 언급한 바와 같이 goe filter 를 먼저 URL 에 추가한 후 아래 Request Parameters 를 추가 입력하면 됩니다.
6.2.1.1. Segment Request Parameters¶
| Params | Type | Value | Description |
|---|---|---|---|
| rttiField | String | speed | 현재 측정 속도 반환 |
| limit | 세그먼트 제한 속도 반환 | ||
| travleTime | 세그먼트 횡단 평균 시간 반환 | ||
| freeFlow | 정체 없을 시 속도 반환 | ||
| all(default) | 모든 필드 반환 | ||
| frc | Integer | frc | FRC 등급이 같은 항목만 반환 (쉼표 나누어 여러 개의 등급 명시 가능) |
| all(default) | 모든 FRC 등급 데이터 반환 | ||
| lr | String | openLr | 위치 참조 정보로 openLR 인코딩 정보 반환 |
| agoraC | 위치 참조 정보로 AGORA-C 인코딩 정보 반환 | ||
| all (default) | 위치 참조 정보로 openLR / AGORA-C 인코딩 정보 반환 | ||
| lane | String | on (default) | 차선 단위 교통 정보 활성화 |
| off | 차선 단위 교통 정보 비활성화 | ||
| segmentCoordinates | String | on (default) | 제공 세그먼트의 시작/끝 노드의 GPS 좌표 정보 반환 |
| off | 세그먼트 GPS 정보 반환 않음 |
6.2.1.2. Segment Response Elements¶
Note
응답은 하나 이상의 segment 로 구성 되며 JSON array 형태로 구성 됩니다.
| Property | Type | Description |
|---|---|---|
| segmentId | String | 세그먼트의 ID |
| roadCategory | String | 세그먼트의 도로 레벨 |
| speed | Integer | 세그먼트의 측정 차량 속도 |
| limit | Integer | 세그먼트의 제한 속도 |
| freeFlow | Integer | 세그먼트 정체 없을 경우 차량 평균 속도 |
| travelTime | String | 세그먼트를 관통 하는데 걸리는 시간 (초) |
| openLr | String | 위치 참조를 위한 openLR encoded code |
| agoraC | String | 위치 참조를 위한 AGORA-C encoded code |
| lane | Array | 차선 교통 정보 제공을 위한 배열 객체 |
|
String | 차선 번호 (안쪽 차선부터 1차선) |
|
Integer | laneNumber 로 특정된 차선의 측정 속도 |
| segmentCoordinates | Object | segment nodes 에 대한 GPS 좌표 제공 (양 끝 노드) |
|
Object | node 1 에 대한 GPS 좌표 컨테이너 |
|
String | node 1 에 대한 GPS 위도 |
|
String | node 1 에 대한 GPS 경도 |
|
Object | node 2 에 대한 GPS 좌표 컨테이너 |
|
String | node 2 에 대한 GPS 위도 |
|
String | node 2 에 대한 GPS 경도 |
| timeStamp | Datetime | 정보 생성 시간 |
6.2.1.3. Segment Request/Response Example¶
RUUT API Segment 요청/응답 예제 를 참고 하시기 바랍니다.
6.2.2. Incident¶
RUUT API 의 path 파라미터로 사용되는 incident 는 도로 상의 이벤트인 사고, 재해, 공사, 일정, 통제 정보를 제공 합니다. 앞서 설명된 segment 와 마찬가지로 incident 의 query 파라미터 또한 Geo filtering 파라미터와 더불어 사용 됩니다.
Incident Request
| GET | /ruut/{version}/incidents?{geo-query}?{set of parameters} |
RUUT API 에 대한 요청은 위와 같은 URL로 구성 됩니다. 앞서 언급한 바와 같이 goe filter 를 먼저 URL 에 추가한 후 아래 Request Parameters 를 추가 입력하면 됩니다.
6.2.2.1. Request Parameters¶
| Params | Type | Value | Description |
|---|---|---|---|
| incidentField | String | lane | 이벤트 발생 차선 정보 반환 |
| length | 이벤트가 영향을 미치는 물리적 범위 (미터) 반환 | ||
| vehicleKind | 이벤트 차량 종류 반환 | ||
| description | 이벤트 세부 정보 문자열 반환 | ||
| all(default) | 모든 필드 반환 | ||
| lr | String | openLr | 위치 참조 정보로 openLR 인코딩 정보 반환 |
| agoraC | 위치 참조 정보로 AGORA-C 인코딩 정보 반환 | ||
| all (default) | 위치 참조 정보로 openLR / AGORA-C 인코딩 정보 반환 | ||
| segmentCoordinates | String | on (default) | 제공 세그먼트의 시작/끝 노드의 GPS 좌표 정보 반환 |
| off | 세그먼트 GPS 정보 반환 않음 |
6.2.2.2. Response Elements¶
Note
응답은 하나 이상의 segment 로 구성 되며 JSON array 형태로 구성 됩니다.
| Property | Type | Description |
|---|---|---|
| segmentId | String | 세그먼트의 ID |
| incidentId | String | 이벤트의 ID |
| incidentType | String | 이벤트의 타입 (A:사고, B:공사, C:행사, D:재해, E:통제) |
| lane | Integer | 이벤트 발생 차선 정보 |
| vehicleKind | String | 사고 차량 종류 |
| description | String | 이벤트 세부 정보 설명 문자열 |
| schedule | Object | 이벤트에 일정에 있을 때 제공되는 오브젝트 (이벤트 일정이 있는 경우에만 기본 제공) |
|
String | 계획된 이벤트인지 여부 |
|
Datetime | 이벤트 개시 시점 |
|
Datetime | 이벤트 종료 시점 |
|
Object | 반복 이벤트인지 여부에 따라 제공되는 오브젝트 |
|
String | 일주일 중 언제 반복 발생하는지 |
|
String | 반복 이벤트 시작 시점 |
|
String | 반복 이벤트 종료 시점 |
| openLr | String | 위치 참조를 위한 openLR encoded code |
| agoraC | String | 위치 참조를 위한 AGORA-C encoded code |
| segmentCoordinates | Object | segment nodes 에 대한 GPS 좌표 제공 (양 끝 노드) |
|
Object | node 1 에 대한 GPS 좌표 컨테이너 |
|
String | node 1 에 대한 GPS 위도 |
|
String | node 1 에 대한 GPS 경도 |
|
Object | node 2 에 대한 GPS 좌표 컨테이너 |
|
String | node 2 에 대한 GPS 위도 |
|
String | node 2 에 대한 GPS 경도 |
| timeStamp | Datetime | 정보 생성 시간 |
6.2.2.3. Request/Response Example¶
RUUT API Incident 요청/응답 예제 를 참고 하시기 바랍니다.
6.3. V2X¶
RUUT 는 T Map 에서 서비스 되고 있는 V2X 서비스 (응급 차량 출동 알림, 전방 급정거 알림) 및 기타 V2X 서비스의 원시 데이터를 제공 합니다. V2X 데이터는 webhook 방식으로 제공 됩니다.
- Header
| option | Type | Default | Description |
|---|---|---|---|
| X-Authorization | string | {accessToken} | API Key |
6.3.1. V2X Webhook 관리¶
V2X 서비스 데이터를 획득 하려면 각 서비스의 유형에 맞는 Webhook URL 을 등록 합니다. 사용자는 Webhook URL의 등록/조회/삭제를 수행할 수 있습니다.
6.3.1.1. Webhook URL 등록¶
| POST | /ruut/{version}/hooks |
Request Body
| Type | key | Value | Description |
|---|---|---|---|
| String | url | hook_url | V2X webhook 을 수신할 URL |
| String | locationReference | openLR | 위치 참조 타입 openLR 명시 |
| agoraC | 위치 참조 타입 AGORA-C 명시 | ||
| segmentID | 위치 참조 타입 Segment ID 명시 (RUUT 자체 타입) | ||
| String List | events | emergencyVehicle | 응급 차량 알림 메시지 수신 |
| otherEvents | 급정거 알림 및 기타 알림 메시지 수신 |
Request Example
{
"url":"http://v2xhook.test",
"locationReference":"openLR",
"events": [
"emergencyVehicle", "otherEvents"
]
}
6.3.1.2. Webhook URL 조회¶
Header 를 통해 권한 인증 후 해당 사용자가 등록한 Hook URL 을 반환합니다.
| GET | /ruut/{version}/hooks |
6.3.1.3. Webhook URL 삭제¶
Header 를 통해 권한 인증 후 해당 사용자가 등록한 Hook URL 을 삭제합니다.
| DELETE | /ruut/{version}/hooks |
6.3.2. V2X Incoming Webhook 명세¶
V2X 이벤트가 발생하면 사용자가 등록한 Webhook URL로 Webhook 이 전송 됩니다. 해당 Incoming Webhook 은 3가지 종류로 구분됩니다.
- 응급 차량 이동 알림
- 응급 차량 목적지 (재난지) 정보 알림
- 급정거 알림 및 기타 V2X 이벤트 알림
6.3.2.1. 응급 차량 목적지 (재난지) 정보 알림¶
Webhook Payload Elements
| Property | Type | Description |
|---|---|---|
| dsrID | String | 재난 정보 ID |
| provider | String | 재난 정보 제공자 |
| dsrType | String | 재난 유형 |
| startTime | String | 재난 발생 시간 |
| endTime | String | 재난 종료 시간 |
| locationReference | String | 재난 위치의 위치 참조 코드 (openLR, AGORA-C, segment ID 중 택일) |
| locationOfDisaster | String | 재난 위치 GPS 정보 배열 |
|
String | 재난 위치 위도 |
|
String | 재난 위치 경도 |
| timeStamp | String | 정보 생성 시간 |
Webhook Payload Example
{
"dsrID": "h4dkdeekd3",
"provider" : "소방 방재청",
"disasterType": "사고",
"startTime" : "20200116081953",
"endTime" : "",
"locationReference" : "C1pkKRqXySOPAAAA//IjDw==",
"locationOfDisaster": {
"lat": "37.396133",
"lon": "127.112698"
},
"timestamp": "2020-01-16 19:59:00"
}
6.3.2.2. 응급 차량 이동 알림¶
Webhook Payload Elements
| Property | Type | Description |
|---|---|---|
| plateNumber | String | 응급 출동 차량 번호 |
| dsrID | String | 재난 정보 ID |
| distToDsr | String | 응급 출동 차량으로부터 재난지 까지의 잔여 거리 |
| locationReference | String | 응급 출동 차량 위치 참조 코드 (openLR, AGORA-C, segment ID 중 택일) |
| locationOfDisaster | String | 응급 출동 차량 GPS 정보 배열 |
|
String | 응급 출동 차량 위도 |
|
String | 응급 출동 차량 경도 |
| timeStamp | String | 정보 생성 시간 |
Webhook Payload Example
{
"plateNumber" : "73무8261",
"dsrID": "UO4409579157",
"distToDsr" : "21844",
"locationReference" : "d1pkKRqXySOPAAAA//IjDw==",
"locationOfDisaster": {
"lat": "37.396133",
"lon": "127.112698"
},
"timestamp": "2020-01-16 19:59:00"
}
6.3.2.3. 급정거 알림 및 기타 V2X 이벤트 알림¶
Webhook Payload Elements
Note
본 메시지는 eventType 에 따라 구분 됩니다.
- 0 : 급정거
- 258 : 정체
- 513 : 사고
- 534 : 정지차
- 1281 : 낙하물
- 1286 : 보행자
| Property | Type | Description |
|---|---|---|
| eventId | String | 이벤트 ID |
| eventType | String | 이벤트 유형 |
| tunnelYn | String | 이벤트 발생 위치가 터널인지 여부 |
| roadType | String | 이벤트 발생 위치의 도로 유형 |
| locationReference | String | 이벤트 위치 참조 코드 (openLR, AGORA-C, segment ID 중 택일) |
| locationOfDisaster | String | 이벤트 위치 GPS 정보 배열 |
|
String | 이벤트 위치 위도 |
|
String | 이벤트 위치 경도 |
| timeStamp | String | 정보 생성 시간 |
Webhook Payload Example
{
"eventId": "4djakdjk2ddk2",
"eventType": "0",
"tunnelYn" : "N",
"roadType" : "0",
"locationReference" : "d1pkKRqXySOPAAAA//IjDw==",
"locationOfDisaster": {
"lat": "37.396133",
"lon": "127.112698"
},
"timestamp": "2020-01-16 19:59:00"
}
6.4. RUUT TPEG¶
RUUT는 자체적으로 TPEG2 표준에 맞는 교통 데이터를 제공하고 있습니다. TPEG2는 기존 TPEG 대비하여 제공 데이터의 정밀도 향상, 교통 정보 범위 확대, 차선 단위 교통정보 제공 기능 추가, 예측 교통 정보 제공을 위한 포맷 강화, Peer to Peer 연동 규격 추가 등을 제공하는 최신 교통 정보 제공 국제 표준입니다. RUUT TPEG2 는 TPEG2 어플리케이션 중 아래 3가지 어플리케이션을 제공합니다.
- TFP : 실시간 교통 정보
- TEC : 실시간 이벤트(돌발) 정보
- WEA : 날씨 정보
6.4.1. TPEG2¶
TPEG2 Request
| GET | /ruut/{version}/tpeg/getMessage?{geo-query}?{set of parameters} |
RUUT TPEG 메시지에 대한 요청은 위와 같은 URL로 구성 됩니다. 앞서 언급한 바와 같이 goe filter 를 먼저 URL 에 추가한 후 아래 Request Parameters 를 추가 입력하면 됩니다.
6.4.1.1. Request Parameters (TPEG2)¶
| Params | Type | Value | Description |
|---|---|---|---|
| frc | Integer | frc | FRC 등급이 같은 항목만 반환 (쉼표 나누어 여러 개의 등급 명시 가능) |
| all (default) | 모든 FRC 등급 데이터 반환 | ||
| format | String | base64xml (default) | TPEG 메시지를 base64 로 인코딩 한 후 xml 컨테이너로 반환 |
| tepgML | TPEG 메시지를 TPEG-ML 로 반환 | ||
| app | String | tfp (default) | TPEG2 TFP 어플리케이션 반환 |
| tec | TEPG2 TEC 어플리케이션 반환 | ||
| wea | TEPG2 WEA 어플리케이션 반환 | ||
| delta | String | on | 이전 요청에서 변경된 데이터만 반환 (델타 업데이트) |
| off | 매 요청 시 모든 세그먼트 데이터 반환 (전체 업데이트) |
6.4.1.2. Response Formats (TPEG2)¶
TEPG2 요청에 대한 응답은 2 가지 형태로 제공 됩니다.
- TPEG2 Message Binary (Base64 Encoding 후 XML 전송)
- TPEG2 ML (TPEG proprietary ML)
각 응답 포맷에 대한 세부 사항은 TPEG2 표준 문서를 참고 하시기 바랍니다.
6.4.1.3. Request/Response Example¶
TFP 요청 응답 예제, TEC 요청 응답 예제, WEA 요청 응답 예제, TPEG 조합 요청 응답 예제 를 참고 하시기 바랍니다.