Сокращения вообще не по фен-шую.
Правило есть избегать сокращений.
Все эти "удобно видеть’ не вопрос базы данных OSM.
Сокращения вообще не по фен-шую.
Правило есть избегать сокращений.
Все эти "удобно видеть’ не вопрос базы данных OSM.
Нажаль зусім па рознаму пішуць, шмат скаротаў:
У Беларусі polygon, tags->‘natural’=‘water’ AND name is not NULL:
select count(*), (array_agg(DISTINCT w.name))[0:3] AS name, (array_agg(DISTINCT w.tags->'water')) as water, (array_agg(DISTINCT w.tags->'waterway')) AS waterway from osm_polygon w inner join osm_polygon c on ST_Intersects(c.way, w.way) where c.osm_id = -59065 and w.tags->'natural'='water' AND w.name is not NULL group by lower(w.name) LIKE 'оз.%', lower(w.name) LIKE 'воз.%', lower(w.name) LIKE 'о.%', lower(w.name) LIKE 'в.%', lower(w.name) LIKE 'озеро%', lower(w.name) LIKE 'возера%', lower(w.name) LIKE '%оз.', lower(w.name) LIKE '%воз.', lower(w.name) LIKE '%о.', lower(w.name) LIKE '%в.', lower(w.name) LIKE '%озеро', lower(w.name) LIKE '%возера', lower(w.name) LIKE 'озёра%', lower(w.name) LIKE '%озёра', lower(w.name) LIKE 'п.%', lower(w.name) LIKE 'пр.%', lower(w.name) LIKE 'пруд%', lower(w.name) LIKE '%п.', lower(w.name) LIKE '%пр.', lower(w.name) LIKE '%пруд', lower(w.name) LIKE 'вдхр.%', lower(w.name) LIKE 'вдсх.%', lower(w.name) LIKE 'водохранилище%', lower(w.name) LIKE 'водасховішча%', lower(w.name) LIKE '%вдхр.', lower(w.name) LIKE '%вдсх.', lower(w.name) LIKE '%водохранилище', lower(w.name) LIKE '%водасховішча' order by 1 desc;
count | name | water | waterway
-------+----------------------------------------------------------------------------------------+---------------------------------------------------------------------------------+------------------------
1269 | {-,"17-й карьер",berezovoe} | {canal,intermittent,lake,oxbow,pond,reservoir,river,riverbank,залив,озеро,NULL} | {oxbow,riverbank,NULL}
756 | {"оз. Адворенское","оз. Азаренское","оз. Азароново"} | {lake,oxbow,pond,NULL} | {stream,NULL}
235 | {"озеро Азерцы","озеро Аксеново","озеро Алашское"} | {lake,oxbow,pond,NULL} | {NULL}
78 | {"Адамово озеро","Бамовское озеро","Банное озеро"} | {lake,pond,reservoir,NULL} | {NULL}
74 | {"пруд №1","Пруд №1","пруд №10"} | {pond,NULL} | {NULL}
23 | {"Аргеловское водохранилище","Великоборское водохранилище","Вишневское водохранилище"} | {lake,pond,reservoir,NULL} | {NULL}
16 | {пруд,Пруд} | {pond,NULL} | {NULL}
10 | {"Визжар вдхр.","Вилейское вдхр.","Волчковичское вдхр."} | {reservoir,NULL} | {NULL}
10 | {"Водохранилище Боровец","водохранилище Второе Лидское","Водохранилище Дягильно"} | {reservoir,NULL} | {NULL}
9 | {"Гайтюнишский пруд","Дикий пруд","Замковый пруд"} | {lake,pond} | {NULL}
6 | {озеро,Озеро} | {reservoir,NULL} | {NULL}
5 | {"вдхр. Вяча","вдхр. Дрозды","вдхр. Криница"} | {lake,reservoir,NULL} | {NULL}
4 | {"Гаранскае возера","Іванаўскае возера","Мікулінскае возера"} | {lake,reservoir} | {NULL}
3 | {водохранилище,Водохранилище} | {reservoir,NULL} | {NULL}
3 | {"возера Апіта","возера Бледнае","возера Бяле / Beļānu ezers"} | {lake,NULL} | {NULL}
3 | {"озёра Близнецы","озёра Дарские","озёра Хатьковы"} | {lake} | {NULL}
3 | {"о. Жимкана","о. Каташи","О. Михайлов"} | {NULL} | {NULL}
1 | {"В. Климовича"} | {lake} | {NULL}
(18 rows)
У Беларусі polygon, tags->‘natural’=‘water’ AND tags->‘water’=‘lake’ AND name is not NULL:
select count(*), (array_agg(DISTINCT w.name))[0:3] AS name, (array_agg(DISTINCT w.tags->'water')) as water, (array_agg(DISTINCT w.tags->'waterway')) AS waterway from osm_polygon w inner join osm_polygon c on ST_Intersects(c.way, w.way) where c.osm_id = -59065 and w.tags->'natural'='water' AND w.tags->'water'='lake' AND w.name is not NULL group by lower(w.name) LIKE 'оз.%', lower(w.name) LIKE 'воз.%', lower(w.name) LIKE 'о.%', lower(w.name) LIKE 'в.%', lower(w.name) LIKE 'озеро%', lower(w.name) LIKE 'возера%', lower(w.name) LIKE '%оз.', lower(w.name) LIKE '%воз.', lower(w.name) LIKE '%о.', lower(w.name) LIKE '%в.', lower(w.name) LIKE '%озеро', lower(w.name) LIKE '%возера', lower(w.name) LIKE 'озёра%', lower(w.name) LIKE '%озёра', lower(w.name) LIKE 'п.%', lower(w.name) LIKE 'пр.%', lower(w.name) LIKE 'пруд%', lower(w.name) LIKE '%п.', lower(w.name) LIKE '%пр.', lower(w.name) LIKE '%пруд', lower(w.name) LIKE 'вдхр.%', lower(w.name) LIKE 'вдсх.%', lower(w.name) LIKE 'водохранилище%', lower(w.name) LIKE 'водасховішча%', lower(w.name) LIKE '%вдхр.', lower(w.name) LIKE '%вдсх.', lower(w.name) LIKE '%водохранилище', lower(w.name) LIKE '%водасховішча' order by 1 desc;
count | name | water | waterway
-------+-----------------------------------------------------------+--------+----------
731 | {"оз. Адворенское","оз. Азаренское","оз. Азароново"} | {lake} | {NULL}
280 | {"Byelaye Lake","Długie - Длуге","Drūkšiai / Дрысвяты"} | {lake} | {NULL}
223 | {"озеро Азерцы","озеро Аксеново","озеро Алашское"} | {lake} | {NULL}
70 | {"Адамово озеро","Бамовское озеро","Банное озеро"} | {lake} | {NULL}
3 | {"озёра Близнецы","озёра Дарские","озёра Хатьковы"} | {lake} | {NULL}
3 | {"Гаранскае возера","Мікулінскае возера","старое возера"} | {lake} | {NULL}
2 | {"возера Апіта","возера Бледнае"} | {lake} | {NULL}
1 | {"Искусственное водохранилище"} | {lake} | {NULL}
1 | {"Панский пруд"} | {lake} | {NULL}
1 | {"В. Климовича"} | {lake} | {NULL}
1 | {"вдхр. Криница"} | {lake} | {NULL}
(11 rows)
У Беларусі polygon, tags->‘natural’=‘waterway’ AND name is not NULL:
select count(*), (array_agg(DISTINCT w.name))[0:3] AS name, (array_agg(DISTINCT w.tags->'water')) as water, (array_agg(DISTINCT w.tags->'waterway')) AS waterway from osm_polygon w inner join osm_polygon c on ST_Intersects(c.way, w.way) where c.osm_id = -59065 and w.tags ? 'waterway' AND w.name is not NULL group by lower(w.name) LIKE 'оз.%', lower(w.name) LIKE 'воз.%', lower(w.name) LIKE 'о.%', lower(w.name) LIKE 'в.%', lower(w.name) LIKE 'озеро%', lower(w.name) LIKE 'возера%', lower(w.name) LIKE '%оз.', lower(w.name) LIKE '%воз.', lower(w.name) LIKE '%о.', lower(w.name) LIKE '%в.', lower(w.name) LIKE '%озеро', lower(w.name) LIKE '%возера', lower(w.name) LIKE 'озёра%', lower(w.name) LIKE '%озёра', lower(w.name) LIKE 'п.%', lower(w.name) LIKE 'пр.%', lower(w.name) LIKE 'пруд%', lower(w.name) LIKE '%п.', lower(w.name) LIKE '%пр.', lower(w.name) LIKE '%пруд', lower(w.name) LIKE 'вдхр.%', lower(w.name) LIKE 'вдсх.%', lower(w.name) LIKE 'водохранилище%', lower(w.name) LIKE 'водасховішча%', lower(w.name) LIKE '%вдхр.', lower(w.name) LIKE '%вдсх.', lower(w.name) LIKE '%водохранилище', lower(w.name) LIKE '%водасховішча', lower(w.name) LIKE 'канал%', lower(w.name) LIKE '%канал', lower(w.name) LIKE 'р.%', lower(w.name) LIKE '%р.', lower(w.name) LIKE 'река%', lower(w.name) LIKE '%река' order by 1 desc;
count | name | water | waterway
-------+---------------------------------------------------------------+----------------------------------+-------------------------------------------------
165 | {Bug,"Bug / Буг",Артисловка} | {reservoir,river,riverbank,NULL} | {boatyard,dam,ditch,drain,oxbow,riverbank,weir}
6 | {"Белоозёрский канал","Гребной канал","Днепро-бугский канал"} | {NULL} | {riverbank}
1 | {"Комсомольское озеро"} | {NULL} | {riverbank}
1 | {оз.Клисячее} | {NULL} | {stream}
(4 rows)
У Беларусі line, tags->‘natural’=‘waterway’ AND name is not NULL:
select count(*), (array_agg(DISTINCT w.name))[0:3] AS name, (array_agg(DISTINCT w.tags->'water')) as water, (array_agg(DISTINCT w.tags->'waterway')) AS waterway from osm_line w inner join osm_polygon c on ST_Intersects(c.way, w.way) where c.osm_id = -59065 and w.tags ? 'waterway' AND w.name is not NULL group by lower(w.name) LIKE 'оз.%', lower(w.name) LIKE 'воз.%', lower(w.name) LIKE 'о.%', lower(w.name) LIKE 'в.%', lower(w.name) LIKE 'озеро%', lower(w.name) LIKE 'возера%', lower(w.name) LIKE '%оз.', lower(w.name) LIKE '%воз.', lower(w.name) LIKE '%о.', lower(w.name) LIKE '%в.', lower(w.name) LIKE '%озеро', lower(w.name) LIKE '%возера', lower(w.name) LIKE 'озёра%', lower(w.name) LIKE '%озёра', lower(w.name) LIKE 'п.%', lower(w.name) LIKE 'пр.%', lower(w.name) LIKE 'пруд%', lower(w.name) LIKE '%п.', lower(w.name) LIKE '%пр.', lower(w.name) LIKE '%пруд', lower(w.name) LIKE 'вдхр.%', lower(w.name) LIKE 'вдсх.%', lower(w.name) LIKE 'водохранилище%', lower(w.name) LIKE 'водасховішча%', lower(w.name) LIKE '%вдхр.', lower(w.name) LIKE '%вдсх.', lower(w.name) LIKE '%водохранилище', lower(w.name) LIKE '%водасховішча', lower(w.name) LIKE 'канал%', lower(w.name) LIKE '%канал', lower(w.name) LIKE 'р.%', lower(w.name) LIKE '%р.', lower(w.name) LIKE 'река%', lower(w.name) LIKE '%река' order by 1 desc;
count | name | water | waterway
-------+---------------------------------------------------------------------+--------+-------------------------------------------
6019 | {Aktica,Balbata,"Baltoji Ančia"} | {NULL} | {canal,dam,ditch,drain,river,stream,weir}
100 | {"1-й Марьинский канал","7-й Любанский канал","Августовский канал"} | {NULL} | {canal,ditch,drain,stream}
37 | {"канал Вец","канал Винец","канал Воловельский"} | {NULL} | {canal,ditch,drain,stream}
24 | {Прудец,Прудище,Прудница} | {NULL} | {river,stream}
11 | {р.Ботча,"р. Плиса",р.Тростянка} | {NULL} | {river,stream}
2 | {канал,Канал} | {NULL} | {drain}
1 | {Озеродка} | {NULL} | {river}
(7 rows)
Смотря о чем речь идет. Например, сокращение “п.” в поле “name:prefix” было бы неправильно.
А если же говорить про name, то с точки зрения базы данных наличие какого либо префикса в принципе не есть хорошо.
Поэтому тут вопрос именно об удобстве.
И фен-шуй разный бывает. Не будем же “СТ” расшифровывать в названии?
Для базы данных в идеальном случае все должно быть по полочкам. Например, “улица” тоже не должна фигурировать в названии, а быть в отдельном поле, чтобы каждый сам мог решить выводить ее в полной или сокращенной форме, или вообще не выводить.
Но рендеры под это дело никто править не будет, да и поддерживать несколько полей сложнее, а видеть их на карте хочется, вот и засунули их в название.
Та же самое происходит и с озерами - люди хотят увидеть на выходе категорию, а рендеры их не выводят, вот и пихают ее в название. Вот тут надо бы и определиться, надо оно нам в названии всех озер или стоит почистить, и если надо, то сокращенное или полное. Стоит еще отметить, что в отличие от улиц, которые могут быть и переулком и проспектом и т.п., для озер однозначный тег имеется.
если есть документированный/используемый тег, типа обьекта в названии быть не должно. Это нужно где то в ид/мапсми написать большими буквами, чтобы избежать "Магазин “Магазинный магазин” " с тегом shop впридачу.
разумеется, если выбор тега затруднителен для того, кто рисует, то можно добавить note или поставить сокращение как с СТ. в перспективе это все уберем, переведем всю карту на name:be и построим коммунизм
Подобные дилеммы всегда упираются в выбор между: формально так, по факту так, хотелось бы (удобнее/правильнее) так. Чтобы не надо было искать компромисс, «усреднённый» вариант — должна быть крепкая взаимная обратная связь между теми, кто данные вносит (тегирует) и теми, кто их обрабатывает (под навигаторы, рендереры и т. д.)
Этой связи нет или она очень слабая. Поэтому и получаем на практике, что ежели формально раскидать типы объектов по префиксам или предполагать извлечение их прямо из основного тега, подписывать объекты по ref и/или name (и тут есть разные подходы, что сюда вносить), то получим по факту обрубки. Да, это с точки зрения БД, формальной строгости, конечно, прекрасно. Но по указанной выше причине выглядеть результат будет кастрированно (однообразно и непонятно), т. е. неудобоваримо для практического применения.
Тут бы тем, кто рендерит, например, показать хороший образец рендеринга формальной схемы тегирования (связанной с подписями объектов) и рекомендовать её как эталон. Но они его не показывают, а лишь приноравливаются (каждый по-своему) к тому «разброду и шатанию», который имеется во всём многообразии: что-то урезают, что-то игнорят, что-то переставляют, что-то комбинируют, выкручиваются, в общем. Примерно то же самое делают тегировщики: подстраиваются под имеющиеся рендереры, навигационное ПО и т. д.
А по-хорошему (для меня) надо договариваться на двусторонней основе: вы нам покажите «как надо, чтобы…» и «вот как это будет красиво и замечательно в итоге». Но этого не происходит, а идёт нескончаемый «бой», «непримиримая борьба» тегировщиков между собой — с одной стороны, и попытки рендерщиков более-менее адекватно обработать и показать хороший результат — с другой стороны. Пока между сторонами не появится связки-моста — ситуация не поменяется.
Тут чатыры найбольш верагодныя варыянты:
Шчыра кажучы варыянт са скаротамі шмат чым хібны, таму што гэта ўсё ж скарот.
Цікава што па статыстыцы што скінуў вышэй зараз з азёрамі больш ужываецца воз./возера, а з рэкамі наадварот не ўжываецца р./рака, таму б я прапаноўваў варыянт 1 ці 2.
Іншае пытаньне што рабіць з азёрамі, вадасховашчамі і іншымі варыянтамі, ці ў гэтым выпадку яны ня будуць падпадаць пад ‘water’=‘lake’.
Во втором не дюже много смысла.
написано там в префикс или нет, уж лучше будет написано
Ну четвертый - это такой голимый маппинг под рендер. Да, так люди карты рисовали, а там места не много.
Но у нас же не карта.
Так что третий или первый.
Беру свои слова обратно. Однозначного тега нету ни для озера ни для какого другого объекта. Все теги являются относительными, и не позволяют вывести на карту нужную категорию. Представим, что британец делает карту мира и хочет для названий озер вывести префикс категории. Что он будет выводить имея только название и тег ‘water’=‘lake’ ? - ничего, так как перевод всех категорий на все языки мира включая местные в ренедр не засунешь и даже если и засунешь, не будет уверенности, что получено правильное соответствие. Поэтому вариант 2 отпадает.
С этой же позиции вынесение значения в name:prefix потребует задавать его для всех языковых вариантов.
Это будет выглядеть примерно так:
name
name:prefix
name:ru
name:prefix:ru
name:be
name:prefix:be
name:uk
name:prefix:uk
и т.п.
Это сравнимо с вынесением “улица” в отдельный тег. Не поддерживаю.
А что? - база данных. А для чего? - для карты. На карте всегда места мало. Да и смысл выводить полное слово то? Даже если предположить, что кто-то не карту рисует, а оперирует данными для каких-то своих расчетов, какая ему будет разница делать выборку по “озеро” или “оз.”? На локальных картах мы привыкли и будем выводить сокращенный вариант, и это же будем ожидать от международных проектов, а сами они не догадаются, да и навряд ли будут такие костыли вставлять для нас. Короче в сокращенном варианте вижу только пользу.
Если конвертору понадобится обработать этот префикс, то так или иначе ему придется парсить name, и следовательно разницы между “оз.” и “озеро” ему будет никакой.
Никакой международный проект не будет прописывать правила определения истинной категории объекта из названия и вводить словари для перевода этих категорий индивидуально для каждой страны с учетом местных предпочтений. Все будут выводить имя из тега name как есть, потому как местным людям виднее, как его лучше отобразить на карте (навигаторах и покемонах в том числе).
И правильно LLlypuk82 отметил, что если кого-то что-то не устраивает, пусть придет сюда и скажет об этом. А то мы сами себе сложности придумываем и играемся с ними.
Предполагаю, что name:prefix/postfix задумывалось как то, что должно выводиться на карту вместе с name. Но пользуется ли хоть один рендер этим полем?
И кстати, тут же вопрос, почему мы решили использовать это поле для официальной категории населенных пунктов? Не правильнее ли было бы использовать поле типа official_place, а в name:prefix ставить “п.”/“д.” там где на карте нужно отличить рядом находящиеся нп с одним названием?
Я за вариант 2. – ‘natural’=‘water’, ‘water’=‘lake’ у name ня пішам возера і ня пішам у prefix
Если конвертеру надо названия с префиксами, то пусть берет “lake”, переводит его в нужный язык и сокращает, как ему требуется.
Откуда нам знать, что конечный пользователь, скажем, карты на белорусском на месте “возера” пожелает именно “воз.”, а не “взр.” “вз.” или еще что-то? То же самое и с “СТ” – place=allotments+name=*, а тот, кто конвертит, пусть сам решает, как хочет он видеть префикс для allotments на карте – “СТ”, “сад.тов.”, “с.т.”, “с/т” или еще что-то.
“СТ” он несет значение категории, для которой нету тега. Это может быть и садовое товарищество, и садовой кооператив, и садово-огородническое товарищество, и дачный поселок. Префиксом “СТ” в данном случае обозначается только первое.
См. тему Обозначение садовых товариществ
Ну тогда уж скорее есть смысл вводить выше указанный тэг official_place, чем писать все эти СТ, с.т. и прочую самодеятельность в имя. В общем, я за такой же подход к наименованию всех объектов, что и у населенных пунктов.
p.s. кстати, а в РБ есть такие вещи как “садовые кооперативы” и прочее? А то гугл по запросу “садовый кооператив Беларусь”, “Беларусь садово-огородническое товарищество” выдает только “садоводческое товарищество”…
На это можно возразить: нет проблем — пусть берёт общепринятые сокращения (оз. воз.) и делает с ними (в конвертере), что ему угодно: переставляет, удаляет, разворачивает в полное слово, заменяет своим словом и т. д.
Возразить то можно, но переход “lake”->“возера”->“взр.” требует лишь словаря и никакого знания общепринятых сокращений, а значит реализуется проще, чем “prefix” → расшифровка → перевод → новый префикс. А в ОСМ, оказывается, есть “общепринятые сокращения”? Во многих картах сокращения есть, но там они явно прописываются в легенде, а значит не являются такими уж “общепринятыми”.
И потом, почему нет такого же запроса на prefix для населенных пунктов, а только для рек\озер?
Нагадаю, што раней вуліцы таксама са скаротамі пісалі.
Нельзя переводить мнемонику.
А если это называется не озеро, а как-то иначе? Или наоборот называется озеро, а размечено как болото?