Пикселы в широту-долготу
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 12 янв 2009, 12:51
- Репутация: 0
Пикселы в широту-долготу
Здравствуйте, уважаемые знатоки!
Заранее прошу прощения за неграмотную речь, но в области ГИС я совсем не специалист.
Тем не менее встала передо мной непростая задача, два дня уже голову ломаю, вот решил обратиться вам.
Итак: имеется растровая карта (BMP-картинка реальной географической карты) и порядка 10 000 объектов-точек, расположенных на этой карте в своих локальных координатах (смещение в пикселах от левого верхнего угла карты). Требуется придумать алгоритм (формулу) для пересчета всех этих координат в реальные координаты типа широта,долгота (GoogleMaps).
При это, естественно, мы имеем возможность получить Google-координаты для любой точки исходной карты (создать точки привязки, проверки).
Чем можете подсобить?
Заранее благодарен.
Заранее прошу прощения за неграмотную речь, но в области ГИС я совсем не специалист.
Тем не менее встала передо мной непростая задача, два дня уже голову ломаю, вот решил обратиться вам.
Итак: имеется растровая карта (BMP-картинка реальной географической карты) и порядка 10 000 объектов-точек, расположенных на этой карте в своих локальных координатах (смещение в пикселах от левого верхнего угла карты). Требуется придумать алгоритм (формулу) для пересчета всех этих координат в реальные координаты типа широта,долгота (GoogleMaps).
При это, естественно, мы имеем возможность получить Google-координаты для любой точки исходной карты (создать точки привязки, проверки).
Чем можете подсобить?
Заранее благодарен.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Пикселы в широту-долготу
посмотрите на сайте статьи про аффинное или полиномиальное преобразование, вам надо один раз решить систему уравнений для нескольких точек, а дальше использовать коэффициенты для перевода из локальной СК в ГСК остальных.
пример с реализацией
viewtopic.php?f=1&t=2729
viewtopic.php?f=1&t=2748
пример с реализацией
viewtopic.php?f=1&t=2729
viewtopic.php?f=1&t=2748
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 12 янв 2009, 12:51
- Репутация: 0
Re: Пикселы в широту-долготу
Спасибо всем!
На самом деле наиболее полезен оказался способ, описанный здесь же, в ветке
Полиномиальные преобразования - вычисления и практика (также см. саму статью)
Причем корректно у меня заработал пример для Дельфи, размещенный уже в ветке обсуждения. А тот, что в теле статьи - не сросталось...
На самом деле наиболее полезен оказался способ, описанный здесь же, в ветке
Полиномиальные преобразования - вычисления и практика (также см. саму статью)
Причем корректно у меня заработал пример для Дельфи, размещенный уже в ветке обсуждения. А тот, что в теле статьи - не сросталось...
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Пикселы в широту-долготу
отлично, для этого писалась статья и собирались эти примеры, кстати в параллельной ветке написали статью про случай когда число точек > минимального и пример тоже есть на Дельфи, выйдет чуть позже.
Вот тут подробнее, что именно не так.А тот, что в теле статьи - не сросталось...
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 12 янв 2009, 12:51
- Репутация: 0
Re: Пикселы в широту-долготу
Возможно, конечно, что я некорректно загрузил тестовый набор данных...
На выходе получаю
Код: Выделить всё
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
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 янв 2009, 09:50
- Репутация: 0
Re: Пикселы в широту-долготу
Насчет неверных результатов.
У меня было такое когда опорные точки не были правильно разнесены. Т.е. когда какие либа три точки лежали на одной линии, т.е. все 6 точек лежали на прямоугольнике.
в этом случае после выполнения
if Inverse(aa,6)=false then begin main.show_err('Ошибка. Необходим другой набор контрольных точек.');exit;end;
в матрице получаются члены со степенями -10 и больше. Видимо матрица вырождается, точности уже не хватает, и малые потери приводят к совсем неверным результатам.
Сейчас проверил Ваш пример это как раз тот случай
У меня было такое когда опорные точки не были правильно разнесены. Т.е. когда какие либа три точки лежали на одной линии, т.е. все 6 точек лежали на прямоугольнике.
в этом случае после выполнения
if Inverse(aa,6)=false then begin main.show_err('Ошибка. Необходим другой набор контрольных точек.');exit;end;
в матрице получаются члены со степенями -10 и больше. Видимо матрица вырождается, точности уже не хватает, и малые потери приводят к совсем неверным результатам.
Сейчас проверил Ваш пример это как раз тот случай
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 12 янв 2009, 12:51
- Репутация: 0
Re: Пикселы в широту-долготу
Следовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Пикселы в широту-долготу
автор статьи усматривает в этом противоречиеСледовательно можно порекомендовать авторам статьи несколько изменить тестовый набор данных (ибо это он).
Еще замечу, что пример на C# вполне работоспособен и на этих тестовых данных.

пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 11
- Зарегистрирован: 03 мар 2009, 20:35
- Репутация: 0
Re: Пикселы в широту-долготу
Посмотри сдесь тут есть код перевода координат:
http://www.ibm.com/developerworks/ru/li ... .html#fig3
http://www.ibm.com/developerworks/ru/li ... .html#fig3
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя