Ko:관계

From OpenStreetMap Wiki
Jump to navigation Jump to search
Osm element relation.svg

관계는 오픈스트리트맵의 세 가지 핵심 요소 중 하나입니다(나머지 둘은 정점(노드)입니다).

관계는 하나 이상의 정점, 길, 또는 관계(구성원)를 순서대로 나열한 목록으로, type=* 태그가 붙습니다. 관계는 서로 다른 객체(호수와 호수 속의 섬, 또는 버스 노선을 구성하는 도로 조각 등) 간의 논리적 관계 또는 지리적 관계를 정의하는 데 사용합니다. 관계의 구성원은 관계 내에서 자신이 맡은 역할을 가질 수 있습니다.

중요: 관계는 반드시 기하학적 요소(하나 이상의 정점 또는 길)가 있는 구성원을 가지거나, 앞의 규칙을 만족하는 관계를 구성원으로 가지거나, 앞의 규칙을 만족하는 관계의 자식이어야 합니다. 즉 모든 직계 자손(자식, 자식의 자식, 자식의 자식의 자식, ...)과 모든 직계 부모(부모, 부모의 부모, ...)와의 관계를 고려했을 때, 적어도 이들 개체 중 하나는 기하학적 요소를 구성원으로 가져야 합니다. 그렇지 않다면(즉, 기하학적 요소 없이 관계만 있다면) 이 모든 관계는 지도상의 구체적인 어떤 것과도 연결되어 있지 않기 때문에 지도에서 관계를 볼 수 없습니다.

쉽게 말해서 정점 하나를 구성원으로 갖는 관계 A를 구성원으로 갖는 관계 B의 경우, 관계 A의 정점을 삭제하면 관계에 기하학적 요소가 없어지게 됩니다. 대부분의 편집기는 오픈스트리트맵에 잘못된 데이터가 섞이는 일을 막기 위해 자동으로 두 관계를 삭제합니다.

사용례

관계는 개체 간의 논리적 관계 또는 (일반적으로 서로 가까이 붙어 있는) 지리적 관계를 구조화하는 데 사용합니다.

관계는 느슨하게 연결된 항목이 아니라 넓게 퍼져 있는 항목을 저장하도록 설계되었습니다. 예를 들어 '한국의 모든 인도'를 모으기 위해 관계를 사용하는 것은 적절하지 않습니다.

크기

관계에 300개 이상의 구성원을 넣지 않는 것이 좋습니다. 관계에 구성원이 많을수록 처리하기 어렵고, 파손 및 충돌하기 쉬우며, 데이터베이스와 서버에서 더 많은 리소스를 소비하게끔 하기 때문입니다.

만약 하나의 관계에 300개 이상의 구성원을 넣어야 한다면 관계를 여러 개로 쪼갠 후 이들 관계를 초관계(Super-Relation, 슈퍼 관계)로 묶으세요(이론적으로 좋은 개념이지만 실제로 초관계를 지원하는 소프트웨어는 드뭅니다).

역할 Osm element role.svg

역할(role)은 구성원이 맡은 역할을 표현하는 부가 속성입니다.

예를 들어 다중 다각형 관계에서는 길이 다중 다각형의 바깥 경계를 구성하는지 안쪽 경계를 구성하는지 나타내기 위해 Role outerRole inner 역할을 사용합니다.

강의 수로 관계(강을 표현하는 모든 강줄기(waterway=river)와 강의 지류를 포함하는 관계)에서는 강의 본류를 나타내기 위해 main_stream 역할을 사용하고, 지류를 나타내기 위해 side_stream 역할을 사용합니다.

예시 relation

다중 다각형

다중 다각형은 오픈스트리트맵에서 area 영역 을 표현하는 두 가지 방법 중 하나입니다. 대부분의 영역은 closed way 닫힌 길 하나만으로 표현이 가능하지만, 거의 모든 영역 지물은 닫힌 길뿐만 아니라 다중 다각형 관계로도 표현할 수 있습니다. 다중 다각형 관계는 영역 내부에 구멍이 뚫려 있거나, 외부 영역이 여러 개이거나(월경지 등), 정점이 2,000개 이상 필요한 경우에 필요합니다.

다중 다각형 관계에서는 길이 다중 다각형의 바깥 경계를 구성하는지 안쪽 경계를 구성하는지 나타내기 위해 Role outerRole inner 역할을 사용합니다.

섬이 있는 호수를 표현할 때는 호수의 외부 경계에 'outer' 역할을 부여하고 섬에 'inner' 역할을 부여하면 됩니다. 그러고 나서 섬을 표현하는 적절한 태그를 섬에 붙여주세요(바위섬인 경우 natural=bare_rock).

버스 노선

버스 노선은 관계에 type=route + route=bus 태그를 붙여서 만들 수 있습니다. 여기에 추가로 name=*(명칭), ref=*(고유 번호), from=*(시점), to=*(종점), operator=*(운영자/운영사) 태그까지 붙여주면 더 좋습니다.

노선 관계에서 첫 번째 구성원은 'stop' 역할을 가진 정점으로, 정차 지점을 나타냅니다. 정차 지점은 차량이 주행하는 방향에 따라 정렬됩니다. 정차 지점 뒤에는 버스가 운행하는 을 추가합니다. 길은 정차 지점의 순서에 따라 순서가 매겨집니다. 길에는 역할을 붙이지 않습니다.

기타 예시

도구

관계로 경로 탐색하기

OSRM이나 Valhalla를 이용하면 특정 노선 관계를 경로 탐색에 이용할 수 있습니다.

예를 들어 일부 자전거 내비게이션은 자전거 노선이 있는 도로로 안내하는 것을 선호합니다. 자전거 노선이 있는 도로를 자전거로 이동하기에 좋은 도로로 간주하기 때문입니다. pilgrimage=*(순례) 노선 관계를 따르거나, 보다 일반적으로 번호가 작은 도로 노선을 따라 길을 안내할 수도 있습니다(지방도보다 국도가 노선 번호가 작다는 점을 이용합니다).

OSM XML

주요 문서: OSM XML
 <relation id="13092746" visible="true" version="7" changeset="118825758" timestamp="2022-03-23T15:05:48Z" user="" uid="">
  <member type="node" ref="5690770815" role="stop"/>
  <member type="node" ref="5751940550" role="stop"/>
  ...
  <member type="node" ref="1764649495" role="stop"/>
  <member type="way" ref="96562914" role=""/>
  ...
  <member type="way" ref="928474550" role=""/>
  <tag k="from" v="Encre"/>
  <tag k="name" v="9-Montagnes de Guyane"/>
  <tag k="network" v="Agglo'bus"/>
  <tag k="not:network:wikidata" v="Q3537943"/>
  <tag k="operator" v="CACL"/>
  <tag k="ref" v="9"/>
  <tag k="route" v="bus"/>
  <tag k="source" v="https://www.cacl-guyane.fr/wp-content/uploads/2021/01/PLAN-RESEAU-URBAIN-AGGLO-BUS-1.pdf"/>
  <tag k="to" v="Lycée Balata"/>
  <tag k="type" v="route"/>
  <tag k="website" v="https://www.cacl-guyane.fr/lagglo-au-quotidien/se-deplacer/transport-urbain-2/"/>
 </relation>

관련 문서