#18 ✓resolved
Vladislav Zavjalov

переход на libproj

Reported by Vladislav Zavjalov | October 31st, 2009 @ 03:56 AM

Потестировал сегодня libproj и считаю, что надо его использовать для пересчета координат.

Во-первых, код geo_convs сильно упростится: там сейчас разделены преобразование проекций и систем координат. Мы сейчас следим за тем, чтоб системы координат не пересчитывались, там где это не надо. Насколько я понял, libproj за этим следит сам.

Во-вторых, libproj преобразует координаты гораздо аккуратнее. Я когда-то довольно кривым способом решал проблему уползания карты при многочисленных преобразованиях между проекцией Гаусса-Крюгера (где я ее редактирую) и координатами lon-lat (где ее редактируют остальные :)). Сейчас карта не уползает, но немного "колеблется". На качество карты это не очень влияет, но это неприятно, например, при попытке хранить такую карту в git, и вообще при сравнении версий.

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

Вот как меняются координаты точки при 1,000,000 преобразований туда-обратно:

============================================ libproj:

честное преобразование с пересчетом СК и проекции
41.041126302928 19.011073172563
41.041124683151 19.011072326840 // 3.27с (уползание по долготе 17см)

то же, но с обнулением высоты
41.041126302928 19.011073172563
41.041124682521 19.010816098678 // 3.43c (уползание по широте 27м)

с обнулением высоты, но в одной СК
41.041126302928 19.011073172563
41.041124683294 19.011072326437 // 1.29с (уползание по долготе 17см)

============================================ libjeeps (всегда с обнулением высоты)

преобразование с пересчетом СК и проекции
38.366297560915 61.233789087848
39.012656469692 125.252502360973 // 6.58с (уползание огромно)

без пересчета СК
38.366297560915 61.233789087848
38.999997537590 125.255691114085 // 4.72с (уползание огромно)

преобразования с компенсацией ошибки, в одной СК
38.366297560915 61.233789087848
38.366501021800 61.228318078949 // 14.21с (уползание по широте 590м)

============================================

Comments and changes to this ticket

  • Vladislav Zavjalov

    Vladislav Zavjalov October 31st, 2009 @ 03:59 AM

    Эффект от обнуления высоты бывает только при пересчете СК, разумеется. Проекция ничего про высоту не знает.
    Так что правильнее хранить и редактировать карту только в одной СК - тогда про высоту можно вообще не думать.

  • Vladislav Zavjalov

    Vladislav Zavjalov October 31st, 2009 @ 04:13 PM

    Пытаюсь сейчас что-то сделать на эту тему.

    Первые пострадавшие -- проекции google и kosmosnimki. Интересно, можно ли описать их в терминах проекций из libproj?

  • Max Ushakov

    Max Ushakov October 31st, 2009 @ 04:49 PM

    Ой, google очень жалко! Я без него не смогу готовить карты для
    Андроида! Ты уж с ним поаккуратнее!:)))

  • Vladislav Zavjalov

    Vladislav Zavjalov October 31st, 2009 @ 05:01 PM

    Мне он тоже нужен, конечно. Так что придумаем что-нибудь...

  • Vladislav Zavjalov

    Vladislav Zavjalov November 1st, 2009 @ 04:58 PM

    • State changed from “new” to “resolved”

    Сделано!
    С Гугловой проекцией пришлось обойтись по-особому. Но в целом все сильно упростилось...

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

develop a mapping software for Linux

Shared Ticket Bins

Pages