Эстония

Первая проба

  1. Ортогонализированный SVG, сделанный прогой из potrace-овского SVG
  2. Исходные контуры и ортогонализированные в одном SVG для удобства сравнения в JOSM-е.
    По-моему неплохо получается :slight_smile:

Одно из обрезанных краем зданий схлопнулось, ещё одно из верхних получилось с уступом (исходный png - скрин JOSM-а, по этому зданию как раз масштаб карты был нарисован), “пролившиеся” номера домов выгрызли аккуратные ниши :slight_smile:

Да, выглядит красиво :slight_smile:
Нашёл только одну мелочь:

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

Думаю, чтобы не усложнять себе работу, я буду обрабатывать по одному зданию за раз (в середине), а всё остальное вокруг будет игнорироваться. Для каждого адреса будет новая картинка, центрированная по адресной точке.

Есть сложности со зданиями, адресованными по улице Raudtee. (сейчас эта улица - первая в списке пропущенных)
Здания эти вытянуты в ряд между ж/д и некой улицей, которая как нельзя лучше подходит под название Raudtee, но на WMS подложке Waa-amet называется Piibe mnt.
См. скриншот (здания, адресованные по Raudtee - селектнуты красным)
При этом, по другую сторону от Piibe mnt, здания (синие) действительно адресованы по Piibe mnt, т.е. это не ошибка названия улицы на WMS подложке Waa-amet.

То ли улица имеет два названия (Piibe mnt и Raudtee), и с одной стороны дома адресованы по одному названию, а с другой - по другому,
то ли совсем рядом ж/д есть улица Raudtee, просто она не подписана на WMS подложке Waa-amet (а там действительно виден какой-то кривой проездик).
(что, в общем, не так уж и удивительно - я уже встречал дома вокруг не подписанных на WMS подложке улиц, которые все были адресованы по одной улице)

Нужно изучение первоисточника.

Сам отвечаю на свой вопрос из предыдущего сообщения.

Включение “старой” подложки Maa-amet дает ответ - действительно, Raudtee идет рядом с ж/д.
Что-то эта новая подложка, хоть и аккуратная вся из себя - тем не менее, не всегда показывает названия улиц - уже не раз сталкивался.

Да, бывает… Maa-amet тоже не идеален. Особенно его рендер.

Есть ещё вариант получать метаинформацию по клику на карте. Там можно и улицы иногда неподписанные найти, и даже посмотреть тип здание (жилое/коммерческое). Но это надо идти смотреть карту на их сайте.

Хочу пожаловаться.
Вчера ночью создал с нуля пару мелко-нарезанных зданий, хотел из сам сразу же адресовать, но ночью адресатор висел, а утром они уже были кем-то “обработаны”.

А у меня было опасение, что люди поленятся открывать крупные фрагменты схемы и не увидят номеров домов (а всегда, когда речь идет не об отдельностоящем доме, а о цепочке склеенных - то если номера дома не видно, это не значит, что его нет, нужно открывать и смотреть крупный фрагмент, поскольку на мелком номера иногда не прорисовываются).
Сейчас посмотрел в базе - так и есть: примерно половина домов, имеющих адрес, этот адрес не получила (на скриншоте они выделены красным - у всех них виден адрес на растровой подложке, но его нет на контуре здания).

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

Ну и вопрос - что с этими домами делать?
Ведь даже если я руками им присвою адреса в базе - я не могу поставить тег maaamet:ETAK что мне совсем не нравится.
Наилучшим вариантом я бы счел возврат этих домов в обкликиватель.

Ну если не видно номер в обликикере, то такие претензии не понимаю ? Знаешь что-то больше - так возьми и дополни данные, а тег maaamet:ETAK вовсе не главный.

_sev :slight_smile:

Вообще, проблема интересная затронута. И интерфейс обкливикания тоже в этом виноват, т.к. необходимость открытия большой карты совсем неочевидна. Да и нельзя заставлять её открывать на каждом неподписанном домике.
Надо подумать, как можно её решить… Чуть позже. Если будет сделан массовый импорт, то больше этим заниматься не придётся.

А вот что точно нельзя решить автоматически, так это улицы… Рекомендую заняться ими :slight_smile:

Этот тег, наверное, не нужен никому, кроме моих скриптов. По нему они определяют, что адресная запись принадлежит им, и могут точно идентифицировать запись в базе Maa-amet. На адресах, введённых вручную, ему лучше не быть.

freeExec, во-первых, не понимаю, почему любое сообщение о том, что что-то не так, ты воспринимаешь на свой счет?
Видимо, знаешь о чем-то, о чем другие не подозревают? :slight_smile:

Во-вторых - ты видел интерфейс обкликивателя? Заметил там кнопочку “Открыть карту в бОльшем разрешении” (не помню, как она точно называется) ?
Ты думаешь, она там зачем? Ты не считаешь эту кнопку частью “обкликивателя”?
Типа, если на мелком разрешении номер не видно - то не моя проблема, ставим “пусто” - так?
Вообще, зачем это все делается - для результата в базе OSM, или для места в рейтинге обкликивателей?

В третьих, я вижу, что ты не разобрался в вопросе, когда написал - ну так и не надо так бурно и мгновенно реагировать на любое сообщение, разберись сначала, о чем речь (а речь была именно об этой кнопке про большое разрешение - которую ПРИХОДИТСЯ нажимать каждый раз при определенных обстоятельствах - я написал каких - а кто-то это дело прохалявил).

Ну и в четвертых, ты сам последний раз обкликивал дома 62 дня назад - уж наверное, вопрос с плохой нумерацией был не про тебя.
Понятно, что за 2 месяца можно и забыть про функциональность обкликивателя, но что тогда так подрываться на пустом месте?

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

Этот как раз “одно из верхних получилось с уступом” - исходный png был скрин JOSM-а, поверх этого здания как раз масштаб карты был написан и potrace сделал “засечку” при векторизации.

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

С этим готов согласиться.
Но тут уж кто как умеет.
:slight_smile:

P.S. Но знаешь ли - меня тоже можно понять, если постараться.
Точно, правильно (ну и красиво) рисовать здания, состоящие из нескольких десятков углов-нод (а видел и делал даже такие, что и под сотню - могу показать) - это не просто, и очень время-емко.
И если уж я иногда берусь за такое - то хотелось бы, чтобы этот труд не пошел в пустоту.
Но приходит некто, который не сильно себя утруждая, тратит ровно 15 секунд на обкликивание десятка зданий, на рисование контуров которых я потратил 10 минут - и спускает половину моего труда в никуда.
Зачем было потрачено время?

На самом деле, больше не хочу перетирать эту тему.

AlexTheTux, к чему такие сильные слова? Попросить SviMik вернуть дома с пустыми номерами в пул, делов-то…

SviMik, предлагаю сделать защиту от дурака — если введено пустое значение, то в попапе показать увеличенную карту, и попросить подтверждения.

ИМХО, надо по размеру контура подбирать какой масштаб Maa-amet-а показывать.

Там размер контура - не единственное условие.
Чтобы проблема проявилась, нужно чтобы сам контур был небольшой, но при этом, чтобы он граничил с другими контурами, внутри которых тоже есть свой лейбл с номером дома.
Но и этого не достаточно - нужно, чтобы номера были длинные - через слеш, и желательно двухзначные.
Вот тогда цифра 12/34 внутри одного контура уже не помещается, но и за границу контура она вылезти не может, поскольку из соседнего выпирает своя цифра.
Тогда Maa-amet рисует такие цифры с пропуском через один контур, что мы и наблюдаем на скриншоте в этом сообщении (там-то цифры показаны все, поскольку я специально подбирал масштаб, но там показано, какие дома оказались не пронумерованы).

Это понятно. Но если для небольших контуров просто увеличить масштаб - проблема будет решена.

OverQuantum, можно глянуть алгоритм ортогонализации?
Сейчас он в виде плагина для JOSM? Будет здорово, если его возможно портировать в самостоятельное приложение\скрипт. Но это я наверное сам справлюсь, лишь бы вся геометрия и матан был в нём (без зависимостей от сторонних библиотек или функций JOSM).

Сделал :slight_smile:

Можно, но сейчас он в виде черновика на VB6 и рассчитан на результат potrace :slight_smile:

Делается следующее:

  1. Отрезки контура (как вектора) умножаются на своим длины (длины векторов, таким образом, превращается в кубы длин)
  2. Вектора поворачиваются с шагом кратным 90 градусов, чтобы уложиться в два интервала: от 0 до 90 градусов и от -45 до +45 градусов.
  3. В обоих группах все вектора контура суммируются.
  4. Проверяется, какой суммарный вектор оказался ближе к базисному направлению своего интервала. Для (0;90) это 45 градусов, а для (-45;45) - это 0 градусов. Выбранный вектор объявляется базовым направлением контура и нормализуется.
  5. Все исходные вектора контура (не умноженные) проецируются на базовый вектор и его перпендикуляр. В зависимости от того, какой результат получается больше, вектор контур считается относящимся к базовому направлению или его перпендикуляру.
  6. Внутри последовательно состыкованных векторов, относящихся к одному направлению (базовому или перпендикулярному) определяется параметр С уравнения прямой Ax+By=C, которая хорошо аппроксимирует ломанную, состоящую из взятых векторов. (A,B) - вектор направления (базовый или перпендикулярный)
  7. Для всех точек, которые являются переходными между базовым и перпендикулярным направлениями, определяются новые координаты - по двум параметрам C от базового и перпендикулярного направления.
  8. Результирующий контур строится только из этих точек.
    Интересно, что почти всё считается простейшими действиями с векторами. atan() применяется только для выбора одно базового вектора из двух, а квадратный корень - только для его нормализации.

Жалко :frowning: Жду реализации на как-нидь другом языке, который я понимаю :slight_smile:
А можно бинарник, который можно использовать? А то VB6 мне и компилить-то нечем…
Хотелось бы консольную программу с синтаксисом что-то вроде

ortho.exe M5000 1000 l 200 200 -200 200 -200 -200 199 -200z

И на выходе строка в том же path формате.

Я его и буду использовать. Только, думаю его результат я предварительно разберу сам, и выдерну только нужную линию, которую уже отправлю в ортогонализацию.

Это мне сильно облегчить жизнь, т.к. загружать и векторизовать png - не очень тривиально.
В командной строке - хороший вариант. Только у меня предложение данные всё-таки одним параметром, внутри кавычек, например.
Текущий алгоритм мне проще всего переписать на C++.