Пересчёт координат CityInfo в географические.

Sasha Nahayko
Автор

Таки одолел я эту штуку. Не идеально, но все-же...

Исходные данные: есть координаты объекта в CityInfo, например (-204.0;409.4)
Задача: получить географические координаты объекта, что-б, к примеру, сформировать линк для Wikimapia
http://wikimapia.org/#lat=53.902495&lon=27.561634&z=17&l=1&m=b

На данном этапе получены следующие формулы пересчёта:
Lat = Lat0 + kLatX1*X + kLatY1*Y
Lon = Lon0 + kLonX1*X + kLonY1*Y
где:
X, Y -- координаты в CityInfo
Lat0 = 53.9041666288137
kLatX1 = 9.2327261204e-006
kLatY1 = 5.1650613379e-007
Lon0 = 27.5552889760138
kLonX1 = -6.5640140709e-007
kLonY1 = 1.51720701208e-005

Средняя погрешность (для точек, по которым рассчитывались значения) составляет 26 м, максимальная 91 м

Формулы выводились по методу найменьших квадратов по 207 вручную расставленным точкам более-менее равномерно по карте (как правило это перекрёстки).
Анализ показывает, что среднюю точность можно улучшить, если перейти от линейной функции 2-х переменным к функции 3-го порядка. Или с помощью сплайнов.
Но для этого моего знания математики пока маловато.
Хотя я и попытаюсь. Если кто-то может мне в этом помочь -- велкам, контакты в профиле.

Upd 31.03.2010
С подачи Michael D. https://poehali.net/index.php?board=15;action=viewprofile;user=Michael+D. разработал такой алгоритм пересчёта координат:
Пусть X, Y -- координаты точки в CityInfo. Эти координаты необходимо пересчитать в географические Lat и Lon соответственно.

Имеется массив из 207 точек (файл в аттаче) с известными координатами в обоих системах.

Для искомой точки находятся N>=3 ближайших к ней известных точек (в координах CI).

По этим точкам методом найменьших квадратов находится уравнения плоскостей регрессии для координат Lat и Lon:
Lat = Lat0 + kLatX1*X + kLatY1*Y
Lon = Lon0 + kLonX1*X + kLonY1*Y

Из найденных уравнений вычисляются Lat и Lon искомой точки.

Как показали мои расчёты, достаточно 9 точек для достижения средней ошибки <12 м, максимальной <66 м по всему Минску. Вот расчёты:
Число точек Погр.ср Погр.макс
3 47941.80 8393330.00
4 19.64 580.61
5 14.57 253.58
6 13.36 91.33
7 13.11 110.45
8 12.70 66.86
9 12.58 65.57
10 12.56 65.48

Цитата сообщения от sasha nahayko отправленного 17 Мар, 2010 в 18:28

Хотя я и попытаюсь. Если кто-то может мне в этом помочь -- велкам, контакты в профиле.

http://gis-lab.info/qa/polynom.html
а вообще - бессымсленное и беспощадное занятие :)
имхо естественно :)

Sasha Nahayko
Автор
Цитата сообщения от michael d\. отправленного 17 Мар, 2010 в 18:38

а вообще - бессымсленное и беспощадное занятие :)
имхо естественно :)

К сожалению, его бессмысленность я осознал тока тогда, когда уже сделал.
Но раз уж сделал, просто выбросить жалко. #)

А опубликуй, пожалуйста, файлик с точками привязки CI-WGS84. Попробуем сделать онлайновый транслятор :)

Сделать копию экрана и привязать в ozi?
Для сложных случаев у него тоже есть полиномы.

Удалённый пользователь
Цитата сообщения от sasha nahayko отправленного 17 Мар, 2010 в 18:28

Задача: получить географические координаты объекта, что-б, к примеру, сформировать линк для Wikimapia

а почему не воспользоватся было векторной картой минска ? от того же гармина например ? И дома тебе свеженькие и координатки под рукой

Sasha Nahayko
Автор
Цитата сообщения от jek отправленного 17 Мар, 2010 в 18:44

А опубликуй, пожалуйста, файлик с точками привязки CI-WGS84.

Не совсем понимаю, что ты имеешь ввиду.
На всякий случай в этом архиве 2 файла: слой для CityInfo, на основе которого делались расчёты, и xls со всеми полученными координатами для этих точек.

Если нужна ещё какая инфа, велкам.

Цитата сообщения от kciroohs отправленного 17 Мар, 2010 в 18:51

Сделать копию экрана и привязать в ozi?
Для сложных случаев у него тоже есть полиномы.

Попробовать можно конечно.
Но боюсь, будет обломинго. Как отметил здесь https://poehali.net/forum/turizm/tur-boltalka/kolonki-s-vodoj./?page=5**ales**, "карта не совсем привязанная.. точнее это даже не карта, а план". И из собственного опыта я склонен этому верить.
Например, согласно CI расстояние между перекрёстками Тимирязева и Победителей с кольцевой -- 892 м, а WikiMapia даёт 940 м.
А вот для Держинского-Кижеватова расстояния 4287 и 4, 3 км соответственно.
Перекрёсток Победителей/Кольцевая нарисован ОЧЕНЬ не в том месте, его пришлось исключить из обработки.

Кстати, а скока вообще точек привязки можно поставить для карты? В самом Озике я видел до 9 точек, в MAP-файле 15 позиций (причём только 9 из них заполнены). Если вбить туда, к примеру, 200 точек, он переварит?

Цитата сообщения от отправленного 17 Мар, 2010 в 23:38

[а почему не воспользоватся было векторной картой минска ? от того же гармина например ? И дома тебе свеженькие и координатки под рукой

У меня нет ни гармина, ни карты от него. Да и задача стояла именно попытаться перевести координаты CI в географические. Что-б, к примеру, другие слои из CI можно было во что угодно конвертировать.

Цитата сообщения от sasha nahayko отправленного 18 Мар, 2010 в 14:39
Цитата сообщения от отправленного 17 Мар, 2010 в 23:38

[а почему не воспользоватся было векторной картой минска ? от того же гармина например ? И дома тебе свеженькие и координатки под рукой

У меня нет ни гармина, ни карты от него. Да и задача стояла именно попытаться перевести координаты CI в географические. Что-б, к примеру, другие слои из CI можно было во что угодно конвертировать.

наложил ради интереса точки привязки на карту. http://www.pict.com/view/3148967/0/statistic
полученный *.gpx файлик - http://sites.google.com/site/osmbelarus/Home/files/statistic.gpx (имя точки - номер из начального xls, комментарий - координаты CI)

Sasha Nahayko:

Кстати, а скока вообще точек привязки можно поставить для карты? В самом Озике я видел до 9 точек

Дает редактировать 9, поддерживает до 30 (согласно документации).

При включенном флажке "Polynomial Calibration" ozi использует преобразование 2-го порядка.
Согласно вышеуказанной статье, для этого достаточно 6 точек.
Большее количество точек только немного улучшает результаты. Полагаю, что привязка просто чуть "сдвигается", чтобы уменьшить общую ошибку для всех точек.

"карта не совсем привязанная.. точнее это даже не карта, а план".

Так и есть.
То есть задача стоит не в том, чтобы найти правильное отображение для некоей проекции, а в том, чтобы учесть известные искажения.
Дейстительно, преобразования более высоких порядков могут помочь...

Sasha Nahayko
Автор
Цитата сообщения от kciroohs отправленного 18 Мар, 2010 в 17:38

Sasha Nahayko:

Кстати, а скока вообще точек привязки можно поставить для карты? В самом Озике я видел до 9 точек

Дает редактировать 9, поддерживает до 30 (согласно документации).
При включенном флажке "Polynomial Calibration" ozi использует преобразование 2-го порядка.
Согласно вышеуказанной статье, для этого достаточно 6 точек.
Большее количество точек только немного улучшает результаты. Полагаю, что привязка просто чуть "сдвигается", чтобы уменьшить общую ошибку для всех точек.

"карта не совсем привязанная.. точнее это даже не карта, а план".

Так и есть.
То есть задача стоит не в том, чтобы найти правильное отображение для некоей проекции, а в том, чтобы учесть известные искажения.
Дейстительно, преобразования более высоких порядков могут помочь...

Фигушки, как раз дочитал статью.
Там сказано, что для параболоида (т.е. поверхности 2-го порядка) достаточно 6 точек. Т.е. через 6 точек проходит единственный параболоид, так же как через 3 точки на плоскости проходит единственная кривая 2-го порядка -- парабола.
У нас проблема в том, что у нас сильно больше точек, но все они с ошибками. И параметры этого параболоида нужно оапределять по методу найменьших квадратов. В итоге он (скорее всего) не пройдёт ТОЧНО ни через одну точку, но зато минимизирует среднеквадратичную ошибку для всех точек.

К тому же, как показал визуальный анализ оставшихся невязок, там напрашивается поверхность 3-го порядка, а не 2-го. А ещё лучше сплайн, который за счёт сильного усложнения формулы учтёт локальные искажения.

Остаточные невязки по Lat, вид на вычисленную плоскость "сверху"