Нам нужны вообще ; в значениях для России? Запретим их?

ynx, выражение “мапить под рендер” означает приписывать объектам неверные (не соответствующие реальности) теги, чтобы они лучше выглядел (или вообще показывался) на рендере.

При выборе же самих схем тегирования, возможности инструментов (и желания их создателей и мантейнеров) должны безусловно приниматься во внимание.

Кстати, насчёт old_name. Раз вы тут составляете адекватную схему присвоения нескольких значений ключам, предлагаю запретить alt_name, а альтернативные названия добавлять в name. Ну или использовать alt_shop, alt_ref и т.д.

К счастью, изначально обречены на провал попытки поломать то, что есть и работает много лет. :slight_smile:

ключ=значение – это основа структуры данных осм. Если она не нравится, то нужно менять API, а не пытаться впихнуть в неё то, что в неё действительно не вписывается.

Что касается конкретно магазинов, то существующая схема shop=<тип по основному ассортименту> дает вполне адекватное приближение к реальности и на своем уровне подробности, ничего не искажает.

С последним категорически не согласен. С моей точки зрения нужно разделять данные и обработку этих данных (редакатирование/удаление/добавление данных к этому не относится). Задача данных, максимально полно и точно описывать объекты мира (в случае OSM) и всё. Именно из этого и нужно исходить предлагая те или иные варианты тегетирования. Всё остальное, как то поиск, или та же отрисовка это те задачи, которые абсолютно никак не должны влиять на сами данные и их структуру. Если используемая структура, например, не подходит для поиска, значит где-то рядом надо создавать индекс по этим данным или вообще конвертировать данные в во внутренние стуктуры и использовать уже их.

Много что работало много лет и ничего, поменялось.

Да я и не говорил, что стуктура ключ=значение так уж плоха. Просто она имеет свои ограничения.

Про магазины согласен, поэтому вижу смысл в отказе от ; только в том контексте, что надо указывать только основной ассортимент и всё. Для чего-то более детального, как мне видится, надо уже делать какую GIS. Куда можно будет и номенклатуру товаров запихивать с ценами на них, и количество жителей с уровнем преступности. И я сомневаюсь что в такой GIS будут именно ключ=значение, хотя кто знает, конечно. :slight_smile:

Да ты меня правильно понял:

  1. нечего выдумывать сложности для 0,1% значений
  2. нечего ради этого 0,1% новичкам горовит слово “регулярка”. Тебе нравится когда твоё имя предлагают найти как ~ди~? Димой тебя не зовут? Dmitry нет такого имени? Зачем я вообще это должен кому-то объяснять?
  3. нечего поддерживать программы которые парсят name=* или считают что highway=* найдёт дороги. Что ~Дми~ это регулярка имени Дмитрий. Ты пол людей тоже по именам определаешь? А не отдельному смысловому тегу “пол”?

Вообще не нужно разделять по точке с запятой. Ты не строки парсишь.

http://wiki.openstreetmap.org/wiki/Tag%3Ashop%3Dsupermarket “A large store for groceries and other goods”
Хотят твои пользователи “groceries and other goods” ищи для них “shop”=“supermarket”. Обрати внимание на кавычки. Я настаиваю что код счиатющие shop= - магазинами сломан изначально. Те кто от лени ищут все с shop=* не должны говорить остальным что магазины это shop=. У нас 200+ тегов магазинов, никих регулярок shop= в OSM нет.

Это делается один раз и выкладывается на гитхаб. Никакого секрета в 200 тегах через дизъюнкцию нет. Вместо этого ты хочешь чтобы каждый разработчик блестал (как ему кажется) регулярками.

Более того, обычные пользователи не могут использовать регулярки в значениях у программ которые пытаешься защищать.

Попробуй-ка мне найти volleyball этими osmosis или osmfilter:
у объектов с sport=soccer;volleyball

Конечно же да. Если osmosis еще можно пожалеть как основную программу импорта.

Ни osmosis
Ни osmfilter

Не могут выполнить функции базы данных. Если ты составлял запросы в них, а не postgres, спешу тебя огорчить, есть более продуктивные инструменты для работы с данными OSM. Пропогандируя менее эффективные инструменты (в т.ч. регулярки) ты не напрямую, но затягиваешь процесс эволюции.

osmosis это утилита выгрузки-загрузки в DB, не более. То, что ты видишь фильтрацию в ней это плюшки, а не основная функция.

Основаную фукнцию запросов выполняют

  1. postgresql
  2. overpass
  3. OSM API 0.6

В блокнотике тоже можно xml читать, но это не значит что это хорошая идея или стоит так советовать всем делать.

Фраза хорошая, но целиком не соглашусь.

Смысл объекта мира нужно дробить, тогда его можно будет впихнуть в маленькие теги OSM.

Если раньше жили sport=soccer;volleyball и казалось нормально, то сегодня нужно два тега:
sport:soccer=yes
sport:volleyball=yes

Получилось впихнуть? Конечно. Можно найти воллебольную площадку? Да запросто:
“sport:volleyball”=“yes”
Никаких регулярок вообще никому или разбиения по ; в коде.

Для обратной совместимости с предыдущими программами можно указать ещё один тег-костыль:
sport=multi либо sport=soccer

phone=* тоже в исключения, нет смысла их разделять на теги. У телефонов нет смыслов poi. Вы не ишете по 11цифрам-значениям. Напротив, для спорта, вам нужен только определённый спорт.

Не нужно писать sport=multi, это почти ничего не значит. Это подойдёт только для совместимости со старыми программами.

То же что и с телефонами, смысла различать их нет как разные POI, пока что у нас нет массивов вместо тупой строки value (tag=value), придётся их писать через ;. Как только появятся массивы, тут же перетегируем без точкозапятых.

Насчёт alt_name= еще можно согласится, то old_name=* точно нельзя смешивать с name=. old_name= значит старое имя, name=* для текущего и действующего.

Про old name: как вариант можно договориться использовать не old_name=, а was:name=. Но это чисто наше Российское соглашение будет, дубов в tagging@ сдвинуть нереально.

В общем аргументы мне твои ясны, заводи пропозал/голосовалку, все спокойно проголосуют как считают нужным, да займемся более интересными делами.

Формально это правильно, но есть обработка и обработка, конвертирование и конвертирование. Исходная структура данных должна** в принципе** подходить для обработки, с учетом имеющихся алгоритмов.

Например, дороги в осм рисуют линиями, соединенными по общим точкам. Почему? Потому что для навигаторов необходим связный дорожный граф, и чтобы навигаторы могли его получить, он должен в простом виде быть в осм. Попытки заменить линейные дороги на полигональные (как более точные и подробные) встречают ожесточенное сопротивление пользователей данных.

Другой пример. Мапник на обзорных масштабах (z1-6) пустой и выглядит ужасно, по сравнению с бумажными картами сопоставимого масштаба. Почему? Да потому что данных в OSM, пригодных для отображения на этом масштабе ПРОСТО НЕТ. Там, где пустая карта неприемлема (sputnik.ru, обзорки ситигида) вместо osm используется NaturalEarth. И это несмотря на сотни гигабайт точных и подробных данных в planet.osm.

Тут еще такая фигня. Если структура 10 лет подходила для поиска, а потом, внезапно, без объявления войны ее поменяли, и она перестала подходить, это плохо, и действует разрушительно на реальную экосистему OSM.

Есть, скажем так, антипрограмма мапперов, работающих в режиме “только запись” (write-only).

Такого подхода следует избегать :slight_smile:

Очевидно, что теперь придется создать страницы вики для каждого shop:car_parts= , shop:tea= …

Так вот как раз сейчас, структура в приницпе подходит для обработки. И в как автором темы и предлагается поменять стуктуры данных, для решения какой-то конкретной задачи (чтобы было удобнее).

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

Конкретно тут проблема в том, что разные данные пытаюся хранить как одну сущность. А данных тут две: дорога, как нечто по чему можно ехать и дорога, как направление движения. По хорошему, это должны быть разные объекты. Тогда и отрисовано это было бы красиво и не надо было бы возиться с отношениями, для запрета поворота и тому подобных вещей. То, что в osm эти две вещи объединены в одну - очень большой недостаток.

Так это просто нет данных. Могу предположить, что такие данные просто сложно запихнуть в стуктуру osm, этим и можно объяснить их отсутствие.

Да вроде ничего не меняли. Или я упустил мысль.

Периодически, мне попадаются вещи типа как мапить магазин “Свет” (light или lights) или что-то типа поменявшегося обозначения шиномонтажа… Но я бы не сказал, что тут есть какие-то принципиальные проблемы - в любом адекватном инструментарии это замена одной строки на другую или просто поддержка и того и другого. С другой стороны, я даже в таких изменениях не вижу большого смысла, в конце коцов, есть решим, что shop=cdtn и есть магазин “Свет”, то вполне можно с этим согласиться.

Набросал черновик, жду отзывов: получится у нас, не получится?
Если есть спорные после прочтения сформулируйте чтобы на них ответить можно было или отразить в предложении.

Proposed features/Запрет множественных значений в основных ключах

Это является проблемой перехода, как мы решим поступить на момент пока в osm будут amenity=* которые потом нужно будет выкинуть/запретить/не использовать.

Например 0,1% пользователей отмечают
name=Банкомат
amenity=bank;atm

К чему теперь относится name? Хоть один рендер такое решить может?

Именно поэтому тегируем по точке на тег.
amenity=bank
и отдельно
name=Банкомат
amenity=atm

предлагаемая схема пытается вывести из порочного круга
<бессмысленный тег (amenity, man_made)>=<смысловая часть>

путём переноса всё в key:
<бессмысленный тег (amenity, man_made)>:<смысловая часть>=yes
<бессмысленный тег (amenity, man_made)>:<смысловая часть>=yes
<бессмысленный тег (amenity, man_made)>:<смысловая часть>:name=Банкомат

amenity:bank=yes
amenity:atm=yes
amenity:atm:name=Банкомат

В новой схеме “основными” будут два (три, миллон) тегов-групп

Хотите банкоматы? amenity:atm=yes
Хотите только банки? amenity:bank=yes

Парадигма банк amenity=bank или банкомат amenity=atm всех устраивает? Я явно не один в этом.

Офигеть, я понял грандиозную задумку. Она в том, чтобы вместо «ключ=значение» сделать просто «тег». С переходной заглушкой в виде «тег=yes». Эдакий параллельный осм.

От говорливости в тегах key можно будет избавится путём ввода новой абстракции для тегов. Это очень сложное изменение в рамках 0.6 (deployed 17-21 April 2009) такого не будет никогда вам.

<смысловая коробка>
amenity:bank=yes
</смысловая коробка>
<смысловая коробка>
amenity:atm=yes
amenity:atm:name=Банкомат
</смысловая коробка>

Можно будет сократить до

<смысловая коробка>
bank=yes
</смысловая коробка>
<смысловая коробка>
atm=yes
name=Банкомат
</смысловая коробка>

bank=yes, atm=yes это строгие типы, задокументированные на вики, те самые “основные теги” которые вы ждёте.

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

Не совсем заглушка.

  1. Прямо сейчас в OSM:
generator:source=gas
generator:method=combustion
generator:output:cold_water=yes
generator:output:electricity=225 kW

  1. После очень сильных изменений в бекенде и во всех приложениях

<семантическая коробка, типизированная>
generator=yes - строгий тип, задокументирован на вики
source=gas
method=combustion
output:cold_water=yes - вложенность коробок-типов тоже можно учесть, их тоже можно строго типизироваться и задокументировать, никаких угадаек по Taginfo и вопросов "как обозначать X"
output:electricity=225 kW
</семантическая коробка, типизированная>

То что ты называешь “просто тег” это строгий тип, задокументированный на вики. Схема тегирования его свойств будет ясна автоматически как только ты открываешь http://taginfo.openstreetmap.org/tags/supermarket=yes

Преимущества строгих типов над строками через ; настоящим программистам не нужно объяснять.

Если хотим развиваться, OSM придётся сделать бочку и вкладывать смысл в key, а не key(дурацкие man_made,amenity,leisure)=value.

Но кто-нибудь туда обязательно воткнет «тег=no» или даже придумает «тег=что-то» и станет требовать поддержки в рендере :slight_smile:

В предложении речь не только о poi-тег=yes, а о poi-тег=yes, poi-тег=main, poi-тег=partial, poi-тег=no. Это преимущество схемы, а не недостаток. Прямо сейчас вы делаете это через was:leisure

Вместо stadium=no вы пишете was:leisure=stadium/disused:leisure=stadium/abandoned:leisure=abandoned.

Я по секрету скажу что теги
abandoned=yes
disused=yes

Должны быть основными, а не запрещёнными. Это возможно сделать только и только если у вас есть семантическая коробка или сильная неймспейсовость в key (у пар key=value):


<семантическая коробка>
stadium=yes - строго типизированный тег, задокументированный на вики
disused=yes
name=Спартак
description=уже не тот что раньше
</семантическая коробка>

disused:, abandoned: это костыли которые я всецело поддерживаю в рамках API 0.6 чтобы абсолютно все программы работали нормально.

Не придумают. yes/no/partial/main это всё-всё-всё на свете что вы можете сказать про какой-либо магазин или услугу. Про те “главные теги” (POI) которые вы хотите.

generator:output:electricity=225 kW не запрещаются, наоборот, очень поощряются на переходном этапе, значение 225 kW будет конечно разрешено потом. Куда именно засунут 225 kW авторы строгих типизаций зависит только от них.

И всё-таки. Какую НОВУЮ задачу позволит решить нововведение? Кроме того, чтобы сломать старое?

Как мне теперь выбрать все amenety:* одним махом?

Простота разбора значений компенсирована сложностью выборки ключей.

Преимущества для пользователей” “Преимущества для разработчика”. Я там мало написал, все преимущества могут не сразу очевидны. Zverik-а осенило, но я не уверен что он понял полностью всю задумку.

Почему нужна новая задача когда со старой задачей теги не справлялись?
name=Заправка
amenity=fuel;fast_food

Вы умеете писать рендеры которые будут выдирать правильную иконку? Или давать одну ссылку на документацию которая будет описывать только одну схему?

Зачем конечному пользователю в здравом уме знать все amenity=* теги которые мы напридумывали до этого?

Если вы давно документацию не открывали их пытались сгруппировать на 7 групп уже:
http://wiki.openstreetmap.org/wiki/Key:amenity

Пф. Указываем тег-костыль amenity=yes на время перескакивания через знак равно в key=value.
Пользователи которые считают что регулярка amenity=* хоть что-то значит, остаются в прошлом с их нерешаемыми проблемами двойственности объектов в рамках псведо-смысловых amenity= (amenity не значит ничего! сюрприз!)*.

Не пользователю, а программе. пользователь вобще тегов не видит. :slight_smile:
Что-бы выбрать иконку, к примеру. Да и вообще, узнать сам факт, что это amenity