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

1.1. Напиши мне, пожалуйста, алгоритм который говорит мне о том, что передомною магазин. Любой.
1.2. Напиши мне, пожалуйста, алгоритм который соберет мне все типологии магазина, в том числе те, которых у меня нет в словаре.

Мне вообще сложно представить что тебя радует, что огорчает и что движет тобою в твоей деятельности.

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

Тоесть препроцессор умеет генерить код вида
“совпадение ключ=значение” или “совпадение ключ=значение” или “совпадение ключ=значение”
но не умеет генерить код вида “значение содержит строку” для shop.=car_parts
(допустим что содержится мы задаем через .=)
или не умеет разделять значения по символу ‘;’?

Ну это странный препроцессор, умеющий ровно то что нужно тебе и не умеющий ничего другого.

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

Сравнение не корректное, надо сравнить количество highway с двумя и более значениями разделенными ‘;’ и highway с двумя и более значениями записанными как highway:value=yes

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

‘;’ непременно должен быть разрушен, спасибо Катон, мы поняли.

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

Как ты кстати отфильтруешь все магазины?

Да, например некоторые значения тега cuisine.

Это не просто. Ты вот наверное почувствовал что убедить 10 человек на форуме - это уже не просто. Убедить 10 человек на форуме и 10 человек в списке рассылки, совсем не просто. А добится чтобы маперы реально ; не использовали, сложнее на несколько порядков.

Еще, раз, сравнение не корректно.

Ну уж снизойди до нас, сирых да убогих.

Вооооо, запрещать перешло в избегать. День прожит не зря.

1.1 У нас есть теги. Очевидно что нужны все теги магазина, если тега нет, то мы ничего не можем знать о намеряннеях мапперов, пусть свои теги документируют. Мы что гадалки по Taginfo?
1.2 Если ты такой вопрос спрашиваешь ты знаешь ответ. Я тебе скажу такого алгоритма еще десятки лет не будет, причём для самых мощных компьютеров мира, OSM очень повезёт если дадут прикоснутся к ним. strong AI это не путь OSM, мы не ждём пока нам с неба упадёт чудо-алгоритм который решит где можно капусту купить, а где нет. Овощной? Мапим овощной. Вроде проще, но конкретных ответов не даёт. Где же мне капусту купить? Поищу-ка овощные.

Для чего можно редактировать iD кроме новичков? Ясен день когда кто-то пытается изголится с точкой с запятой в теге POI я этому не рад открыв iD.

Баааальшой запрос использующий bitset lookup-ы. Все теги магазинов узнаю как в пункте 1.1
Либо я сильно умный и использую что-то более подходящее, вроде bloom filters.

Корректное. Не вижу здесь ни одно примера где точка с запятой это норм. highway:value=yes - не о том речь была.

Да не требуется искать подстроку. Не требуется разделять по ;.

Я замаплю нормально эти чортовы 150 магазинов и выкину ту кучу хлама с регулярками из своего кода если она хоть когда-то была там.

В самом пропозале написано что тебе нужно понимать

  1. shop:***=main/yes/partial есть POI для ***
  2. shop:***=no не POI для ***
  3. что-то другое - ошибка в тегах

*** это старые значения shop

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

Тон/не тон. Что значит упрекнуть, кого? Проблема либо есть либо нет. Решать её нужно. Можно быстро, можно тянуть время и никогда ничего не сделать.

Сообщество затегировало 99,9% объектов одинаково, но над 0,1% нужно разбить голову и свернуть схемы работы программ разработчикам. У новичков не должно быть документации и внятных подсказок ради чего? Чтобы кто-то регулярками похвастался? Что у сообщества такого есть что абсолютно все программы должны сломаться на этих точках с запятой кроме osmand, osm2mp и пары других.

Нет, их нет смысла использовать кроме четырёх-пяти случаев. Те доли процента можно перетегировать за вечер и запретить.

Пора бы договориться что точка с запятой это фу, у нас так не делают.

Тоесть регулярки по значениям - это фу,
код вида new tagValue.split(“;”).contains(“something”) - тоже фу.

А необходимость передать осмозису или osmfilter к примеру, список всех возможных типов магазинов, + реализация ими фильтра Блума или bitset фильтра, чтобы получить выгрузку в csv магазинов в регионе - это одобрямс?

Я тебя точно правильно понял?

Подождите, а как тогда без точки с запятой перечислить телефоны организации? phone_1=, phone_2= и т.д. чтоли? Как-то не лаконично.

Не совсем понял. Правила таггетирования не аксиома и постоянно меняются - это нормально. По идее, инструментарий должен меняться вслед.

Концептуально, я вижу тут проблему в том, что попытки причесать мир по структуру ключ=значение, изначально обречены напровал. Мир несколько сложнее. Это всё как раз из разряда - впихнуть не впихуемое.

Ну, то есть Ваш вариант это мапить под инструменты? То есть, под рендер мы таки не мапим, но под какие-то другие вещи будем? У меня в этом месте возникает небольшой диссонанс.

У меня вопрос к участникам обсуждения - как предлагается тегировать две следующих ситуации?

  1. поле (pitch) с разметкой под футбол (soccer) и баскетбол (basketball) и баскетбольными щитами, висящими над футбольными воротами
  2. объект, у которого было более одного старого названия (old_name)

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 всех устраивает? Я явно не один в этом.