Ну совсем обойтись может и не удастся, но свести его масштаб до единичных случаев вполне реально:
Проверяем наличие в именах нерусских символов (все кроме пробела, кириллицы цифр и знаков пунктуации). Если есть, то объект не трогаем (можно заодно и произвести запись в отдельный лог).
Проверяем попадание объекта на границу (и за границу), поступаем аналогично.
Берем в качестве области не всю Россию, а только те ее части, в которых нет официальных языков, отличных от русского.
Увы, этот пример ничего не поясняет, а лишь иллюстрирует тот очевидный факт, что одна и та же вещь может иметь массу различных наименований.
При этом остаются открытыми два вопроса:
Зачем всю эту массу наименований переносить на карту?
Если уж 1 так необходимо, по каким именно критериям следует заполнять различные теги?
Это серьезное возражение.
Очень серьезное.
И, пожалуй, ЕДИНСТВЕННОЕ серьезное.
Вот только в НАШЕМ случае официальный язык как раз один. Так что, учитывая местные особенности, возражение неактуальное.
Строго говоря, ЛЮБОЙ механизм будет надежно работать лишь в случае, если он поддерживается ВСЕМИ БЕЗ ИСКЛЮЧЕНИЯ.
То есть приведена совершенно очевидная банальность, которая для тега nabe выполняется ровно с тем же успехом, что и name:ru или name:en или для любого другого.
Не аргумент это в данном случае ни разу.
Вот именно результат такого “простого” решения мы и наблюдаем.
Ну да, результат работы “стопроцентно программного алгоритма выбора” мы и имели счастье наблюдать непосредственно в работе.
И здесь совершенно очевидно, что:
либо такой безошибочный алгоритм существует. И пи этом никто не мешал реализовать его в программе, которая буде ОБРАБАТЫВАТЬ локальный OSM-файл, а не корежить данные в базе.
либо такого алгоритма нет и принципиально не может существовать, тогда просто НЕ СЛЕДОВАЛО пытаться корежить базу АЛГОРИТМОМ, а только и исключительно ручками.
Т.о. на какой бы точке зрения мы не стояли, подобная АВТОМАТИЧЕСКАЯ правка абсолютно бессмысленна.
А проверить на локальной копии было не судьба?
Косяк из-за подхода. Из-за того, что кто-то попытался возложить на алгоритм работу, которую ПРИНЦИПИАЛЬНО на алгоритм возлагать бессмысленно.
Т.е. ошибка не тактическая, а стратегическая.
Неправда ваша.
Без него молжно обходиться ВСЕГДА, если работать исключительно со своей локальной копией.
Так може, его и надо было выставлять ручками, а не автоматом?
Вот именно это и называется тупым алгоритмом.
Прежде чем решать, который из name, name:ru или name:en выбрать, следует выяснить, а на каких, собственно, языках они приведены. Хотя бы для name, хотя для name:ru и name:en - тоже не помешало бы. В каком состоянии сейчас находится name:ru, мы видим и нет никаких гарантий, что подобное не будет повторяться регулярно по самым различным причинам.
Слава Богу, все названия приведены в UTF-8, в которой латинский, кириллический, иероглифический алфавиты, арабская вязь и т.п. занимают различные диапазоны кодов.
Поэтому простенький (но не тупой!) алгоритм выставления приоритетов должен выглядеть примерно так:
Если name:ru на кириллице - выбираем его.
Если name на кириллице - выбираем его.
Если name:en на кириллице - выбираем его.
Если name:en на латинице и не содержит “неосновных” символов - выбираем его.
Ну наконец-то хоть кто-то кроме меня поставил под сомнение name:ru на территории РФ…
Смысл то в том, что в 99,9% случаев (0,1% на те самые пограничные, а не приграничные объекты) теги name и name:ru будут идентичны. А значит содержат заведомо избыточную информацию.
Vovanium, зихер-то в том, что эта операция не одноразовая. Ее сейчас придется проделывать регулярно - поддерживать новые и измененные объекты. А на регулярной операции проблем вылезет куда больше. KekcuHa с кладром вручную валидировал каждую правку и то возникали проблемы.
Так стоило ли городить огород? IMHO решать задачу надо было с другой стороны.
Вот именно!
Править ТАКИМ ОБРАЗОМ и С ТАКОЙ ЦЕЛЬЮ в самой базе - абсолютно нелогично.
Хочешь править в базе, в ДАННОМ СЛУЧАЕ - правь ручками.
Хочешь АВТОМАТИЗИРОВАННУЮ правку - правь у себя в локальной копии.
Мы вообще-то про то, следует ли писать name:ru. А механизм — он.
Если писать в name:ru название по-русски (или на другом официальном), то в name можно ввести русское, местноязычное, двуязычное название, и всё это будет работать. Если name:ru не писать, это обяжет писать name только на русском языке, то есть альтернатив нет.
Русский - единственный государственный язык, действующий на всей территории РФ.
Русский - один из 6 мировых языков.
Русский - 4-й по распространенности язык мира.
Просто из любых соображений - единые правила наполнения тегов гораздо лучше, чем отсутствие всяких правил.
В любом случае один из name и name:ru на территории РФ явно лишний. Если употреблять name:ru, тег name оказывается совершенно ненужным.
Кстати, существующая практика употребленя name:?? на территории РФ как раз с этим согласуется (если не считать отдельных названий, набранных латиницей). Например, вот что можно обнаружить : (список далеко не исчерпывающий)
Объясни это татарам и прочим народам, проживающим на территории нашего многонационального государства.
Объясни это англоязычным.
Объясни это китайцам.
Объясни это белорусам, канадцам и всем остальным жителям стран с несколькими государственными языками.
Потом объясни это всё авторам всех конвертеров, навигаторов, рендереров, чтобы они добавили зависимость от государственных языков.
Ну и наконец, добейся выполнения этих правил во всём мире и всё будет хорошо.
Покажи мне хоть одного татарина, не знающего русский язык.
Англоязычные пусть пользуются тегом name:en на территории нашей страны и name - на территории Великобритании и США.
Китайцы пусть сами рисуют name:cn.
Мы обсуждаем конкретны тег name:ru. Каждая страна имеет право иметь свои национальные особенности. И вообще, что русскому хорошо, то немцу - смерть.
С какой стати?
Почему я должен решать за кого-то его проблемы? Думаю, что каждый автор в состоянии самостоятельно решать подобные задачи. А ежели не в состоянии, и по этому поводу возникает острое желание покурочить общемировую базу под собственные необдуманные потребности, то - по рукам.
Мои десять рублей:
В РБ два государственных языка - белорусский и русский.
В name уходит руссокязычное либо общепринятое (типа McDonald’s) название.
В name:ru - исключительно русскоязычное.
В name:be - белорусское, официальной орфографией.
В int_name - белорусское, транслитерированное с диакритикой (типа Žlobin)
В name:en - английское, типа Zhlobin
Таким образом, посыл о ненужности тега name:<язык_страны> неверен в корне. Негоже делать метаинформацию зависимой от геометрии подобным образом.