Пикселы в широту-долготу

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
tovSuhov
Новоприбывший
Сообщения: 4
Зарегистрирован: 12 янв 2009, 12:51
Репутация: 0

Пикселы в широту-долготу

Сообщение tovSuhov » 12 янв 2009, 12:56

Здравствуйте, уважаемые знатоки!

Заранее прошу прощения за неграмотную речь, но в области ГИС я совсем не специалист.
Тем не менее встала передо мной непростая задача, два дня уже голову ломаю, вот решил обратиться вам.
Итак: имеется растровая карта (BMP-картинка реальной географической карты) и порядка 10 000 объектов-точек, расположенных на этой карте в своих локальных координатах (смещение в пикселах от левого верхнего угла карты). Требуется придумать алгоритм (формулу) для пересчета всех этих координат в реальные координаты типа широта,долгота (GoogleMaps).
При это, естественно, мы имеем возможность получить Google-координаты для любой точки исходной карты (создать точки привязки, проверки).

Чем можете подсобить?
Заранее благодарен.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Пикселы в широту-долготу

Сообщение Максим Дубинин » 13 янв 2009, 04:23

посмотрите на сайте статьи про аффинное или полиномиальное преобразование, вам надо один раз решить систему уравнений для нескольких точек, а дальше использовать коэффициенты для перевода из локальной СК в ГСК остальных.

пример с реализацией
viewtopic.php?f=1&t=2729
viewtopic.php?f=1&t=2748
пристегивайтесь, турбулентность прямо по курсу

tovSuhov
Новоприбывший
Сообщения: 4
Зарегистрирован: 12 янв 2009, 12:51
Репутация: 0

Re: Пикселы в широту-долготу

Сообщение tovSuhov » 27 янв 2009, 12:06

Спасибо всем!
На самом деле наиболее полезен оказался способ, описанный здесь же, в ветке
Полиномиальные преобразования - вычисления и практика (также см. саму статью)

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Пикселы в широту-долготу

Сообщение Максим Дубинин » 28 янв 2009, 03:46

отлично, для этого писалась статья и собирались эти примеры, кстати в параллельной ветке написали статью про случай когда число точек > минимального и пример тоже есть на Дельфи, выйдет чуть позже.
А тот, что в теле статьи - не сросталось...
Вот тут подробнее, что именно не так.
пристегивайтесь, турбулентность прямо по курсу

tovSuhov
Новоприбывший
Сообщения: 4
Зарегистрирован: 12 янв 2009, 12:51
Репутация: 0

Re: Пикселы в широту-долготу

Сообщение tovSuhov » 28 янв 2009, 07:23

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

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

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

PAV74
Новоприбывший
Сообщения: 4
Зарегистрирован: 16 янв 2009, 09:50
Репутация: 0

Re: Пикселы в широту-долготу

Сообщение PAV74 » 29 янв 2009, 09:54

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

if Inverse(aa,6)=false then begin main.show_err('Ошибка. Необходим другой набор контрольных точек.');exit;end;

в матрице получаются члены со степенями -10 и больше. Видимо матрица вырождается, точности уже не хватает, и малые потери приводят к совсем неверным результатам.
Сейчас проверил Ваш пример это как раз тот случай

tovSuhov
Новоприбывший
Сообщения: 4
Зарегистрирован: 12 янв 2009, 12:51
Репутация: 0

Re: Пикселы в широту-долготу

Сообщение tovSuhov » 29 янв 2009, 09:58

Следовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Пикселы в широту-долготу

Сообщение Максим Дубинин » 29 янв 2009, 18:39

Следовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.
автор статьи усматривает в этом противоречие :) буду смотреть внимательнее
пристегивайтесь, турбулентность прямо по курсу

ProFF
Новоприбывший
Сообщения: 11
Зарегистрирован: 03 мар 2009, 20:35
Репутация: 0

Re: Пикселы в широту-долготу

Сообщение ProFF » 03 мар 2009, 21:33

Посмотри сдесь тут есть код перевода координат:

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

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя