Перейменування вулиць

У нас активно законодавчо змінюються назви вулиць, і при кількості перейменованих від двох десятків починаючи, ручне перейменування може зайняти досить багато часу. Пропоную тул, що в цьому допоможе: https://github.com/Larry0ua/ua-convert/tree/master/other/renameStreets

Як користуватись:

  • заповнити файл replacements.txt за шаблоном (tab separated, можна відкрити у excel і зберегти потім у Unicode text. Перша колонка в файлі - регекспи, тобто можна писати повну назву, можна і частину назви, але щоб вона не співпала з іншими вулицями)
  • поставити Groovy (Windows: http://www.groovy-lang.org/install.html#_installation_on_windows)) та Java, якщо нема
  • скачати чи вирізати з дампа місто, зберегти в osm
  • всі файли покласти в одну папку - скрипт, файл перейменувань і дамп міста
  • поміняти в скрипті імена файлів, запустити. На цьому етапі кажуть, що краще запускати з консолі стрічкою
"C:\Program Files (x86)\Groovy\Groovy-2.4.5\bin\groovy" RenameStreets.groovy -e UTF-8 > log.txt
  • отриманий файл відкрити джосмом, перевірити, чи не зачеплено нічого зайвого, залити

По файлу замін - треба бути обережним, щоб правила не перекривались для вулиць, провулків з номерами і т.д. була однозначна відповідність.
Якщо якихось вулиць є кілька по різних районах, такі вулиці перейменовуються ЛИШЕ вручну!

Скрипт переписує всі name в old_name (name:xx також) на вулицях і адресних відношеннях і заповнює name, name:uk. Також заміняє addr:steet.

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

Вхідний файл з osm-даними можна отримати overpass-запитом
http://overpass-turbo.eu/s/cY6

Имеются ли какие-то средства, для того чтобы указать дату, когда старое значение перестало быть актуальным?

Частично скопирую свой пост из другого треда (OSMAnd):

Возможно ли реализовать режим, чтобы были видны одновременно и новые названия и старые (например в скобочках)?
Сразу возникает вопрос как отделить новые переименования от исторических (например в каких-то случаях old_name имеет название которое уже неактуально)
Хотелось бы иметь дату переименования и использовать такой режим только для новых переименований (например меньше трех лет)
Вики предлагает следующий подход:
Key variants can be suffixed with language code (such as “name:en”) and date namespace suffix (such as “old_name:en:1921-1932”).
Однако я не уверен, что все будут придерживаться этого принципа

полагаю что это излишне, всё-таки мы тут не историей занимаемся
для исторической справки я бы предложил давать ссылку на Википедию или Викиданные

Новые названия не все люди сразу выучат, все документы поменяют, адреса всех знакомых уточнят. Посему старое название будет востребовано.

Ставьте дату
name:-2015=xxx конечно весьма прикольно выглядит.
Я бы предпочел old_name=xxx (как более общепринятый) + что-нибудь типа old_name:date=2015, но ведь вики другое советует…
Главное, чтобы однообразно, потом можно будет как-то и использовать, например добавлять в скобках.
http://wiki.openstreetmap.org/wiki/Date_namespace

во-первых, у улицы есть дата создания и присвоения ей официального имени
во-вторых, старых названий часто несколько. и не всегда они различны
к примеру, 50 улицам из 173 переименованных в Харькове просто вернули старые названия
http://www.city.kharkov.ua/ru/document/zaproponovani-nazvi-vulits-yaki-mayut-buti-zmineni-vidpovidno-do-zakonu-ukraini-pro-zasudzhennya-komunistichnogo-ta-natsional-sotsialistichnogo-natsistskogo-totalitarnikh-rezhimiv-v-ukraini-ta-zaboronu-propagandi-ikh-simvoliki-47404.html
получается, для них корректно надо записывать как-то так:
name:Воскресенська вулиця
old_name:1923-2015=Урицького вулиця
old_name:1804-1923=Воскресенська вулиця
есть улицы с ещё более насыщенной историей переименований
можно, конечно, со всем этим разобраться и внести в базу
но мне кажется что в этом нет смысла - как для редакторов, так и для пользователей
внесения old_name вполне достаточно, и то для потребителей это будет иметь ценность только в переходной период

ещё из весёлостей переименования
улицу Спартака переименовали в улицу Спартака
именно так. пишется одинаково. только смысл разный :slight_smile:

сомневаюсь.
там могут быть слишком старые, которые точно нынче не нужны, а вот последние переименования точно нужны.
Я бы точно хотел иметь в навигаторе в списке улиц что-то такое:

Воскресенская улица (бывш. Урицкого)
улица Спартака (бывш. Спартака)

Кстати, пойду подумаю как прилепить визуализацию предыдущего имени…
Уже есть обработанные НП для тренировки?

значит нужно заменять старый old_name на новый old_name
глуповато звучит, но мне кажется что это достаточно адекватно

Вы забываете, что геометрия улиц меняется со временем. Например две улицы могут объеденить в одну или наоборот разъеденить (продолжить, застроить и т.д.). Точно также с домами. Согласен с Vort, что таким данным не место в OSM, а то при желании можно дойти до такого:

old_name:-320000000–260000000=океан Палеотетіс
old_name:-260000000–65000000=океан Тетіс

Так как в рамках ОСМ невозможно описать смену береговой линии древних океанов, точно также нельзя описать смену геометрии улицы. Потому как это уже может быть совершенно другая улица, у которой со старыми совпадают лишь отдельные части строений или сегменты дорог

К тому же ключ получается динамическим. Это очень нехорошо для работы с данными. Для одного 20-го века прийдется 100 отдельных полей в таблице создавать

для этого, кстати, по принципу “any tags you like” можно запросто подобавлять улицам что-то типа ua_rename_2015=yes

Да, но как узнать, что он обновился в 2015?

Ну я и писал, что, что что-то типа date:old_name или old_name:date=2015 и т.п. было бы понятнее
Есть же population:date - сделать по анологии

согласен, это тоже надо иметь в виду
на примере того же Харькова такая ситуация с улицей Фрунзе:
у новосозданной улицы Кирпичёва получается два “предка”

с таким вариантом будет высокий риск рассинхронизации
поменяют имя, не поменяют дату. или поменяют дату, но не поменяют имя

с population’ом так и бывает.

придумался мне гибридный вариант
совместимый, но с дублированием:

name = Воскресенська вулиця
name:2015- = Воскресенська вулиця
old_name = Урицького вулиця
old_name:1923-2015 = Урицького вулиця
old_name:1804-1923 = Воскресенська вулиця

правда, хаоса тут наведут со временем…
а если учесть ещё языковые приставки (, :uk, :ru, :en), вобще монстр получается

Это уже второго яаления порядка точности.

Зачем еще нужен old_name. Чтобы назад не возвращали по недоразумению.
Увидят новое имя, а подумают, что оно по ошибке тут случилось, и “исправят”

В голом виде old_name пока плох. Правда стали видны застарелые ошибки.

[ removed porn links ]

чуть переделал и расширил последний вариант:

name = Воскресенська вулиця (основное отображение, актуальное состояние)
name:uk = Воскресенська вулиця (дубль для верификации языка name тега)
name:ru = Воскресенская улица
name:en = Voskresenska Street

old_name = Урицького вулиця (альтернативное отображение, для поиска, актуальное состояние предыдущего имени)
old_name:uk = Урицького вулиця
old_name:ru = Урицкого улица
old_name:en = Urytskoho Street

name:uk:2015- = Воскресенська вулиця (для поиска и верификации, полу-архивные данные)
name:ru:2015- = Воскресенская улица
name:en:2015- = Voskresenska Street
name:uk:1923-2015 = Урицького вулиця (для поиска, архивные данные)
name:ru:1923-2015 = Урицкого улица
name:en:1923-2015 = Urytskoho Street
name:uk:1804-1923 = Воскресенська вулиця
name:ru:1804-1923 = Воскресенская улица
name:en:1804-1923 = Voskresenska Street

из недостатков - повышенная сложность и много дублирования
из преимуществ - совместимость и верификация