Ошибка в формуле вычисления координат для проекции Меркатора

Системы координат, проекции, преобразования, привязка
Ответить
KotAlex
Участник
Сообщения: 79
Зарегистрирован: 24 дек 2015, 11:28
Репутация: 1

Ошибка в формуле вычисления координат для проекции Меркатора

Сообщение KotAlex » 05 ноя 2019, 11:30

Уважаемые участники форума, имеется проблема с давно и хорошо известной картографической эллиптической проекцией Меркатора, которая возникла при попытке программно реализовать известные для нее численные методы расчетов.
На странице :
https://blog.foxylab.com/prakticheskaya-kartografiya/
в разделе "Эллиптическая проекция Меркатора" приведена итерационная формула для вычисления
широты методом последовательных приближений ( итерационным ) по известным координатам в метрах
( последняя формула в этом разделе на этой странице. Хотел вставить скриншот этого места страницы,
но рисунки не вставляются ).
При программной реализации в Delphi 7 этот метод прекрасно работает без каких-либо замечаний
и выдает результат с требуемой точностью.
На странице :
https://ru.wikipedia.org/wiki/Проекция_Меркатора
для того же самого ( вычисление широты ) приведена другая итерационная формула
( последняя формула на этой странице ),
при программной реализации метода по этой формуле итерационный процесс демонстрирует
крайнюю неустойчивость и, фактически, является расходящимся ( или очень плохо сходится,
в отличие от первой формулы ). Хотя в отдельных случаях и выдается правильный результат, совпадающий с результатом по первой формуле, но чаще происходит следующее :
итерационный процесс либо вылетает по причине превышения допустимого числа итераций, либо выдает значение с недопустимо большой погрешностью, либо выдает откровенно неверный результат. Для южного полушария ( отрицательные исходные значения метров пареметра "y" ) в качестве значений выдается откровенная белиберда или вылетает по причине недопустимых значений аргументов в используемых тригонометрических функциях.
Обе формулы работают со следующими параметрами земного эллипсоида :
радиус идеальной земной сферы - 6 371 000 метров;
большая полуось - a = 6 378 245 метров;
малая полуось - b = 6 356 863 метров.
Понятно, что в приведенной формуле ошибка. Но вот какая ?
Может, просто опечатка, а может, она неверно выведена ?
Может, кто-нибудь владеет какой-либо информацией на этот счет и может ею поделиться ?
Каким образом были выведены формулы по обоим вариантам ?
Имеются ли другие формулы расчетов широты для известных метров ?
Я состряпал простейший проект в Delphi 7, который демонстрирует все перечисленные выше эффекты и
который я использовал для отладки. Если он кому-то интересен, то выложу его здесь.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Ошибка в формуле вычисления координат для проекции Меркатора

Сообщение Игорь Белов » 06 ноя 2019, 17:31

KotAlex писал(а):
05 ноя 2019, 11:30
в приведенной формуле ошибка. Но вот какая ?
Может, просто опечатка, а может, она неверно выведена ?

Каким образом были выведены формулы по обоим вариантам ?
Ответы в первых трёх формулах.
В картографии используют конформное отображение эллипсоида на сферу для упрощения дальнейших преобразований. Формула (1) содержит соотношение между широтой на эллипсоиде φ и широтой на «сфере Гаусса» χ. На её основе строятся методы перехода от одного к другому либо в виде разложений в ряды, либо с использованием итераций.

После вычисления широты на сфере можно вычислять координату у в проекции Меркатора по простым формулам (2). На примере формулы (2) видно, что форм представления может быть много. Это относится и к формуле (1).

Формула (3) замечательна тем, что позволяет непосредственно из географической широты φ получить плоскую координату y. Она также может быть представлена в разных формах, привожу самую простую и удобную.
KotAlex писал(а):
05 ноя 2019, 11:30
Имеются ли другие формулы расчетов широты для известных метров ?
Во-первых, недавно предлагался вариант, где использовалось разложение в ряд для перехода от широты на сфере к широте на эллипсоиде: QMapControl и яндекс карты.

Во-вторых, специально для Вас только что на основе формулы (3) придумал итеративный алгоритм (4) – (7).
Вложения
Screenshot_2019-11-06_17-00-07.png
Screenshot_2019-11-06_17-00-07.png (5.45 КБ) 3938 просмотров
The purpose of computing is insight, not numbers

KotAlex
Участник
Сообщения: 79
Зарегистрирован: 24 дек 2015, 11:28
Репутация: 1

Re: Ошибка в формуле вычисления координат для проекции Меркатора

Сообщение KotAlex » 07 ноя 2019, 11:47

Большое спасибо за ответ !
Учитывая прошедшее время после моего первого поста, я уже и не надеялся, что кто-либо ответит ...
Сегодня и в ближайшие дни попробую расковыряться с Вашими формулами и реализовать их в исходных кодах процедур. О результатах обязательно напишу.
В силу сложившихся обстоятельств, к большому сожалению, я не имею возможности оперативно и часто заглядывать на этот форум. Поэтому мои посты могут появляться здесь спустя весьма длительное время. Приношу извинения.
И еще одно. Вопрос, конечно, не в тему, но мне больше не у кого спросить.
Хотел поместить в пост картинку.
Когда-то давно, при добавлении в посты изображений можно было просто в нужном месте дать ссылку на файл картинки, расположенный на винчестере компьютера. Сейчас так почему-то не получается. Сейчас надо этот файл поместить в какое-то облачное хранилище и в посте дать адрес URL на этот файл ... Слишком сложно.
Это так, или я чего-то не понял ? Попроще никак ?

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Ошибка в формуле вычисления координат для проекции Меркатора

Сообщение Игорь Белов » 07 ноя 2019, 19:53

KotAlex писал(а):
07 ноя 2019, 11:47
Хотел поместить в пост картинку.
Жмите кнопку [Добавить файлы].
Написано также: «Можно прикреплять файлы, перетаскивая их в окно сообщения.»
The purpose of computing is insight, not numbers

KotAlex
Участник
Сообщения: 79
Зарегистрирован: 24 дек 2015, 11:28
Репутация: 1

Re: Ошибка в формуле вычисления координат для проекции Меркатора

Сообщение KotAlex » 11 ноя 2019, 11:24

Игорь Белов писал(а):
06 ноя 2019, 17:31
... специально для Вас только что на основе формулы (3) придумал итеративный алгоритм (4) – (7).
Большое спасибо за изобретение, оно оказалось весьма полезным.
Когда я набивал в исходном коде проекта процедуру итерации по Вашим формулам, то, откровенно говоря, не очень-то надеялся на результат, поскольку уже более чем сыт всевозможными криво работающими формулами.
Однако, к моему большому удивлению, Ваша итерация очень хорошо пошла с первого же запуска ...
При тестовом прогоне Ваш алгоритм продемонстрировал очень хорошие сходимость, устойчивость и точность.
Результаты такие.
Посмотрел по Вашей ссылке метод разложения в ряд для перехода от широты на сфере к
широте на эллипсоиде :
viewtopic.php?f=25&t=25373
Бр-р-р-р ... Лучше не надо ...
В реальном проекте пробовал реализовать прямые ( из градусов в метры ) и обратные ( из метров в градусы ) преобразования по ссылкам, которые приведены в моем первом посте:
Первая :
https://blog.foxylab.com/prakticheskaya-kartografiya/
Вторая :
https://ru.wikipedia.org/wiki/Проекция_Меркатора
И третий вариант - Ваши формулы итерационного обратного преобразования.
Для того, чтобы прямые и обратные преобразования по первым двум вариантам работали правильно и точно, необходимо подгонять для них параметры земного эллипсоида. Что я и сделал. Беда только в том, что после такой подгонки эти параметры перестают соответствовать друг другу ...
Обратные итерационные преобразования :
первый вариант - обеспечивает хорошие сходимость, устойчивость и точность.
второй - фактически не работает.
третий ( ваш ) вариант - обеспечивает хорошие сходимость, устойчивость и точность. При тестовом прогоне выдает результаты, у которых разность с первым вариантом исчезающе мала.
Вот так вот. Вроде как все, что могу сказать.
Еще раз большое спасибо.

Ответить

Вернуться в «Координаты и привязка»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot], gork и 11 гостей