Туризм и спорт в Беларуси. Свободный сайт для планирования событий спортивной и туристической тематики. Здесь те, кто гоняет во всю мощь.
Таки одолел я эту штуку. Не идеально, но все-же...
Исходные данные: есть координаты объекта в 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
Хотя я и попытаюсь. Если кто-то может мне в этом помочь -- велкам, контакты в профиле.
http://gis-lab.info/qa/polynom.html
а вообще - бессымсленное и беспощадное занятие :)
имхо естественно :)
а вообще - бессымсленное и беспощадное занятие :)
имхо естественно :)
К сожалению, его бессмысленность я осознал тока тогда, когда уже сделал.
Но раз уж сделал, просто выбросить жалко. #)
А опубликуй, пожалуйста, файлик с точками привязки CI-WGS84. Попробуем сделать онлайновый транслятор :)
Сделать копию экрана и привязать в ozi?
Для сложных случаев у него тоже есть полиномы.
Задача: получить географические координаты объекта, что-б, к примеру, сформировать линк для Wikimapia
а почему не воспользоватся было векторной картой минска ? от того же гармина например ? И дома тебе свеженькие и координатки под рукой
А опубликуй, пожалуйста, файлик с точками привязки CI-WGS84.
Не совсем понимаю, что ты имеешь ввиду.
На всякий случай в этом архиве 2 файла: слой для CityInfo, на основе которого делались расчёты, и xls со всеми полученными координатами для этих точек.
Если нужна ещё какая инфа, велкам.
Сделать копию экрана и привязать в 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 точек, он переварит?
[а почему не воспользоватся было векторной картой минска ? от того же гармина например ? И дома тебе свеженькие и координатки под рукой
У меня нет ни гармина, ни карты от него. Да и задача стояла именно попытаться перевести координаты CI в географические. Что-б, к примеру, другие слои из CI можно было во что угодно конвертировать.
Цитата сообщения от отправленного 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:
Кстати, а скока вообще точек привязки можно поставить для карты? В самом Озике я видел до 9 точек
Дает редактировать 9, поддерживает до 30 (согласно документации).
При включенном флажке "Polynomial Calibration" ozi использует преобразование 2-го порядка.
Согласно вышеуказанной статье, для этого достаточно 6 точек.
Большее количество точек только немного улучшает результаты. Полагаю, что привязка просто чуть "сдвигается", чтобы уменьшить общую ошибку для всех точек."карта не совсем привязанная.. точнее это даже не карта, а план".
Так и есть.
То есть задача стоит не в том, чтобы найти правильное отображение для некоей проекции, а в том, чтобы учесть известные искажения.
Дейстительно, преобразования более высоких порядков могут помочь...
Фигушки, как раз дочитал статью.
Там сказано, что для параболоида (т.е. поверхности 2-го порядка) достаточно 6 точек. Т.е. через 6 точек проходит единственный параболоид, так же как через 3 точки на плоскости проходит единственная кривая 2-го порядка -- парабола.
У нас проблема в том, что у нас сильно больше точек, но все они с ошибками. И параметры этого параболоида нужно оапределять по методу найменьших квадратов. В итоге он (скорее всего) не пройдёт ТОЧНО ни через одну точку, но зато минимизирует среднеквадратичную ошибку для всех точек.
К тому же, как показал визуальный анализ оставшихся невязок, там напрашивается поверхность 3-го порядка, а не 2-го. А ещё лучше сплайн, который за счёт сильного усложнения формулы учтёт локальные искажения.
Остаточные невязки по Lat, вид на вычисленную плоскость "сверху"
... "сбоку"
... "снизу"