Страница 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));
На выходе получаю

Код: Выделить всё

-14968,8073118889, -24475,7645627047

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
Посмотри сдесь тут есть код перевода координат:

http://www.ibm.com/developerworks/ru/li ... .html#fig3