Uk:Елементи

From OpenStreetMap Wiki
(Redirected from Uk:Data model)
Jump to navigation Jump to search

Елементи (або примітиви даних) є основними компонентами концептуальної моделі даних подання реального світу в OpenStreetMap. Вони складаються з:

  • точок (визначає точку в просторі),
  • ліній (визначають лінійні об’єкти та межі полігонів), та
  • зв’язків (які використовуються, щоб показати як елементи поєднуються один з одним).

Всі перелічені елементи можуть мати один або кілька теґів (які описують зміст конкретного елемента).

Точка (Node) node

Основна стаття: Точка

Точка представляє конкретну точку на земній поверхні, яка зазначається своїми координатами (широтою і довготою). Кожна точка, щонайменше, має власний ідентифікатор та координати.

Точки можуть використовуватись для визначення самостійних точкових об’єктів. Наприклад: лавка в парку чи колодязь.

Точки також використовуються для визначення форми ліній. Точки, що складають лінію часто не мають власних теґів. Проте є специфічні моменти, коли теґи до таких точок потрібно додавати. Наприклад, теґ highway=traffic_signals використовується для позначення світлофорів на лінії дороги, а power=tower позначає опору лінії електропередач.

Точка може бути членом зв’язку. Члени зв’язку також можуть мати ролі: тобто, опис функції точки в даному конкретному наборі пов’язаних елементів даних.

Лінія (Way) way closed way area

Основна стаття: Лінія

Лінія — це впорядковане послідовне поєднання від 2 до 2,000 точок, що утворюють ламану лінію. Лінії використовуються для позначення лінійних об’єктів, таких як річки та дороги. way

Лініями також позначають межі полігонів, таких як будівлі та ліси. В такому випадку перша та остання точки матимуть однакові координати. Це називається — "замкнена лінія" closed way

Зверніть увагу, що замкнені лінії іноді представляють кільця, наприклад, кільцевий рух на автомобільних дорогах, а не полігони. Для того, щоб визначити, з чим маємо справу, потрібно проаналізувати теґи.

Полігони з отворами, або з межами що складаються більше ніж 2,000 точок, не можуть бути представлені у вигляді однієї лінії. Замість цього потрібно використовувати інший елемент даних — мультиполігон.

Зв’язок (Relation) relation

Основна стаття: Зв’язки

Зв’язок — багатоцільова структура даних, яка представляє взаємовідносини між двома чи більше елементами даних (точками, лініями та/або іншими зв’язками). Наприклад:

  • Зв’язок з маршрутом, до якого входять лінії, що утворюють певний маршрут (пронумеровану автомагістраль), велосипедний маршрут, або маршрут громадського транспорту.
  • Обмеження маневрів, які вказують на неможливість рухатись в певному напрямку, з однієї дороги на іншу.
  • Мультиполігони — описують полігони, що містять отвори (мають 'зовнішні' та 'внутрішні' контури).

Таким чином, зв’язки можуть мати різні значення. Чим є зв’язок, визначається його теґами. Як правило, зв’язок матиме теґ type=*. Інші теґи зв’язку потрібно інтерпретувати у світлі значення теґу type.

Зв’язок переважно є впорядкованим переліком точок, ліній та інших зв’язків. Ці об’єкти є членами зв’язку.

Кожен елемент зв’язку може мати власну роль. Наприклад, зв’язок обмеження маневру має членів з ролями "from" та "to", що зазначають можливість повороту в той чи інший бік.

Поодинокий елемент, такий як якась певна лінія, може з’являтись у зв’язку кілька разів.

Теґ tag

Основна стаття: Теґи

Всі елементи даних (точки, лінії та зв’язки), так само як і набори змін, можуть мати теґи. Теґи описують зміст конкретного елемента, якому вони призначені.

Теґ складається з пари текстових полів вільного формату: 'ключа' та 'значення'. Кожне з цих полів може складатись з 255 символів юнікоду. Наприклад, highway=residential використовується для позначення дороги, основним призначенням якої є надання можливості людям дістатись їх домівки. Один елемент не може мати два теґи з однаковим 'ключем', 'ключі' мають бути унікальними. Наприклад, ви не можете позначити один об’єкт теґами amenity=restaurant та amenity=bar одночасно.

Не існує сталого словника теґів, але існує багато домовленостей, задокументований в цій вікі (почніть з вивчення сторінки Об’єкти мапи). Про статистику застосування певного теґу можна дізнатись за допомоги сервісу Taginfo. Якщо існує більше ніж один спосіб позначити певний об’єкт, краще використовувати той, що є найбільш поширеним.

Не всі елементи мають теґи. Точки, якщо вони є елементами ліній, переважно не мають теґів. Лінії та точки також можуть не мати теґів, якщо вони є членами зв’язків.

Загальні атрибути

У базі даних OSM, ми зберігаємо наступні атрибути для точок, ліній та зв’язків. Можливо для ваших застосунків вони всі й не потрібні, а деякі сторонні ресурси з вибірками даних з OSM можуть й не містити їх всі.

назва значення опис
id integer

(64-bit)

Використовується для ідентифікації елементів. Типи елементів мають власні простори ID, тож може існувати точка з id=100 разом з лінією з id=100, які навряд чи можуть бути пов’язані або бути географічно поруч.

Для наявних в базі даних елементів використовуються позитивні значення (більші за нуль). Навіть після модифікації або вилучення елемента його id залишається за ним. Від’ємні id (менші за нуль) є зарезервованими (область їх застосування обмежується поточним набором правок та не зберігається в базі) та використовуються лише під час надсилання даних до бази OSM для ідентифікації новостворених об’єктів та посилання на них в інших новостворених об’єктах (під час збереження сервер замінює від’ємні id, що надсилаються програмами-редакторами, на постійні позитивні для кожного об’єкту та проводить відповідні зміни для всіх пов’язаних об’єктів).

user string Містить прізвисько учасника, який останнім змінював об’єкт (подається лише для інформації та може бути порожнім). Учасники в змозі змінювати власні прізвиська в будь-який момент (наявні в базі елементи посилатимуться на нове прізвисько без додаткових дій з боку учасника).
uid integer Числовий ідентифікатор учасника, який останнім змінював об’єкт. Цей ідентифікатор є незмінним.
timestamp W3C Date and Time Formats Час внесення останніх змін (напр. "2016-12-31T23:59:59.999Z").
visible "true"
"false"
Показує чи об’єкт позначено вилученим у базі даних, якщо visible="false" – інформація про об’єкт виводиться тільки у відповідь на запити до історії об’єкта.
version integer Версія об’єкта. Новостворені об’єкти мають версію 1, яка збільшується з кожним завантаженням змін об’єкта на сервер. Сервер може відкинути нову версію об’єкта якщо, версія об'єкта, що надсилається, не збігається з версією цього об’єкта в базі даних на сервері.
changeset integer Набір змін в якому об’єкти були створені або змінені. (рекомендується підтримка 64-bit в застосунках для тривалої сумісності з базою OSM. Якщо застосунки тільки отримують дані з бази, без надсилання змін до неї, вони можуть ігнорувати цей атрибут).

Звичайно, на додачу ми зберігаємо теґи, а також повну історію редагування кожного елемента.

Історичні відомості

Раніше існував ще один елемент даних:

  • відрізок, він з'єднував дві точки; лінії своєю чергою складались з відрізків.

Застереження щодо номенклатури XML

Основна стаття: OSM XML

Ця документація призначена для користувачів високорівневих інструментів OSM, таких як редактори, вона не є стандартом даних низького рівня. Користувачам, які шукають стандарт низького рівня, потрібно буде зробити деяку інтерпретацію документації, щоб отримати чітке розуміння, також вони повинні знати про відхилення від стандарту XML.

Елементи

Набір елементів у OSM XML, які в документації називаються елементами, є підмножиною фактичних елементів XML, знайдених у даних. Тобто термін Елемент у XML і термін Елемент в OSM XML не є синонімами.

Елементи в даних OSM представлені точками, лініями та зв’язками. Елементи XML – tag, nd, та member не стосуються елементів OSM XML, але натомість являються елементами XML.

Це ні в якому разі не робить дані недійсними, це лише семантична плутанина, яка вкралася в документацію, яка вважається не надто важливою, щоб виправляти її.

Ідентифікатори

Користувачі інструментів XML також мають знати, що OSM XML не відповідає специфікації XML. В XML ідентифікатори елементів мають бути унікальними, однак в даних OSM XML вони не унікальні. Document.getElementById() залишається undefined під час обробки даних OSM XML.