torbasow (torbasow) wrote,
torbasow
torbasow

  • Mood:

Столкновение с картографическими проекциями

Последнее время работал с темой, которая меня изрядно напрягла, хотя я с детства любил и карты и тригонометрию со стереометрией; но профессиональных знаний по картографии всё же не хватило.

Свободно доступных SVG-карт не так-то много. Взял вот эту. Встал вопрос: как пересчитывать реальные географические координаты в декартовы координаты этой картинки и обратно? Ясно, что это зависит от использованной на карте проекции. А какая она там, проекция? Неведомо.

Я исходил из оптимистического предположения, что равнопромежуточная коническая. Выбрал опорные точки и принялся подгонять (путь аналитического решения пришлось в конце концов отложить в пользу численного). Какие тут свободные параметры преобразования? Где-то есть полюс — это две координаты на плоскости, два параметра. Третий — масштаб, упрощённо говоря — расстояние между параллелями. Не сразу сообразил, что нулевой мередиан идёт не строго влево, а неизвестно куда, а конус же разворачивается на плоскости в угол не 360 °, а меньший (подгонка дала 293 °). Это ещё два параметра.

Дальше дело застопорилось. Javascript (как и PHP, кстати) и MSO Excel имеют разный порядок аргументов в функции atan2 и по-разному понимают оператор ^ (а это я, конечно, знал, но всё время из головы вылетает). Но и преодолев эти заминки, я продолжал получать искажения в сотни километров.

Уже совершенно интуитивно (что нехорошо, вообще говоря,— следует представлять, что творишь) я догадался добавить ещё один параметр: отступ 90-й параллели от гипотетической точки полюса. После этого всё вроде сошлось, с точностью, которую я посчитал адекватной карте и прицельности моего тыкания мышкой (искажения менее 8 ′ в самом худшем случае). В общем, полюс на этой карте отображается не в точку, а в дугу. Задачу я пока что решил, но понимание того, что это за проекция, совсем утратил. Надеюсь, не потребуется.

Tags: svg, география, математика, работа
Subscribe

  • Два учителя, карапуз и я

    Эта неприятная история произошла на вокзале в Тбилиси. Я ожидал начала посадки на поезд и от нечего делать наблюдал за другими пассажирами. На…

  • О тягостях работы программер-надсмотрщика

    Когда ты вынужден руководить командой программистов, чтобы кодить в своё удовольствие времени остаётся меньше. И вот тут со мной произошли…

  • 0 — натуральное число или нет

    Для понимания контекста: в Javascript и PHP массивы индексируются с нуля, в PostrgeSQL — с единицы, в CSS-селекторе nth-child первый узел имеет…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments