Uk:Один об’єкт — один елемент в OSM
Один обʼєкт — один елемент в OSM — одна з рекомендованих практик. Це означає, що один обʼєкт реального світу треба позначати тільки одним елементом OSM.
Обʼєкти мапи
Загальні правила
Елемент OSM повинен представляти тільки один обʼєкт реального світу:
- Обʼєкт, який складається з будівель на території (наприклад: школа чи лікарня), треба мапити як земельну ділянку у вигляді полігону з полігонами будівель в середині. Теґи, які говорять нам чим насправді є цей обʼєкт, потрібно додавати до полігону земельної ділянки, а не будівлям, якщо тільки будівлі не є частиною основного обʼєкта (будівлі на території школи можна вважати частиною школи з точки зору топологічної вкладеності даних).
- Обʼєкт, що є будівлею, форма і положення якого відомі, має бути полігоном з відповідними теґами.
- Обʼєкт, положення якого відомо, але форма якого або невідома, або не має значення, має бути точковим обʼєктом з відповідними теґами.
- Обʼєкт, який складається з інших елементів, зазвичай позначається за допомогою звʼязку. Знов таки, теґи такого обʼєкта потрібно додавати до звʼязку, а не до членів звʼязку. Якщо теґи не розповсюджуються на всіх членів звʼязку – в такому випадку кожен член позначається власними теґами. Наприклад: relation:route використовується для позначення туристичних маршрутів, маршрутів громадського транспорту, або інших маршрутів, які проходять по лініях позначених теґами highway=* або railway=*, для залізниць.
Приклади невдалих випадків
- Полігональний обʼєкт, який містить точковий обʼєкт, і обидва позначені однаковим набором теґів, що представляють один і той самий обʼєкт реального світу.
- Полігон, що представляє територію, на якій знаходиться полігон будівлі, що позначені одними й тими ж теґами. Перенесіть теґи на зовнішній обʼєкт, лишивши на полігоні будівлі тільки теґи, що стосуються лише будівлі.
- Замкнена лінія, що містить теґи двох обʼєктів, один з яких є зазвичай лінійним обʼєктом, наприклад, жива огорожа позначена теґом barrier=hedge, та інший, що являє собою територію, наприклад, територію школи amenity=school. В такому випадку виникає певна неоднозначність, чи треба огорожу позначати окремою лінією, а щодо теґів – то не зрозуміло до яких обʼєктів їх треба застосовувати. Щоб розвʼязати цю неоднозначність створіть для території школи звʼязок, членом якого буде огорожа. Огорожа, як лінійний обʼєкт матиме власні теґи на лінії огорожі, а теґи, що стосуються позначення території школи додайте до звʼязку.
- Позначення готелю та ресторану в готелі одним елементом – tourism=hotel та amenity=restaurant теґами на точці чи на полігоні. В майбутньому це призведе до проблем, коли у вас стане потреба позначити їх властивості докладніше, наприклад години роботи opening_hours=*.
- Магазин в будинку замаплений, як один обʼєкт позначений теґами building=*, shop=* та name=* (назва зазвичай є характеристикою точки інтересу – point of interest – POI). Цей варіант є більш дискусійним, і він є загальновизнаним, якщо всі властивості застосовуються до всіх елементів одночасно.
Випадки, коли потрібно використовувати кілька елементів
Цей принцип не є абсолютом. З міркувань практичності деякі обʼєкти представлені більше одного разу через нюанси семантичних відмінностей між представленнями обʼєкта за допомогою точок/ліній/зв’язків, або через те, що різні види споживачів даних мають дуже різні потреби, або для збереження зворотної сумісності з поточними даними для споживачів у перехідний період. Приклади включають, але не обмежуються:
- Більше ніж два схожих обʼєкти на одній території, наприклад дві школи на спільній території. Зазвичай, якщо школи є окремими, вони повинні мати окремі території, але якщо вони відрізняються лише будівлями, територію треба позначити відповідним теґом landuse=education, а будівлі — позначити кожну окремо. Якщо кілька шкіл знаходяться в одній будівлі – кожну з них треба позначити теґом amenity=school, це, як правило, точки.
- Будинки багатоцільового призначення. Будівлю потрібно позначити теґом building=*:
- Якщо будівля має чітку основну ознаку, що може водночас містити в собі інші обʼєкти, основне призначення будівлі позначається на її контурі (полігоні), обʼєкти в середині позначаються точками чи полігонами, що відповідають обʼєктам в середині будівлі, наприклад: ресторан в готелі, чи магазини в торговому центрі.
- Якщо будівля не є окремим основним обʼєктом, який містить в середині інші обʼєкти, всі обʼєкти мають позначатись в середині периметра будівлі, наприклад: будівля що містить кілька магазинів, кожен з яких має власний вхід.
- Обʼєкти в середині будинків можуть позначатись точками та (мульти)полігонами. Додатково, ознайомтесь зі схемою Simple Indoor Tagging, яка призначена для докладного позначення внутрішніх планів будівель.
- Села позначаються точкою з теґом place=village, що ставиться в центрі населеного пункту, територія житлової забудови позначається полігоном чи кількома полігонами з теґом landuse=residential, так само й інші види землекористування. Крім того, територія всього населеного пункту окреслюється (мульти)полігоном, з тим самим значенням теґів place=* та name=* що й на точці. Наявність полігонів населених пунктів дозволяє спростити процес геокодування, в той час, як наявність окремих точок дозволяє зменшити обсяг даних, коли вам не потрібна докладна деталізація. Так само робимо і з place=town та place=city.
- Об'єктноорієнтований мапінг та функціонально орієнтований мапінг: Один і той же обʼєкт може бути замаплений двічі, один раз для позначення його функціонального призначення (наприклад: роутинг – прокладання маршрутів), інший для позначення справжньої форми обʼєкта (площі яку займає проїжджа частина). Позначення доріг лініями з теґами highway=* використовується в першу чергу саме для функціонального мапінгу, ми продовжуємо креслити лінію дороги навіть там де вона переривається, коли ми перетинаємо брід, водночас справжній вигляд дороги, її топологія може бути представлена полігонами позначеними теґами area:highway=*. За допомогою такого способу мапінгу ми можемо точно показати де закінчується покриття однієї дороги та починається інше на їх перетині. Іншим прикладом можуть бути мости. Додавання теґу bridge=yes на лінії доріг є прикладом функціонального мапігу, щоб підказати роутеру де знаходиться міст (та додаткові відомості про нього, наприклад максимально допустиму масу транспортного засобу). Коли ми хочемо позначити сам обʼєкт, його форму, контури, ми можемо накреслити полігон моста та позначити його теґом man_made=bridge, доповнивши його інформацією з назвою та посиланням на вікідата.
- Річки показуються полігонами з теґами natural=water + water=river, що позначають водну поверхню, та лінією з теґом waterway=river та назвою в значенні теґа name=* для позначення річища. Такий підхід дозволяє спростити показ та роботу з річками на великих масштабах, там де достатньо показу річок у вигляді лінійних обʼєктів.
- Довгі лінійні обʼєкти такі як waterway=river та інші можуть бути розділені на коротші відрізки, коли вони доволі довгі, з практичних причин та через наявні технічні обмеження.
- Атрибути ліній. Змінення значень теґів surface=*, lanes=*, turn:lanes=*, maxheight=* вимагає розділення лінії дороги highway=* на окремі відрізки. Це також може застосовуватись і до річищ water=river.
- Коли обʼєкт було розділено на кілька елементів їх можна згуртувати в один загальний елемент за допомогою створення звʼязка, наприклад, Relation:waterway – для представлення всієї ріки одним елементом даних. Зверніть увагу, що такі звʼязки не є заміною теґування ліній і в багатьох випадках принципово не можуть замінити його, наприклад, коли одна річка має різні місцеві назви вздовж свого річища, як от Дунай.
- Назви природних територій, що складаються з кількох ділянок, таких як ліси, водно-болотні угіддя та водойми. Деякі мапери вважають за краще повторювати тег name=* для всіх ділянок, але це суперечливо і не працює, якщо ділянка має власну назву.
Використання кількох теґів
Принцип один обʼєкт — один елемент OSM в першу чергу стосується точок/ліній/звʼязків, але не теґів.
Деякі обʼєкти мають кілька різних варіантів позначення. Так, waterway=riverbank або natural=water + water=river використовуються для позначення водної поверхні річок і означають одне й те саме.
Таке подвійне теґування не суперечить цьому конкретному правилу, «один обʼєкт світу – один обʼєкт OSM». В залежності від ситуації таке подвійне теґування може бути прийнятними, може використовуватись одночасно, або бути явно небажаним. Теґи contact:phone=* + phone=* з однаковим значенням задовольнять прихильників обох схем, і не існуватиме жодної причини для відкидання того чи іншого способу теґування. Але за наявності стандартного теґу буде нормально, якщо його дублювання буде усунуто. Так у випадку amenity=police + emoji_encoded_tag=:cop:, другий теґ можна без вагань вилучити, це лише призведе до покращення даних OpenStreetMap.
Повторювані властивості
Зауважте, що у випадках лінійних обʼєктів подібних до річок waterway=river, теґ name=* не має повторюватись на полігонах natural=water + water=river, він додається лише до річища.
Так само і для area:highway=* та highway=* – name=* не має повторюватись.
Дивіться також
- Зберігайте історію – схоже на ці рекомендації, але стосується історії, а не теґів
- Relation:multipolygon — спосіб позначення складних полігонів (поширений приклад: обʼєкти розділені дорогою, чи озеро з островами)
- Лінія – про відмінності між лінійним обʼєктами та обʼєктами у вигляді полігонів
- Relation:site, якщо обʼєкт не може бути представлений простим мультиполігоном (обʼєкти розпорошені по місцевості чи регіону)
- building:part=* — описує спосіб позначення частин будинків