Валідатор назв вулиць

Я наваляв невеличку тулзу для перевірки назв вулиць - OSM Editor, почав виправляти. Можливо комусь також буде корисно.

Списки вулиць по містах в табличній формі з можливістю редагування таблиці зі збереженням змін через OSM API, сортування і групування по рядках, пошуку і візуалізацією на мапі сегментів вулиць і привязаних до них будинків.

Перевіряються наступні помилки (підсвічються червоним):

1. name та name:uk мають відповідати регулярному виразу

~([АаБбВвГ㥴ДдЕеЄєЖжЗзиІіїЇЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщьЮюЯя0-9XVI’\- \.]+)(вулиця|провулок|площа|проспект|бульвар|узвіз|міст|проїзд|набережна|шосе|алея|в’їзд|тупик|спуск|майдан|підйом|лінія|дорога)~

2. name:ru має відповідати регулярному виразу
Для name:ru

~([АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщъыьЭэЮюЯя0-9XVI’\- \.]+)(улица|переулок|площадь|проспект|бульвар|спуск|мост|проезд|набережная|шоссе|аллея|въезд|тупик|спуск|майдан|подъём|линия|дорога)~

3. Кількість слів(пробілів) у name/uk/ru/en має співпадати
4. Класифікатори вулиць мають співпадати:

вулиця|провулок|площа|проспект|бульвар|узвіз|міст|проїзд|набережна|шосе|алея|в’їзд|тупик|спуск|майдан|підйом|лінія|дорога
улица|переулок|площадь|проспект|бульвар|спуск|мост|проезд|набережная|шоссе|аллея|въезд|тупик|спуск|майдан|подъём|линия|дорога
Street|Lane|Square|Avenue|Boulevard|Descent|Bridge|Pass|Embarkment|Road|Alley|Entrance|End|Descent|Square|Ascent|Line|Road

5. Пробіли на початку або в кінці тегу є помилками
6. name має співпадати з name:uk
7. Допустимий апостроф в назвах такий як тут: http://www.openstreetmap.org/browse/way/109925030

Кнопки над таблицею проводять фільтрацію на пошук дублікатів, що мають спільну назву на одній мові, але на інших відрізняються.

Аби проводити редагування, слід провести OSM-аутентифікацію під своїм існуючим юзером (правий верхній кут). Даблклік по ячейці - відкриває редагування. Після змін клікаєте на кнопочку “Зберегти” і дані зберігаються на сервер OSM від імені вашого користувача.

Часто не зберігаються зміни, якщо їх більш ніж 5-20. Поки ця проблема не пофіксана - не забувайте клікати по кнопці Зберегти, роблячи правки невеличкими порціями.

Понравилось, очень даже юзабельно. Сильно впечатлило плавность перемещения карты под выделенную улицу.
Из запланированного Вами даже востребовано:
можливість редагування таблиці зі збереженням змін через OSM API.
Немного не понял, что считается багом, отсутсвие украинского названия?

Отсутствие name, или неудовлетворение такой регулярке ~.*(вулиця|провулок|площа|проспект|бульвар|узвіз|міст|проїзд|набережна|шосе|алея)~

Нужная вещь. Пригодится. Особенно с “можливість редагування таблиці зі збереженням змін через OSM API”. Только моего города почему-то нет в списке.

Кривой Рог сейчас добавлю. Дайте список нужных городов и убедитесь, что для города указана административная граница. Например для Одессы выборка улиц с таким условием не срабатывает:

ST_Within(way, (SELECT way FROM planet_osm_polygon WHERE name = ‘Одеса’ AND boundary = ‘administrative’))

Може фільтрувати по конкретному way_id/relation_id?
Ось Одеса: http://www.openstreetmap.org/browse/relation/1413934
Ваш фільтр не працюватиме наприклад для Чернівців, які крім обласного центру в Чернівецькій області також існують як районний центр у Вінницькій.
Додайте Чернівці також будь ласка.
У регулярку додайте будь ласка

  • “в’їзд” i “тупик” яких чимало у Харкові

І якщо не важко ще одну регулярку перевірки дозволених символів:
а) кириличні букви
а’) в name:uk не повинно бути ы,ё,ъ
а’‘) в name:ru не повинно бути є,і,ї
а’‘’) в name:en не повинно бути кириличних символів
б) латинські I,V,X – для вулиць “Івана Павла II”, “XXV з’їзду КПРС”
в) апостроф ’
г) дефіс

Хм… форум конвертує апостроф в прямий апостроф
Нам потрібен такий як тут: http://www.openstreetmap.org/browse/way/109925030

Володимир-Волинський, будь-ласка, додайте!
http://www.openstreetmap.org/browse/relation/2000000

Якраз працюю над вулицями міста. Лишилося близько 35 нанести.

Є проблема. Я використовую osm2pgsql -s --keep-coastlines … Після цього для Одеси, якщо виконати наступні запити отримаємо:

SELECT array_to_string((SELECT parts FROM planet_osm_rels WHERE id = 1413934), ', ') – список ІД ліній, що складають межу Одеси

“26150437, 4529551, 118116543, 118116544, 118116184, 118116187, 98611821, 42345662, 130190036, 108419031, 130190135, 98611822, 130194756, 4530497”

А тепер якщо спробувати вибрати ці лінії

SELECT array_to_string(ARRAY(SELECT osm_id FROM planet_osm_line WHERE osm_id IN (
SELECT parts[k] AS v
FROM (SELECT generate_subscripts(parts, 1) AS k, id, parts FROM planet_osm_rels) foo
WHERE id = 1413934
)),', ')

Отримуємо обрізаний результат:
“4529551, 108419031, 118116184, 118116187, 130194756, 4530497, 98611821, 118116543, 118116544”

Виходить, що osm2pgsql проігнорував частину ліній, з відношення кордону Одеси. Як це побороти?

А osm-файл звідки брали? В ньому ті лінії є?
26150437 - точка, що позначає Одесу
Схоже, що випали лінії які без тегів?

Дякую, справа дійсно у відсутності тегів. Спробував з опцією hstore. Не допомогло. Виявляється, osm2psql рілейшини зберігає з айдішками < 0. В різних містах різні теги. Але загалом, кордони багатьох міст вдалось вибрати наступним чином:

SELECT * FROM planet_osm_polygon WHERE name IS NOT NULL AND admin_level IS NOT NULL AND place = ‘city’ ORDER BY name

Маємо вулиці 31 міста України для правки.

Очень интересно.
А можно сгруппировать города по регионам (АРК, области)?
Было бы немного удобней.

olehz, я вам вчора дав неправильний url для відкриття ліній в JOSM
Ось правильний варіант: http://127.0.0.1:8111/load_object?new_layer=false&objects=w<way_id>
Наприклад: http://127.0.0.1:8111/load_object?new_layer=false&objects=w23678268
Підправте будь ласка.
Детальніше про RemoteControl-plugin можна почитати тут: http://josm.openstreetmap.de/wiki/Uk%3AHelp/Preferences/RemoteControl

Уважаемый olehz,

В свете последних добавлений на http://nadoloni.com/streets.html, на мой взгляд еще более актуальным становится

“А можно сгруппировать города по регионам (АРК, области)?
Было бы немного удобней.”

Также прошу Вас описать процесс редактирования реестра на форуме землеустроителей в теме
OpenStreetMap - источник открытых данных - как сделать полезным в работе землеустроителя?

Землеустроители по роду своей деятельности постоянно работают с адресами, и подобная информация нам очень полезна.

Ок, посилання на JOSM змінив. Додав всі міста з тегом place: city і town, в яких позначена хоча б одна вулиця. В списку 87 міст. Всі інші озвучені вище фічі (додаткові перевірки, OSM API, групування по регіонам, будинки і т.д.) постараюсь прикрутити найближчими днями.

Маю питання щодо “Угоди про порядок слів в назві вулиці”.

  1. Наприклад, маємо в місті X:

Академіка Андрія Сахарова вулиця
Сахарова площа
Андрія Сахарова провулок
Сахарова А. алея

Мабуть потрібно стандартизувати всі назви? Тобто використати найдовшу. Але довгі назви не рендеряться на коротких вулицях. Що дуже хижо.

  1. При поточній угоді найменування неможливо відсортувати вулиці за прізвищем. Та й при пошуці більшість орієнтується на прізвище (імя і та й чим прославився той чи інший діяч знають зовсім не всі).

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

Щось заглючило. Всі вулиці Феодосії показує у Харкові, сама Феодосія порожня.

edit: перевантаження дерева допомогло, але глюк цікавий.

А можна пояснення, що означає червоне у полі bug, і які кольори там взагалі бувають?

Наскільки зрозумів - відсутність слова вулиця/проспект/провуток… в name, а також name на російській мові. Запускай свого бота :slight_smile:

Схоже на те. Але не роспізнаються в’їзди та підйоми.

Якщо

~([АаБбВвГ㥴ДдЕеЄєЖжЗзиІіїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщьЮюЯя0-9XVI’- .]+)(вулиця|провулок|площа|проспект|бульвар|узвіз|міст|проїзд|набережна|шосе|алея|в’їзд|тупик|спуск)~ для name

і

~([АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщъыьЭэЮюЯя0-9XVI’- .]+)(улица|переулок|площадь|проспект|бульвар|спуск|мост|проезд|набережная|шоссе|аллея|въезд|тупик|спуск)~ name:ru не спрацьовують поле Bug = 1.

Зараз колір лише один. Можна і кілька поставити. Будуть пропозиції які кольори при яких умовах ставити?

І проставте тег place для кордонів тих міст, які не попали у список (Богодухів, Ялта, Євпаторія, Севастополь…):

SELECT DISTINCT osm_id, name FROM planet_osm_polygon WHERE name IS NOT NULL AND admin_level IS NOT NULL AND (place = ‘city’ OR place=‘town’) ORDER BY name

Пробував у JOSM - щось не виходить.

В кожному місті Х є чітко прописана назва вулиці. Таку і треба прописувати.
В одному місті може бути вулиця Сахарова, а в іншому - Академіка Сахарова. Нічого поганого в цьому не бачу.
Те що вони не реднеряться на openstreetmap.org - теж нічого поганого.
Як то кажуть OpenStreetMap - в першу чергу є базою даних і далеко не в першу чергу є тією картою що бачимо на openstreetmap.org.
І - класичне - не малюємо під рендерер:)

Я так розумію ви це хочете робити на своєму сайті?
Можна спробувати так:

  • беремо значення з name-тегу
  • відрізаємо всі можливі префікси типу “Полковника”,“Князя”,“Імператора”,“Генерала” тощо
  • відрізаємо всі можливі префікси імен
  • сортуємо обрізані значення
    Якщо треба - напишу вам зібрані мною префікси

Зовсім не бачу проблем для пошуку.

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

  • вулиця Академіка Сахарова
  • Львівська вулиця
  • Майдан Незалежності – до речі ми його так і пишемо зараз, хоча це не відповідає угоді.
  • Радянська площа