SASGIS - SAS.Планета
View Issue Details
0003781SAS.Планета[All Projects] Багpublic01-09-2021 19:4406-09-2021 09:48
VadimK 
zed 
normalminoralways
resolvedfixed 
Windows7Home Basic
201212 
211230211230 
0003781: При выборе проекции "Geographic Lat/Lon" вылазит "Invalid Floatig Point Operation"
При выборе проекции "Geographic Lat/Lon" и дальнейшей работой с картой вылазит ошибка"Invalid Floatig Point Operation".

Происходит это при малом масштабе, когда весь мир на экране (например самый-самый первый запуск программы), либо когда ползаешь по карте в верхних широтах 85+

Ошибка не пропадает, выскакивает постоянно, пока двигаешь мышью. В момент появления диалогового окошка мышка "прилипает" к полю карты и уползти обратно в "нижние" широты получается с трудом. Если закрыть программу в этот момент, то при следующем запуске она "теряет" карту (серое поле), которая выбрана. В меню Вид-Проекция остаётся только один вариант - "Оригинальная (из ZMP)".

Вывести из ступора программу можно, удалив ini-файлы.
Прилагаю архив с файлами (настройки), созданными программой. Этот набор файлов относится к состоянию ступора, в который программа впадает. Распаковать и закинуть в ночную сборку.
No tags attached.
related to 0003065confirmed  Создать IProjectionConverter 
zip BUG_STATE_SAS.Planet.Nightly.210824.10169.zip (13,929) 01-09-2021 19:44
http://www.sasgis.org/mantis/file_download.php?file_id=2536&type=bug
png Geographic_Lat-Lon.png (14,517) 01-09-2021 19:44
http://www.sasgis.org/mantis/file_download.php?file_id=2537&type=bug
png

png InvalidFloatigPointOperation.png (29,377) 01-09-2021 19:45
http://www.sasgis.org/mantis/file_download.php?file_id=2538&type=bug
png

diff 3781.diff (7,283) 05-09-2021 09:08
http://www.sasgis.org/mantis/file_download.php?file_id=2539&type=bug
Issue History
01-09-2021 19:44VadimKNew Issue
01-09-2021 19:44VadimKFile Added: BUG_STATE_SAS.Planet.Nightly.210824.10169.zip
01-09-2021 19:44VadimKFile Added: Geographic_Lat-Lon.png
01-09-2021 19:45VadimKFile Added: InvalidFloatigPointOperation.png
04-09-2021 09:47zedNote Added: 0020186
04-09-2021 09:47zedStatusnew => confirmed
04-09-2021 09:47zedProduct Version.Nightly => 201212
04-09-2021 09:47zedTarget Version => 50xxxx
04-09-2021 21:19vdemidovNote Added: 0020188
04-09-2021 21:20vdemidovNote Edited: 0020188bug_revision_view_page.php?bugnote_id=20188#r7771
04-09-2021 21:25vdemidovRelationship addedrelated to 0003065
04-09-2021 21:28vdemidovNote Edited: 0020188bug_revision_view_page.php?bugnote_id=20188#r7772
05-09-2021 07:56zedNote Added: 0020189
05-09-2021 09:08zedNote Added: 0020190
05-09-2021 09:08zedFile Added: 3781.diff
06-09-2021 08:21vdemidovNote Added: 0020191
06-09-2021 09:47zedStatusconfirmed => resolved
06-09-2021 09:47zedFixed in Version => 211230
06-09-2021 09:47zedResolutionopen => fixed
06-09-2021 09:47zedAssigned To => zed
06-09-2021 09:48zedTarget Version50xxxx => 211230
06-09-2021 09:48zedSummaryпри выборе проекции "Geographic Lat/Lon" вылазит "Invalid Floatig Point Operation" => При выборе проекции "Geographic Lat/Lon" вылазит "Invalid Floatig Point Operation"

Notes
(0020186)
zed   
04-09-2021 09:47   
Да, есть такая проблема. Эта проекция отличается тем, что карта в ней не квадратная (как для Меркатора на сфере или эллипсоиде), а прямоугольная.

Возможно, достаточно вот тут подправить расчёты для Y, чтобы значения не выходили за +-85 градусов, но не уверен, что это не поломает что-нибудь в другом месте...
(0020188)
vdemidov   
04-09-2021 21:19   
(edited on: 04-09-2021 21:28)
>Возможно, достаточно вот тут подправить расчёты для Y, чтобы значения не выходили за +-85 градусов, но не уверен, что это не поломает что-нибудь в другом месте...
Нет. Там надо разбираться почему именно вылазит ошибка. У всех типов проекций покрытие чуток отличается, так что там есть механизм подгоняющий координты к допустимым при переходах от одной проекциии к другой. Нужно понять почему он не сработал и в чем конкретно. Просто этот тип проекции сильно отличается вот на нем и вылезло, но может вылезти на любой паре разных типов и даже на разных проекциях одного типа с разными параметрами.

PS: Скорее всего где-то забыил вызвать Validate для координат или прямоугольника при переходе между проекциями.

PPS: Собственно IProjectionConverter и планироваля для унификации таких операций, но увы там непочатый край работы. Общая идея: по двум IProjection получаем объект, который умеет правильно конвертировать все используемые в САС примитивы туда и обратно правильно со всеми проверками (ну или вообще ничего не делая, если это одинаковые проекции)

(0020189)
zed   
05-09-2021 07:56   
Ошибка возникает из-за того, что допустимыми координатами для Lat в географической проекции в SAS считаются фантастические 180..-180. Все валидации вызываются и проходят без ошибок, но потом вызывается IDatum.CalcDist (при перерисовке Масштабной шкалы), который, естественно, падает с такими входными данными.

Попробовал пофиксить конвертацию Relative2LonLat и обратно, чтобы он ограничил Lat диапазоном 90..-90 - ошибка уходит, но тайлы начинают проецироваться неверно. Т.е. страдает уже отображение тайлов.

Сейчас думаю попробовать поиграться с ограничением относительных координат. Дело в том, что сейчас считается, что для всех проекций относительные координаты валидны в диапазоне 0..1. Может, если сделать кастомную валидацию для географической проекции с допустимыми значениями для Y в диапазоне 0..0.5 (что в итоге ограничит и Lat допустимыми значениями), получится ошибку исправить.
(0020190)
zed   
05-09-2021 09:08   
Вроде получилось исправить. Тестовая сборка: https://disk.yandex.ru/d/cAaF1nBPVee_EQ

vdemidov
Патч приложил в аттаче. Так пойдёт?
(0020191)
vdemidov   
06-09-2021 08:21   
> Патч приложил в аттаче. Так пойдёт?
Ну как минимум константа
  CMaxLatitude = 85.0511287798066;
фигня. Если уже ограничиваться то 90. А в других типах проекций будут свои ограничения.
А еще изменение форматирования вместе с изменением логики это капец. Невозможно найти где логика менялась.