Харьков и область (обсуждение)

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

Одноіменні вулиці - це історичний процес інтеграції. Отже достатньо вказати назву історичного села, яке вже давно не має власних меж, але власну назву зберігло. Такі утворення не мають чітких меж і/або перетинатися одне з одним, тому найкращим способом позначення таких об’єктів є просто простановка на карті точки з тегами place=suburb, name=X, name:ru, name:en (звідси будемо брати назви для перекладу назв уточнених вулиць). На wikimapia, на відміну від ОСМ, для Харкова місцевості якось проставили. Підозрюю, що приблизно, тому не варто на тому акцентувати увагу, якщо ми говоримо саме про вулиці, то нас їх геометрія і не має дуже цікавити - мета розділити одноіменні вулиці.

addr:suburb прописати лише для сегментів одноіменних вулиць, що не в центрі. В Харкові всі ж вулиці через відношення, отже на будинки нічого проставляти не треба.

Я не врахував існування змішаних схем адресації. Тому має бути трішки не так. Є два варіанти:

  1. Якщо вулиця задана через відношення. addr:suburb треба проставити на всі сегменти + (1.а АБО 1.б)
    1.а addr:suburb на саме відношення
    1.б задати name як CONCAT(name вулиці, ’ ', name suburb)

треба обрати один з варіантів 1.а або 1.б аби був єдиний стандарт для усієї країни.

  1. Якщо вулиця не задана через відношення. addr:suburb треба проставити на всі сегменти + addr:suburb на усі будинки.

А чому у варіанті “через відношення” недостатньо addr:suburb прописати тільки на відношення?
Пропоную для таких випадків(кількаразового використання однієї назви), а їх не надто багато, використовувати тільки схему 1.

Судячи з не раз згадуваного реєстру урбанонімів, та що в Київському районі називається Кіровська/Кировская

Так, але теоретично, згодом вулицю можуть продовжити, й вона “заповзе” на територію іншої “місцевості”.

То як треба робити?

Поставити в центрі “місцевості” точку з place=suburb, name=Основа, name:ru, name:en.
Якщо вулиця задана релейшеном, то прописати в тегах релейшена addr:suburb=Основа

Якщо нема релейшена (хоча по Харкову майже всюди релейшени), то addr:suburb=Основа прописуємо до кожного будинку на тій вулиці та до кожного відрізку вулиці.

Так?

Гм. Треба перевірити на місцевості.

У паперовому атласі Спаеро 2006 року та карті тревелЖПС вулиця Кірова
У реєстрі урбанонімів та у схемі вулиць від Спаеро (KharkivStreetsSpaero.osm) вулиця Кіровська.

Все правильно. Хоча якщо відношення нема, його легше створити за обклацування кожного будинку :slight_smile:

Особисто мені достатньо. Просто за логіою, якщо name задаємо в сегментах, то варто б інші теги туди ж пхати. Та й невідомо як поведуть себе сторонні аплікухи (наприклад nominatim) - треба це питання дослідити.

давайте решать проблемы по мере поступления

А хіба Nominatim використовує addr:suburb? Мені здається, що він просто показує назву найближчого place=suburb, або назву suburb/residential-полігона, що містить будинок.
Судячи з історії змін в wiki, addr:suburb придуманий російською спільнотою.

Крім osm2mp більш не знаю хто використовує addr:suburb.
А osm2mp ніби бере addr:suburb зі звязку
http://forum.openstreetmap.org/viewtopic.php?pid=284664#p284664

Ну і ще я їх використовую. Зараз я вигрібаю усі сегменти вулиць і групую їх по name + suburb. Обмежуватись суто сегментами відношень не хочеться - більша частина сегментів просто не включена у відношення. Тому я і говорю, що нелогічно ставити name на сегменти, а addr:suburb як продовження name, тільки на відношення. Уся логіка ламається. Виходить я можу працювати лише або з сегменти, або лише з відношеннями. Але так як у нас зараз 50/50 і всі сторонні аплікухи заточені на використання name саме з сегментів, вважаю ідею озвучену dudka поганою.

Та й всі “проблемні” вулиці країни на поточний момент заадресовані через addr:suburb саме на сегментах. Вище я пропонував проставляти addr:suburb або ж CONCAT(name вулиці, ’ ', name suburb) лише з метою:

  1. обєдання сегментів (навіть тих, що не потрапили у відношення через неуважність по цим атрибутам)
  2. мати можливість відрізняти відношення по текстовим міткам

Випадки

  • не додав addr:suburb в лінію(в схемі без звязків)
  • не додав лінію в relation у якого є addr:suburb(в схемі з звязками)
    абсолютно ідентичні. В обох випадках будуть роздвоєння вулиць.
    Якщо ставити addr:suburb на дороги - тоді вже треба ставити і на будинки. Адже досить часто будинок має addr:street, але не включений у зв’язок вулиці.

Ситуації ідентичні, але наслідки різні. Основне питання, як вибрати список вулиць міста?

Твій варіант: вигрібаємо всі відношення, а вже з них отримуємо name і suburb. Ця схема вимагає аби кількість відношень = кількості вулиць, чим зараз може похвалитись зовсім мізерна кількість міст країни. + Додаткова проблема: відсутність рендерів, що відображають вулиці на основі відношень і як наслідок неможливість виявлення помилок.

Мій варіант: вигрібаємо усі сегменти і групуємо їх за CONCAT(name вулиці, ’ ', name suburb). Отримуємо в кілька раз більше вулиць, ніж в першому варіанті. + відпадає проблема з затрудненням виявлення помилок.

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

На будинки ставити є сенс лише за умови, що будинок не включений у жодне відношення. Якщо адресація задана через addr:street, то звичайно треба виставити і addr:suburb. У разі використання відношень ця потреба відпадає, адже addr:suburb може бути взятий з самого відношення (варіант А), або ж з першого сегменту вулиці.

Вважаю, що на відношення є сенс вішати тільки теги не повязані з name. Наприклад, якщо у місті 1000 вулиць, а з них через відношення задано лише 700 - нічого страшного, що 300 залишившихся сиротами вулиць не отримають тег wikipedia.

До того ж врахуй, що екс-сільські вулиці зазвичай коротенькі - 1 сегмент (2-3 сегменти максимум). Кількість рухів у редакторі майже однакова для обох варіантів

Здається зрозумів в чому наше протиріччя:)
Ключова позиція з твого боку: addr:suburb є частиною назви. Правильно?
Ок, я з цим скоріше погоджуюсь. Дійсно логічно обидві частини назви зберігати на одному об’єкті - на лінії дороги.
Якщо ж додатково створюємо зв’язок - то аналогічно додаємо обидві частини назви в теги зв’язку - в name + addr:suburb.

Нет. Приписывание названия местности к названию улицы - это задача конвертора. А в OSM пусть эта информация хранится в соответствующих тегах.

Мова про те що, якщо зберігаємо name на лінії то і addr:suburb треба вказувати для лінії, не в name - окремо.
Якщо створюємо зв’язок і вказуємо там name то і addr:suburb треба вказувати також

А що, ми вже “прогнулися” під Льошу та переносимо назви вулиць з тегів ліній до тегів релейшена?

Ну, на мою думку логічно було б так:

  1. якщо нема релейшена, то addr:suburb прописуємо на кожній лінії, що відноситься до вулиці та на кожному будинку на цій вулиці.
  2. якщо є релейшен, то addr:suburb пишемо в тегах релейшена.
    Звичайно, тег addr:suburb прописуємо лише для тих вулиць, які мають одноіменних “сестер” у тому самому населеному пункті.

Саме так :slight_smile:

Льоша тут ні до чого. Основна фішка в тому, що якщо розглядати аддр:субурб як продовження name, то виставляти його необхідно, і на сегменти, і на відношення. Я керуюсь суто алгоритмічною необхідністю. Якщо ви знаєте інший відносно простий спосіб як вибрати усі вулиці, згрупувавши сегменти за name + suburb - пропонуйте.

В інакшому випадку, я дуже просив би все ж виставляти addr:suburb і на сегменти, навіть якщо задано відношення.

Використання релейшенів взагалі дозволяє винести ті теги, які стосуються всіх членів релейшену, в теги самого релейшена. При обробці релейшена конвертером ті теги у разі потреби мають бути перенесені на членів релейшена.
Тож конвертор чи валідатор повинен взяти релейшен, прочитати з його тегів addr:suburb та прописати той тег до всіх членів релейшена.

Не треба роботу, яку може зробити конвертор чи інший автомат-робот, перекладати на людей.

Ну так повиносьте тоді і name з сегментів на відношення. Адже аддр:субурб є логічним продовженням name. Ви готові це зробити для усієї країни/світу? Мабуть ні. Рендери, валідатори, конвертори працюють на основі запрограмованих дій, тому я і попросив навести алгоритм як це сколдувати при запропонованій в попередньому пості схемі? Невже не очевидно, що в тій схемі уйма мінусів?

Ну, наприклад, як це зробив Larry0ua з назвами вулиці у патчі конвертора osm2mp.

Беремо релейшен вулиці, дивимося, чи є тег addr:suburb. Якщо ні, то перебираємо у циклі всіх членів, шукаємо першого-ліпшого члена з тегом addr:suburb. Якщо таких немає, то вулиця вважається неприв’язаною до субурба.

Ну і щодо валідатора:

  1. наявність у одному населеному пункті декількох релейшенів типу street (associatedStreet) з однаковими name та відсутніми чи однаковими addr:suburb вважати помилкою.
  2. наявність несуміжних ліній з тегами highway=* та однаковими name помилкою не вважати, але позначати як потенційну помилку, варту уваги.