Предложение писать в name название на официальном языке и оставлять пустым name:<оф. язык> будет работать только при выполнении следующих условий:
а) официальный язык один (иначе хрен знает что писать);
б) этому предложению последуют все без исключения (иначе логика определения языка написания name не будет работать).
name — тег низкоприоритетный. Его стоит использовать в качестве затычки, если названия на приоритетном языке не нашлось (или приоритетный язык не выбран).
И да, тупая программа — хорошая программа. Зачем решать задачу сложно, если можно решить просто? Зачем и кому нужны эти пляски с официальными языками, когда можно просто выбирать самый первый присутствующий в списке языков?
Интересно, а аффтор правок и губитель кучи границ не хочет поучаствовать в теме? Ну так, чисто для приличия?
Смысл правки в том, чтобы иметь возможность стопроцентно программно выбирать именно русские наименования при наличии множественных.
Косяк вышел из-за неоднозначного поведения tagtransform, он не обрабатывал . То, что name:ru затёрлось на некоторых объектах - мой косяк, буду пытаться исправить. То, что name:ru появилось на приграничных объектах, на которых его не было и оно неверно - это collateral damage, без него никак. Если выставить там верный name:ru, то дальнейшие автоматические правки его не тронут.
Не понял как именно поломались границы. Кроме добавления тэга name:ru никаких больше изменений не вносилось. Топология ways и relations не менялась.
А ты лог ирки почитай позавчерашний, там ссылочки были, во множестве. Если навыков писать боты хватает только на вики - может этим и ограничиться?
Или я что-то не понимаю, или у меня от третьих суток бессонницы уже крыша поехала. А зачем добавлять name:ru?
Алгоритм “иметь возможность стопроцентно программно выбирать именно русские наименования” тривиальнейший: если name:ru есть, берем его, если нету - берем просто name. Все.
И для любого объекта в РФ дублирующий name:ru просто не нужен. Поскольку name уже на русском.
Для заграницы и граничных объектов - name:ru.
Update:
Зато простору для махинаций… В name пишем Татарстан, в name:ru Татария.
По идее, надо контролировать, чтобы в name и name:ru лежало одно и то-же. Но это чревато для граничных и заграничных объектов… Не стоит овчинка выделки.
Например,
http://www.openstreetmap.org/browse/way/25314189/
сейчас уже вернул из истории, но по рендерингу видно, что линия была обрезана
Вижу. Это баг osmosis или tagtransform. Не получается его воспроизвести на маленьких файлах, где только затронутые объекты. Попробую воспроизвести на всём дампе России.
А может не надо его воспроизводить и достаточно починить испорченное?
Ну например рекомендуемый конфиг к mkgmap говорит, что в гармин попадает название в порядке приоритетности: name:ru, name:en, name. Очень полезно если делается карта сразу нескольких стран. Считается что пользователю родной язык русский, английский язык он знает, а остальные не знает. Если опустить из списка name:ru, то куча русских городов станут иметь английские названия. Если опустить из списка name:en, то карты неанглоязычных стран станут менее удобны.
А может не надо его воспроизводить и достаточно починить испорченное?
Не хочется в следующий раз давать тебе повод поязвить.
Чего-то я видимо не понимаю, но как это связано с выборкой русских наименований понять я не могу. Непонятно чем name:en такой особенный. Тогда уж name:* надо делать было.
Да и правка по дампу само по себе занятие очень стрёмное. Помимо драных релейшнов, есть вероятность принести в базу все косяки из дампа - а они там бывают, причем довольно незаметные.
Плюс дамп как оказалось не только России. Тоже смысла расставлять автоматом name:ru не вижу, для конвертирования в навигационные программы теги можно выставлять локально - у себя на компе
Согласен.
Может быть и в этом дело. Разбираюсь.
Ну вот и надо править конфиги mkgmap для приоритетности name:ru, name, name:en, а не генерировать стотыщпицот дублирующихся имен…
Либо, если через конфиги приоритеты не меняются - сделать препроцессор.
Да, проблема оказалась в дампе. Буду общаться с sim как избежать подобного в будущем.
ikz,
Ну вот и надо править конфиги mkgmap для приоритетности name:ru, name, name:en
Если так поправить конфиг, то будет совсем не то, что нужно.
То, что name:ru появилось на приграничных объектах, на которых его не было и оно неверно - это collateral damage, без него никак. Если выставить там верный name:ru, то дальнейшие автоматические правки его не тронут.
Ну совсем обойтись может и не удастся, но свести его масштаб до единичных случаев вполне реально:
- Проверяем наличие в именах нерусских символов (все кроме пробела, кириллицы цифр и знаков пунктуации). Если есть, то объект не трогаем (можно заодно и произвести запись в отдельный лог).
- Проверяем попадание объекта на границу (и за границу), поступаем аналогично.
- Берем в качестве области не всю Россию, а только те ее части, в которых нет официальных языков, отличных от русского.
Вроде неплохой пример, поясняющий разницу, есть в вики:
name=Channel Tunnel - Default name
int_name=Eurotunnel - Internationally known as
nat_name=That debt ridden hole in the ground - Nationally known As
reg_name=Gateway to France - Regionally known As
loc_name=The way to Carrefour - Locally known As
old_name=A long swim - Historically or previously known As
alt_name=Chunnel - when alternative name exists (which doesn’t fit in one of the tags name above)
Увы, этот пример ничего не поясняет, а лишь иллюстрирует тот очевидный факт, что одна и та же вещь может иметь массу различных наименований.
При этом остаются открытыми два вопроса:
- Зачем всю эту массу наименований переносить на карту?
- Если уж 1 так необходимо, по каким именно критериям следует заполнять различные теги?
Увы, этот пример ничего не поясняет, а лишь иллюстрирует тот очевидный факт, что одна и та же вещь может иметь массу различных наименований.
При этом остаются открытыми два вопроса:
- Зачем всю эту массу наименований переносить на карту?
- Если уж 1 так необходимо, по каким именно критериям следует заполнять различные теги?
Да, пример прояснял не эти вопросы, а только вопрос “Для чего нужны разные теги?”
- Разные теги надо заполнять по критериям смысла этих тегов.
- Рендереры и конвертеры могут выбирать теги по приоритетам, не обязательно тащить всю массу.
а) официальный язык один (иначе хрен знает что писать);
Это серьезное возражение.
Очень серьезное.
И, пожалуй, ЕДИНСТВЕННОЕ серьезное.
Вот только в НАШЕМ случае официальный язык как раз один. Так что, учитывая местные особенности, возражение неактуальное.
б) этому предложению последуют все без исключения (иначе логика определения языка написания name не будет работать).
name — тег низкоприоритетный. Его стоит использовать в качестве затычки, если названия на приоритетном языке не нашлось (или приоритетный язык не выбран).
Строго говоря, ЛЮБОЙ механизм будет надежно работать лишь в случае, если он поддерживается ВСЕМИ БЕЗ ИСКЛЮЧЕНИЯ.
То есть приведена совершенно очевидная банальность, которая для тега nabe выполняется ровно с тем же успехом, что и name:ru или name:en или для любого другого.
Не аргумент это в данном случае ни разу.
И да, тупая программа — хорошая программа. Зачем решать задачу сложно, если можно решить просто? Зачем и кому нужны эти пляски с официальными языками, когда можно просто выбирать самый первый присутствующий в списке языков?
Вот именно результат такого “простого” решения мы и наблюдаем.
Смысл правки в том, чтобы иметь возможность стопроцентно программно выбирать именно русские наименования при наличии множественных.
Ну да, результат работы “стопроцентно программного алгоритма выбора” мы и имели счастье наблюдать непосредственно в работе.
И здесь совершенно очевидно, что:
- либо такой безошибочный алгоритм существует. И пи этом никто не мешал реализовать его в программе, которая буде ОБРАБАТЫВАТЬ локальный OSM-файл, а не корежить данные в базе.
- либо такого алгоритма нет и принципиально не может существовать, тогда просто НЕ СЛЕДОВАЛО пытаться корежить базу АЛГОРИТМОМ, а только и исключительно ручками.
Т.о. на какой бы точке зрения мы не стояли, подобная АВТОМАТИЧЕСКАЯ правка абсолютно бессмысленна.
Косяк вышел из-за неоднозначного поведения tagtransform, он не обрабатывал . То, что name:ru затёрлось на некоторых объектах - мой косяк, буду пытаться исправить.
А проверить на локальной копии было не судьба?
Косяк из-за подхода. Из-за того, что кто-то попытался возложить на алгоритм работу, которую ПРИНЦИПИАЛЬНО на алгоритм возлагать бессмысленно.
Т.е. ошибка не тактическая, а стратегическая.
То, что name:ru появилось на приграничных объектах, на которых его не было и оно неверно - это collateral damage, без него никак.
Неправда ваша.
Без него молжно обходиться ВСЕГДА, если работать исключительно со своей локальной копией.
Если выставить там верный name:ru, то дальнейшие автоматические правки его не тронут.
Так може, его и надо было выставлять ручками, а не автоматом?
Ну например рекомендуемый конфиг к mkgmap говорит, что в гармин попадает название в порядке приоритетности: name:ru, name:en, name. Очень полезно если делается карта сразу нескольких стран. Считается что пользователю родной язык русский, английский язык он знает, а остальные не знает. Если опустить из списка name:ru, то куча русских городов станут иметь английские названия. Если опустить из списка name:en, то карты неанглоязычных стран станут менее удобны.
Вот именно это и называется тупым алгоритмом.
Прежде чем решать, который из name, name:ru или name:en выбрать, следует выяснить, а на каких, собственно, языках они приведены. Хотя бы для name, хотя для name:ru и name:en - тоже не помешало бы. В каком состоянии сейчас находится name:ru, мы видим и нет никаких гарантий, что подобное не будет повторяться регулярно по самым различным причинам.
Слава Богу, все названия приведены в UTF-8, в которой латинский, кириллический, иероглифический алфавиты, арабская вязь и т.п. занимают различные диапазоны кодов.
Поэтому простенький (но не тупой!) алгоритм выставления приоритетов должен выглядеть примерно так:
- Если name:ru на кириллице - выбираем его.
- Если name на кириллице - выбираем его.
- Если name:en на кириллице - выбираем его.
- Если name:en на латинице и не содержит “неосновных” символов - выбираем его.
- Если name на латинице - выбираем его.
- Если name:ru на латинице - выбираем его.