JOSM – Створення власних заготовок

У попередньому розділі ми дізнались, як додати заготовки в меню Заготовок JOSM. В цьому розділі ми розкажемо як створювати власні заготовки.

УВАГА! Ця тема для досвідчених користувачів… вважайте, що ми вас попередили!

Введення в XML

Для того щоб створювати власні заготовки, вам знадобиться розуміння мови XML. Якщо ви знаєте що таке XML, можете перейти до наступного розділу.

XML (“Extensible Mark-up Language” – “Розширювана мова розмітки”) – є однією із комп’ютерних мов, що дуже схожа на HTML. Головна відмінність, це те що основне призначення XML – обмін даними, а не їх показ. Багато застосунків в Інтернет використовують XML для передачі даних, OpenStreetMap – один із прикладів. XML використовує елементи, кожен елемент може мати вкладені в нього інші елементи. Наприклад, уявімо що ми бажаємо створити файл XML, який би містив меню ресторану. Нам треба створити кореневий елемент, який буде містити дані про наше меню. Наш кореневий елемент матиме початковий та кінцевий теґи, як тут:

  <menu>
  … будь-які дані, які ми бажали б додати в наше меню …
  </menu>

Інформація знаходиться в середині елемента, а кожен елемент може містити інші елементи.

  <menu>
    <item name=“Hamburger”>
      <cost>400</cost>
      <description>Смачний пиріжок з яловичиною</description>
    </item>
      <item name=“Nasi Goreng”>
      <cost>200</cost>
      <description>Смажений рис по-індонезійськи</description>
    </item>
  </menu>

У цьому прикладі ми маємо два елементи <item> в середині нащо кореневого елемента <menu> для опису двох різних страв з нашого меню. Кожен елемент містить два інші елементи: <cost> та <description>. Зверніть увагу, що ми маємо name=“Hamburger” в середині початкового теґа <item>. Це називається атрибут, він містить інформацію про елемент.

Термінологія XML

  • кореневий елемент: самий зовнішній елемент документа XML, який описує, що міститься в документі
  • елемент: будь-який об’єкт XML, що має початковий та кінцевий теґи, як <item> … дані … </item>
  • теґ: те що міститься в дужках, наприклад <item>. <item> – початковий теґ елемента, а </item> – кінцевий теґ. Не плутайте їх з теґами OSM, які мають інший сенс.
  • атрибут: частина інформації, яка міститься в середині теґа, наприклад, name=“Hamburger”

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

Файли заготовок JOSM

Спробуймо додати тренувальну заготовку в JOSM та проаналізуємо, як все працює.

  • Завантажте файл sample_presets.xml.
  • Додайте заготовку в JOSM відповідно до інструкцій з попереднього розділу.
  • Створіть новий шар та додайте до нього новий об’єкт.
  • Відкрийте меню Заготовки. Знайдіть пункт “Sample Building”. Клацніть на нього.

sample building menu

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

sample presets form

Давайте тепер подивимось на файл XML, який містить опис цього діалогу.

  • Знайдіть файл XML на вашому комп’ютері та відкрийте в текстовому редакторі. У Windows можна скористатись Notepad. Якщо ви хочете простіший у використанні редактор, ви можете завантажити безкоштовний Notepad++.
  • Файл sample_presets.xml виглядає наступним чином:

sample presets file

Не звертайте зараз уваги на перші шість рядків та на останній рядок, подивімось що знаходиться між теґами <item>

Перший рядок виглядає так:

  <item name="Sample Building" type="node,closedway">

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

Подивіться на наступний рядок:

  <label text="Building Form" />

Після вибору нашої заготовки в меню відкриється діалог вгорі якого ви побачите напис “Building Form”. Цей текст визначається у цьому рядку. Він визначає елемент <label>, який лише показує текст. Зміст визначається атрибутом text=”some text”.

Спустимось трохи нижче, до рядка:

  <key key="building" value="yes" />

Це один з теґів, які будуть застосовані до виділеного об’єкта, тому що він використовує елемент <key>, який описує теґ OSM що буде доданий цією заготовкою. Отже, виділений об’єкт автоматично отримає теґ building=yes.

Наступний рядок трохи інший, він використовує елемент <text>.

  <text key="name" text="Name of Building" default="" delete_if_empty="true" />

Елемент <text> створює пусте поле. В нього користувач може додати потрібний текст, коли JOSM показує вікно заготовки. Завдяки атрибуту delete_if_empty=”true”, якщо мапер залишить поле пустим теґ не буде доданий до виділеного об’єкта.

Випадаюче меню описується наступним рядком:

  <combo key="building:use" text="Building Use" values="residential, commercial, industrial" />
  <display_values="Residential, Commercial, Industrial"/>

Випадаюче меню описується елементом <combo>. Воно підписується текстом з атрибуту <text>, а ключ теґа OSM визначається атрибутом key. Значення теґу обирається з переліку – атрибут values. Атрибут display_values дозволяє вам показувати в меню більш зрозумілі підказки замість значень теґів OSM.

І нарешті, подивімось на останній рядок, де описується перемикач.

  <check key="building:vacant" text="Is the building vacant?" default="off" /> 
  <delete_if_empty="true" />

Елемент <check> описує, ну, ви здогадались! – перемикач. Атрибут default=”off” говорить про те, що типовий стан перемикача – вимкнено. Інші атрибути ми вже розглянули раніше.

Створення вашої власної заготовки

Найкращий спосіб створити власну заготовку – взяти наявну та змінити її під власні потреби. Ви можете змінювати наведену тут для прикладу заготовку, експериментувати з нею, щоб навчитись основ. Але не забувайте перезапускати JOSM кожного разу після внесення змін до неї.

Перед створенням власної заготовки ви маєте добре знати теґи, які ви збираєтесь використовувати. Вигадування нових теґів в OSM – зовсім інша тема. Взагалі, намагайтесь використовувати наявні в OSM теґи. Ви завжди можете ознайомитись з переліком теґів на сторінці Елементи мапи у Вікі OSM.

Наш файл зі зразком заготовки містить більшість елементів, які ви можете побачити в інших заготовках JOSM, їх вже й не так і багато. Якщо у вас є бажання поекспериментувати зі складнішою заготовкою, завантажте собі: dhaka_presets.xml.

На додачу, докладний опис всіх можливих елементів знаходиться тут.

Хай щастить!