Страница 1 из 1
Пикселы в широту-долготу
Добавлено: 12 янв 2009, 12:56
tovSuhov
Здравствуйте, уважаемые знатоки!
Заранее прошу прощения за неграмотную речь, но в области ГИС я совсем не специалист.
Тем не менее встала передо мной непростая задача, два дня уже голову ломаю, вот решил обратиться вам.
Итак: имеется растровая карта (BMP-картинка реальной географической карты) и порядка 10 000 объектов-точек, расположенных на этой карте в своих локальных координатах (смещение в пикселах от левого верхнего угла карты). Требуется придумать алгоритм (формулу) для пересчета всех этих координат в реальные координаты типа широта,долгота (GoogleMaps).
При это, естественно, мы имеем возможность получить Google-координаты для любой точки исходной карты (создать точки привязки, проверки).
Чем можете подсобить?
Заранее благодарен.
Re: Пикселы в широту-долготу
Добавлено: 13 янв 2009, 04:23
Максим Дубинин
посмотрите на сайте статьи про
аффинное или полиномиальное преобразование, вам надо один раз решить систему уравнений для нескольких точек, а дальше использовать коэффициенты для перевода из локальной СК в ГСК остальных.
пример с реализацией
viewtopic.php?f=1&t=2729
viewtopic.php?f=1&t=2748
Re: Пикселы в широту-долготу
Добавлено: 27 янв 2009, 12:06
tovSuhov
Спасибо всем!
На самом деле наиболее полезен оказался способ, описанный здесь же, в ветке
Полиномиальные преобразования - вычисления и практика (также см. саму статью)
Причем корректно у меня заработал пример для Дельфи, размещенный уже в ветке обсуждения. А тот, что в теле статьи - не сросталось...
Re: Пикселы в широту-долготу
Добавлено: 28 янв 2009, 03:46
Максим Дубинин
отлично, для этого писалась статья и собирались эти примеры, кстати в параллельной ветке написали статью про случай когда число точек > минимального и пример тоже есть на Дельфи, выйдет чуть позже.
А тот, что в теле статьи - не сросталось...
Вот тут подробнее, что именно не так.
Re: Пикселы в широту-долготу
Добавлено: 28 янв 2009, 07:23
tovSuhov
Возможно, конечно, что я некорректно загрузил тестовый набор данных...
Код: Выделить всё
setlength(main.map.pnts,6);
main.map.pnts[0].xr :=83.786;
main.map.pnts[0].yr :=-36.107;
main.map.pnts[0].xg :=557124.596;
main.map.pnts[0].yg :=5479746.857;
main.map.pnts[1].xr :=109.929;
main.map.pnts[1].yr :=-582.929;
main.map.pnts[1].xg :=564344.898;
main.map.pnts[1].yg :=5376737.207;
main.map.pnts[2].xr :=1038.000;
main.map.pnts[2].yr :=-434.786;
main.map.pnts[2].xg :=646174.994;
main.map.pnts[2].yg :=5421503.083;
main.map.pnts[3].xr :=539.107;
main.map.pnts[3].yr :=-694.036;
main.map.pnts[3].xg :=603772.500;
main.map.pnts[3].yg :=5363472.000;
main.map.pnts[4].xr :=831.036;
main.map.pnts[4].yr :=-352.000;
main.map.pnts[4].xg :=626857.500;
main.map.pnts[4].yg :=5433468.000;
main.map.pnts[5].xr :=632.786;
main.map.pnts[5].yr :=-219.107;
main.map.pnts[5].xg :=607905.000;
main.map.pnts[5].yg :=5455042.500;
map_calculate_ceeff;
lat := getx(500,-300);
lng := gety(500,-300);
Memo1.Lines.Add(FloatToStr(lat)+', '+FloatToStr(lng));
На выходе получаю
Re: Пикселы в широту-долготу
Добавлено: 29 янв 2009, 09:54
PAV74
Насчет неверных результатов.
У меня было такое когда опорные точки не были правильно разнесены. Т.е. когда какие либа три точки лежали на одной линии, т.е. все 6 точек лежали на прямоугольнике.
в этом случае после выполнения
if Inverse(aa,6)=false then begin main.show_err('Ошибка. Необходим другой набор контрольных точек.');exit;end;
в матрице получаются члены со степенями -10 и больше. Видимо матрица вырождается, точности уже не хватает, и малые потери приводят к совсем неверным результатам.
Сейчас проверил Ваш пример это как раз тот случай
Re: Пикселы в широту-долготу
Добавлено: 29 янв 2009, 09:58
tovSuhov
Следовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.
Re: Пикселы в широту-долготу
Добавлено: 29 янв 2009, 18:39
Максим Дубинин
Следовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.
автор статьи усматривает в этом противоречие

буду смотреть внимательнее
Re: Пикселы в широту-долготу
Добавлено: 03 мар 2009, 21:33
ProFF