переход на 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 October 31st, 2009 @ 03:59 AM
Эффект от обнуления высоты бывает только при пересчете СК, разумеется. Проекция ничего про высоту не знает.
Так что правильнее хранить и редактировать карту только в одной СК - тогда про высоту можно вообще не думать. -
Vladislav Zavjalov October 31st, 2009 @ 04:13 PM
Пытаюсь сейчас что-то сделать на эту тему.
Первые пострадавшие -- проекции google и kosmosnimki. Интересно, можно ли описать их в терминах проекций из libproj?
-
Max Ushakov October 31st, 2009 @ 04:49 PM
Ой, google очень жалко! Я без него не смогу готовить карты для
Андроида! Ты уж с ним поаккуратнее!:))) -
Vladislav Zavjalov October 31st, 2009 @ 05:01 PM
Мне он тоже нужен, конечно. Так что придумаем что-нибудь...
-
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.
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