С табом проблемы округления, починить крайне тяжело, если вообще возможно. Пересчитыаются координаты угла карты, коэффициент масштабирования не меняется.
Карта проецируется на экран с учётом координат границ и где-то там на ± пиксел уползает.
Я бы попробовал координаты текущего вида привязывать к карте. Такой а-ля snap to grid, где в качестве сетки - пиксели подложки. Это возможно?
Тогда, округление будет всегда давать одинаковый (и более правдивый, чем сейчас) результат, т.к. существование двух разных видов с одинаковым расположением подложки на экране станет невозможным.
Судя по коду он всегда так работал. Наверное в районе нулевых координат (экватор или гринвич) мало кто мапит из тех кто работает с утилитами, поэтому и не замечали. В качестве workaround-а можно использовать бинарные форматы (pbf и т.п.). Плохо то, что нет формального описания какие варианты записи допустимы.
Там идея такая, что есть MapView-частный случай NavigatableComponentх, который содержит center и scale. Они и пересчитываются при изменении окна. Функции этого класса занимаются пересчётом экранных координат в проецированные EastNorth и в LatLon (с помощью Projection). Отображалка тайлов тоже пользуется этими функциями.
Если предложите работающие изменения кода, чтобы стало лучше - с удовольствием примем
Да всегда пожалуйста! Присоединяйтесь хотя бы жалобами в карточках, это совсем не мало )
Там проблема была только в том, что если вывод координат будет тупить, полетит и загрузка на сервер тоже. И может даже назаливать кривых правок. Так что присмотрите…
Сделано это без хитростей и оптимизаций вот так:
полным прогоном ищутся все линии и мультиполигоны, в которые попадает точка (если замкнутая линия участвует в мультиполигоне, она из поиска исключается)
Чтобы выбрать самый внутренний из полигонов, они сортируются по площади. Для мультиполигонов площадь не считается а только оценивается по BBOX, так что эту часть алгоритма можно обмануть, если постараться.
После долгой работы в JOSM с тысячами добавлений/удалений новых обьектов JOSM начинает безбожно тормозить при каждом чихе. Рестарт JOSM, загрузка сохраненки и можно продолжать комфортную работу. Где найти заветную кнопочку, которая бы подчистила память JOSM без его рестарта?
Удалить слой и создать заново? А вообще, конечно, это баг (утечка памяти). Если будет чёткая инструкция, как воспроизвести (типа открыть, подвинуть 100500 объектов, скопировать и ставить их туда-то → всё тормозит), можно починить.
Удаление и открытие помагает на первых порах, потом только рестарт JOSM. Подозреваю, дело не в утечке памяти (Java все равно не отъесть больше, чем я ей выделил), а возможно, некая история.
Проявляет себя после создания вот таких вот объектов (сканэриал), упрощении полученного контура, удалений 99% иннер линий при повторении процедуры 10+ раз.
Размер *.osm понятно, скачет 2, 10, 3, 15, 3.5, 10, 4, 20, 4 и т.д. Ладно на 20Мб тормозит, но и после очистки до 2-х работать становится невозможно, только перезапуск и дальше сного комфортаня работа с этими же данными. Перезапуск же занимает много времени (используемые подложки отчего-то долго “включаются”).
История действительно хранится, хотя бы для Undo (и примитивы в качестве удалённых тоже в общем списке есть). Но после открытия слоя заново память тоже должна чиститься.