brunch

위치를 표현하고 공유하는 기술 : OpenLR

by 아이나비시스템즈
맵스플랫폼 사업팀_브런치 (5).png


Ep.5


OpenLR 이란 동적 위치 참조 방법으로, 지도와 상관없이 로컬 데이터의 인코딩, 전송 및 디코딩을 위한 절차에 대한 개방형 표준입니다.


OpenLR을 이해하기 위해 ‘위치 참조’를 먼저 알아보겠습니다. 위치 참조의 가장 간단한 예시는 우리가 사용하는 주소입니다. 주소는 특정 위치를 설명할 수 있는 하나의 약속입니다. 만약 판교역 근처 식당을 예약했다고 할 때, 우리는 판교역 1번 출구에서 나와 400m 거리에 식당이 위치해 있다고 설명할 수 있습니다. 하지만 판교역이라는 약속된 주소가 없다면 어떨까요? 우선 판교역에 대한 설명부터 시작해야 합니다. 현재 내가 위치한 곳은 어디고, 아이나비시스템즈라는 회사는 어디에 위치해 있는지, 이러한 질문에 답할 수 있는 방법이 바로 ‘위치 참조’ 방법입니다.


이러한 서로 약속된 주소체계는 특정 위치에 대해 인코딩, 디코딩 규칙을 정했기 때문에 서로의 위치에 대한 위치 참조가 가능합니다. 하지만 변화하는 경로, 영역 등 동적으로 변화하는 위치 타입은 주소체계와 같은 정적 위치 참조 방법으로 정의하는 데 한계가 있습니다. 이러한 문제를 해결하기 위해 ‘동적 위치 참조’ 방법이 등장했습니다. 서로 미리 약속하지 않아도 위치를 설명할 수 있는 방법, 위치에 따라 인코딩, 디코딩 규칙을 정하는 것이 아닌 인코딩과 디코딩 방법 자체를 제공하는 방법, 이것이 ‘동적 위치 참조 방법’ 입니다. 위치를 참조할 때마다 동적으로 규칙을 정하기 때문에 특정 위치(점), 경로(선), 영역(면)에 대해서도 위치 참조가 가능하게 됩니다.




크게 3가지로 분류되는 위치 참조 방법에 대해 자세하게 알아보겠습니다.


1. 동일한 지도 공유를 통한 위치 참조
— 위치 데이터 생성자와 소비자가 동일한 지도를 공유하는 경우
: 정확한 위치 참조가 가능하지만 지도를 업데이트하고 서로 공유하는 경우 많은 조정이 필요하고, 공급업체의 지도 데이터에 종속됨.


2. 미리 코딩 된 위치로 위치 참조

— 미리 위치에 대한 코딩을 진행한 경우, 생성자와 소비자가 서로 다른 지도를 가지고 있어도 위치에 대한 매핑 가능

: 미리 코딩 된 위치는 모든 지리 영역을 포함하지 않고 일부 정보만을 전달할 수 있음

: 지도가 업데이트되거나 변경될 때마다 사전 코딩 된 위치와 새 지도 간의 매핑 작업을 진행해야 함

: 미리 코딩 된 위치 — 위치를 주고받기 위해 사전에 고정된 위치 집합을 문서화하여 공유한 것 ex) 주소, TMC 위치 테이블, 국토 교통부 지정 KS 링크


3. 동적 위치에 의한 위치 참조

— 생성자가 위치를 인코딩 하고 수신자가 이를 디코딩 하여, 생성자가 의도한 위치를 올바르게 전달하는 방식

: 동일한 지도 공유 없음 (1번)

: 미리 코딩 된 위치 참조 스키마와 같이 두 지도 사이의 다리 역할을 하는 중간 레이어 없음 (2번)

: 인코딩 및 디코딩 절차는 구현하는 알고리즘에 의존

: 동적 위치 — 위치에 대한 동적 움직임이 아닌 지도에서 특정 위치를 동적으로 식별하는 것을 의미


OpenLR은 이 위치 참조 방법 중 3. 동적 위치에 의한 위치 참조 방식으로, 공간 정보(위치) 커뮤니케이션을 위해 송신자 시스템에서 위치를 인코딩하여 수신자 시스템에 전달하고 수신자가 디코딩하여 지도에 위치를 해석하는 방법을 제공합니다.


1*lnGF193jDjzvO3HK4S4J7Q.png <그림1. 동적 위치에 의한 위치 참조>


이 글에서는 OpenLR을 사용하는 아이나비 지도 데이터의 인코딩, 디코딩 방법에 대한 검토 내용을 기술하겠습니다.




OpenLR은 Open Source로 인코더와 디코더에 대한 코드를 제공하고, 총 9가지 위치 유형을 제공합니다. 각 유형은 해당 유형에 한하여 위치를 인코딩, 디코딩 할 수 있습니다.


1*SJ1I-HR6PnIkYvRyQboHuw.png <그림2. OpenLR 지원 위치 유형>


1. Line — 도로를 부분적으로 표현

2. Geo-Coordinate — 지리 좌표

3. Point Along Line — Line위 또는 옆의 좌표

4. POI with Access Point — 접근 가능 관심 지점 좌표

5. Circle — 위, 경도 좌표 반경 영역

6. Rectangle — 두 개의 지리 좌표쌍을 기준으로 하는 직사각형 영역

7. Grid — 직사각형을 행, 열로 가지는 영역

8. Polygon — 지리 좌표 최소 3개 이상의 다각형 모양의 영역

9. ClosedLine — 도로 네트워크로 감싸여 있는 영역(회로)

9가지 위치 유형은 담고 싶은 위치 기반 정보 종류에 따라 적절한 형태로 사용해야 합니다. 이 글에서는 교통정보(링크에 대한 속도)를 다루기 때문에 Line 위치 유형을 사용합니다.


OpenLR을 사용하기 위한 요구사항은 지도 요구사항, 위치 속성 요구사항 2가지가 있습니다.


1. 지도 요구사항

◼️ 디지털 지도는 Node(도로의 교차점, 도로의 일부)와 Line(실제 도로)으로 구성됨 (Node : 선 사이의 연결점)

◼️ 모든 Node와 Line은 서로 연결되어 있어야 함

◼️ 지도 필수 요구사항

◾ WGS84좌표 : 지도 네트워크(도로)의 모든 Node는 WGS84 형식의 좌표 를 가져야 함

◾ 길이(미터) : 모든 라인은 실제 치수를 나타내는 미터 단위의 길이 값을 가져야 함

◾ 기하학적 구조(Geometry) : 모든 라인에 대한 실제 기하학적 구조 (라인의 실제 길이, 형태)를 알아야 함

◾ 기능적 도로 등급(Functional Road Class)

▫ 도로의 중요도에 따른 분류를 나타내며 8개보다 적거나 많으면 덜 중요한 Class를 무시해야 함

▫ 지도 네트워크(도로)의 모든 라인에는 해당 도로를 나타내는 기능적 도로 등급값이 있어야 함


1*YmGtqCJjS9k9TM9EwgGDgw.png <표1. Functional Road Class>


◾ 길의 형태(Form Of Way)

▫ 라인의 물리적 도로 유형을 설명함

▫ 네트워크의 모든 라인은 물리적 속성을 나타내는 웨이 값 형식을 가져야 함


1*78IHE1lD4hkYH1IVZAJDaA.png <표2. Form of Way>


2. 위치 속성 요구사항

◼️ 위치 유형 요구 사항을 충족하지 않는 위치는 OpenLR 인코딩 불가함
◼️ ️️Line location [Line]
◾ 라인은 반드시 연결되어 있으며 라인의 시작부터 끝까지 방향에 맞춰 횡단할 수 있어야 함
◾ 라인 위치는 라인 요소의 정렬된 목록으로 표시함
◾ 오프셋은 항상 양수 값으로 표시되며 오프셋의 총 길이는 전체 위치의 길이를 초과하지 않아야 함
◾ 오프셋 :
▫ 라인 위치 참조의 시작과 끝 포인트의 위치를 정확하게 찾기 위한 값
▫ 라인의 시작점 또는 끝점에서부터 떨어진 길이
▫ Positive offset(POFF) : 양의 오프셋으로 라인의 시작점에서부터 떨어진 길이
▫ Negative offset(NOFF) : 음의 오프셋으로 라인의 끝점에서부터 떨어진 길이


1*Mcgp7T4L1JLl6pnCzUIgSQ.png <그림3. offset>


◼️ ️️Point location [Geo-Coordinate, Point Along Line, POI with Access Point]

◾ Geo-Coordinate 사용

◾ Point Along Line : 기준선은 도로망 네트워크의 단일 라인이며, 선에서 점의 위치를 정하는 오프셋 값은 선의 길이를 초과할 수 없음

◾ POI with Access Point : 기준선은 도로망 네트워크의 단일 라인이며, 선에서 참조 위치(관심 지점)에 가기 위한 액세스 포인트의 위치를 정하는 오프셋 값은 선의 길이를 초과할 수 없음

◼️ Area location [Circle, Rectangle, Grid, Polygon, ClosedLine]

◾ Circle : 반경 값 — 양수

◾ Rectangle : 왼쪽 아래 좌표와 오른쪽 위 좌표의 위/경도 값은 달라야 하며 왼쪽 아래 좌표는 오른쪽 위 좌표의 남서쪽에 위치해야 함

◾ Grid : 왼쪽 아래 좌표와 오른쪽 위 좌표의 위/경도 값은 달라야 하며, 그리드 행렬 크기 1이상, 셀의 개수는 행 개수 * 열 개수 임

◾ Polygon : 영역 경계를 넘지 않아야 하며, 폴리곤 위치의 지리 좌표 시퀀스 정렬해야 함

◾ ClosedLine : 라인이 연결되어 있어야 하며, 선은 회로를 형성


위 2가지 요구사항에 따라 아이나비 지도에 대한 Map Connector를 구성해 주면, 9가지 위치 유형에 따라 위치 데이터를 인코딩, 디코딩 할 준비가 완료됩니다.


기존 아이나비 지도에 대한 Map connector을 구성하기 위해서는 도엽 단위로 관리되고 있는 지도를 Node와 Line으로 구성된 하나의 디지털 지도로 변환해야 합니다. 이때 Line의 선형, 위치, 길이, 방향을 추가합니다. 그리고 필수 요구사항 중 지도 요구사항의 FRC와 FOW를 도로에 특성에 맞춰 구성해야 하기 때문에 기존에 가지고 있던 도로의 특성을 통해 다음과 같이 구성했습니다.


1*CpVDULSqhDmDBU0jtwkCYw.png <표3. 아이나비 Functional Road Class>
1*glyfrnbKKo_kkK8mtallNA.png <표4. 아이나비 Form of Way>


이렇게 아이나비 지도를 OpenLR 사용에 맞는 형태로 변환 후, OpenLR Map Connector를 구축해 주면 OpenLR을 사용할 준비가 완료됩니다.


다음은 사전 준비가 완료되었을 때 OpenLR의 위치 참조 과정입니다.


인코더 : 인코더는 위치를 고유하게 설명하기 위해 LRP의 수와 위치를 결정

디코더 : 디코더는 수신된 LRP를 자체 Map의 위치로 해석

Map Connector : 해당 지도에서 OpenLR 위치 참조를 인코딩 및 디코딩 하기 위해 필요한 연결 다리

OpenLR 지원 위치 유형별 인코더, 디코더 사용

Map Connector는 사용하는 지도에 따라 별도 구현 필요

LRP(Location Reference Point) : OpenLR의 모든 위치 참조는 LRP로 나타내며 이는 노드로 표현


1*xBjU_uHq7dU8NlsRlt_bNw.png <그림4. OpenLR 위치 참조 과정>


송신자 측에서 OpenLR 방식의 위치 참조 방식으로 인코딩하여 바이너리 형식의 데이터로 배포하면 수신자는 바이너리 형식의 데이터와 가지고 있는 지도를 통해 디코딩 하여 자체 맵 위치로 해석하게 됩니다.


9가지 위치 유형 중 Line 위치 속성으로 인코딩, 디코딩에 대한 간단한 과정을 설명하겠습니다.


인코딩 과정

인코딩은 지도에서 송신자가 보내고자 하는 경로의 시작과 끝의 Offset을 정하고 최소한의 위치 기준점 (Location Reference Point (LRP))을 선정합니다.


1*cF-wFVHDwa59bCTpYEKURg.png <그림5. 인코딩 LRP 선정>


1. 경로의 시작/끝 LRP 선정

2. 인코딩 할 경로의 길이 확인 후 경로의 시작점부터 시작 LRP까지의 Offset, 끝점부터 끝 LRP까지의 Offset 계산

3. 경로의 시작점부터 끝점까지 최단거리 알고리즘으로 계산하여 경로가 포함되는 지점 확인

4. 경로의 편차가 생기는 지점에서 원본 경로를 기준으로 중간 LRP 재선정, 해당 LRP 지점부터 다시 최단거리 알고리즘 수행

5. 3번과 4번 과정을 반복하여 경로의 끝 지점까지 LRP 선정 반복

6. 위 과정을 통해 시작과 끝 지점의 Offset과 LRP를 얻고 이를 인코딩


디코딩 과정

디코딩은 전달받은 Offset과 LRP를 가지고 경로 복원 과정을 진행합니다.

1*_-NCHX0x9EHxd92W9J-cwQ.png <그림6. 디코딩 경로 복원>


1. 경로의 시작/끝 LRP 선정

2. 시작 LRP에서 후보 라인을 따라 다음 LRP까지 최단 경로 계산

3. 다음 LRP까지의 거리에 대한 오차 범위 확인을 통한 유효성 검사

4. 2번과 3번 과정을 반복하여 경로 추출


설명한 OpenLR을 사용하여 아이나비 지도의 인코딩, 디코딩과 타사 위치 정보에 대한 디코딩 예제를 실제 적용해 보았습니다.


1*ZKmKftHkj33tqE1uNilu3A.png <그림7. 아이나비 지도 인코딩, 디코딩>
1*yW8dB3LdOlOvet4VoADFrQ.png <그림8. 타사 교통정보 아이나비 지도 디코딩>


실제 적용을 통해 OpenLR을 통해 아이나비 지도를 다른 지도 환경에 인코딩 하고, 타사에서 제공하는 실시간 교통 정보를 디코딩하여 아이나비 지도 위치에 해석할 수 있다는 것을 확인했습니다.




한국은 KS링크라는 국가 표준 링크를 사용하고 있습니다. KS링크는 미리 코딩 된 위치로 위치를 참조하는 방법으로 지도에 종속적이라는 특징이 있습니다. 때문에 KS링크를 사용하지 않는 시스템에 대해 위치 참조를 해야 하는 경우 많은 어려움이 있고, 이러한 단점의 해결을 위해 동적 위치 참조 방법이 필요합니다. OpenLR은 국제 표준에 가깝게 사용되는 동적 위치 참조 방법으로, 세계적으로 다양한 시스템에서 사용하고 있습니다. 이는 전 세계적으로 위치 정보의 제공 및 공유가 가능하다는 것을 의미하고, 아이나비 지도의 실제 적용 사례를 통해 아이나비 지도 역시 전세계적인 위치 참조가 가능하다는 점을 확인할 수 있었습니다.


by 아이나비시스템즈 선행기술Lab Dev.2팀 김도형


iMPS배너_최종_하얀색.png

국내 가격 경쟁력 1위! 아이나비가 만든 차별화된 지도 솔루션, iMPS 바로가기


Reference

그림1. 제작
그림2. OpenLR 협회 홈페이지 첨부 파일
http://www.openlr.org/method.html
The OpenLR™ Whitepaper
그림3. 제작
그림 4. 제작
그림 5. OpenLR 협회 홈페이지 첨부 파일
http://www.openlr.org/method.html
The OpenLR™ Whitepaper
그림 6. OpenLR 협회 홈페이지 첨부 파일
http://www.openlr.org/method.html
The OpenLR™ Whitepaper
그림 7. 제작
그림 8. 제작
표 1. OpenLR 협회 홈페이지 첨부 파일
http://www.openlr.org/method.html
The OpenLR™ Whitepaper
표 2. OpenLR 협회 홈페이지 첨부 파일
http://www.openlr.org/method.html
The OpenLR™ Whitepaper
표 3. 제작
표 4. 제작


#지도 #내비게이션 #OpenLR #mapconnector #인코딩 #디코딩 #아이나비지도 #아이나비시스템즈

keyword
작가의 이전글아이나비 내비게이션을 Flutter로 구현할 수 있을까