opentopomap.cz – топографические карты opentopomap для наших условий

К сожалению “запертые ворота” отрисовываются перпендикулярно проходящей дороге, поэтому если дорога пересекает барьер под углом, получается некрасиво. А если дорога не обозначена, то ворота могут стать перпендикулярно забору :slight_smile: Вот как здесь: https://opentopomap.ru/#map=18/59.68890/30.43670

Это только кажется, что таким символом обозначаются ворота в заборе. На практике там может быть любой другой дорожный барьер, не обязательно имеющий отношение к забору. Это больше значок прав доступа, а не физического объекта. Поэтому совершенно не факт, что его нужно позиционировать относительно забора, а не дороги.
Это может иметь смысл, только если рендерить точку barrier=gate отдельно от других барьеров, с привязкой к забору, а не к дороге. Но всё равно, точечный объект при рендеринге становится линейным. И тут может стать некрасиво на углах забора, резких перегибах и т.д. То есть, для полной красоты все ворота должны быть линейными объектами и в базе. Как, например, мосты. Но линейных ворот в базе всего 0.034% от всех ворот, и поэтому на полную красоту пока рассчитывать не приходится.

Это происходит из-за того, что алгоритм позиционирования значка ищет ближайшую дорогу в радиусе 3-х метров, и позиционируется относительно неё. Сделано это для того, чтобы рендерились препятствия с неточным позиционированием относительно дороги. Но если через барьер никакой дороги не проходит, а в радиусе 3-х метров есть какая-то тропинка, то он ошибочно привязывается к ней, и рендерится. Думаю, я попробую уменьшить радиус поиска до более компромиссного.

А зачем искать в 3-х метрах, а не прямо пересечение с дорогой?

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

Из-за того, что:


opentopomap=# SELECT planet_osm_point.osm_id as node_id, ST_Distance(planet_osm_point.way, planet_osm_line.way) as distance
from planet_osm_point, planet_osm_line where planet_osm_point.barrier IN ('block', 'debris', 'gate', 'sliding_gate', 'lift_gate', 'swing_gate',
 'chain', 'yes', 'bollard') and planet_osm_line.highway IS NOT NULL AND ST_DWithin(planet_osm_point.way, planet_osm_line.way,1) AND
 ST_Distance(planet_osm_point.way, planet_osm_line.way) > 0 LIMIT 20;                                         
  node_id   |      distance                                                                                                                                                                                                                                   
------------+---------------------                                                                                                                                                                                                                            
 6335229567 |   0.652256400442125                                                                                                                                                                                                                             
 6383076822 |   0.347329950699121                                                                                                                                                                                                                             
 4879850217 | 0.00176391671509317                                                                                                                                                                                                                             
 6709690309 |   0.217341423964735                                                                                                                                                                                                                             
 6709690336 |   0.113966045827994                                                                                                                                                                                                                             
 5968364270 |   0.350461459255921                                                                                                                                                                                                                             
 3753418376 | 0.00497629672938214                                                                                                                                                                                                                             
 5542250037 |   0.170489284424466                                                                                                                                                                                                                             
 5254177593 |  0.0109934973856311                                                                                                                                                                                                                             
 7783514033 |   0.303132289221544                                                                                                                                                                                                                             
 3713339848 | 0.00241383208866235                                                                                                                                                                                                                             
 5692470541 | 0.00111056901716455                                                                                                                                                                                                                             
 6085601292 |  0.0256974801765485                                                                                                                                                                                                                             
 4732181078 | 0.00199527523212845                                                                                                                                                                                                                             
 5049374719 | 0.00296677284412729                                                                                                                                                                                                                             
 3590207884 |   0.658437988963735                                                                                                                                                                                                                             
 4152133398 | 0.00355684702561035                                                                                                                                                                                                                             
 2349446419 |   0.468091580837245                                                                                                                                                                                                                             
 4367451417 |   0.697566707374447                                                                                                                                                                                                                             
 4367451416 |   0.317517851001572                                                                                                                                                                                                                             
(20 строк)

Без сортировки и общего количества строк, поскольку тогда нужно очень напрягать базу.
Если посмотреть полученные node_id на openstreetmap.org, то окажется, что некоторые барьеры, которые в первом приближении вроде бы расположены на линии дорог, на самом деле на них не находятся, а отстоят от них на небольшое расстояние, указанное в столбце distance. Это лучше видно в iD. Думаю, к такому приводят какие-то ошибки при редактировании. Но, если не учитывать эту особенность, такие барьеры не будут рендериться.

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

Я ошибся в количестве линейных ворот на два порядка, забыв умножить на сто. Итак, в общемировой базе их на самом деле 3,4%, в базе opentopomap.ru чуть меньше - 2,24%. И, что примечательно, ни стандартный стиль mapnik, ни мой рендер их не отрисовывают. OsmAnd тоже о них ничего не знает. Соответственно, если вы хотите увидеть свои любимые ворота на карте, не рисуйте их линией. Мир пока к этому не готов.

Я ткнул в первые три. Вторые и третьи ворота просто не соединены с дорогой, это как бы ошибка. В первом же случае ворота корректно стоят на дороге, но рядом эта дорого пересекается с другой, и расстояние считается до неё.
В общем чтобы по красоте нужны три случая: поперёк дороги, вдоль забора если нет дороги и сферические ворота в вакууме.

На мой взляд наооборот:

  • вдоль забора
  • поперек дороги, если нет забора
  • сферические ворота в вакууме.

выявить такие ворота и закинуть задчау в мапрулетку. авось и вычистятся.

Радиус поиска уменьшил до 0,5 м.

С Новым Годом!

Часть ворот вообще пропала, например вот эти https://www.openstreetmap.org/node/7392648528

Есть предложение как-то обозначать детские площадки, хотя бы контур.

Спасибо, вас так же!

Этот случай я описывал в первом сообщении, посвященном barrier. Цитирую:

Я подумаю над этим. Но пока мне не кажется хорошей идеей отображать детские площадки на топографической карте.

Возможно стоит отдельно обрабатывать случай barrier=gate. В 99% случаев это ворота в заборе, а заборы вообще без ворот выглядят несколько странно.

Вообще-то всегда отображали в крупном масштабе:

Ворота, через которые не проходит дорога/тропа, вряд ли могут использоваться для прохода/проезда. Иначе хоть какая-то дорога через них бы проходила. Поэтому их отрисовка не несёт практической пользы. Или есть реальные примеры калиток и ворот, через которые можно проходить на регулярной основе, но там нет хоть какой-то тропы?

Это больше похоже на крупномасштабный топоплан.

Согласен. Подскажите, а возможно-ли получить список всех таких “невалидных” ворот?
Да и вообще список всех объектов, которых Вы (по какой-то причине) считаете “неправильными”?
P.S. Если это единичный случай, можно просто нарисовать дорожку к ней и всё.

Деревни, котеджные поселки, частный сектор в городах. Улицы, вдоль них заборы с калитками. Как правило калитки с улицей дорожками не соединены.

Так при 18 фактически крупномасштабный топоплан. Если, например, в сквере детская площадка не обозначена хотя бы контуром, то получается некрасиво - дорожки идут в никуда, как например здесь - https://www.openstreetmap.org/way/785170400

И это ошибка, дорожки должен быть соединены.

А зачем? Прокладывать маршрут через детскую площадку? Ну это такое себе…

Прокладывать маршруты как ходят.

Советская картография устанавливала четкую и понятную масштабную линейку,
в opentopomap до 16 уровня похожая система, но она заканчиватcя на 1:25000.
Где на каком уровне должен применяться классификатор 1:10000, 1:5000 1:2000 и т.д.?