Координаты (широта и долгота) в x и y?

Добрый вечер.

Суть вопроса такая, дан рисунок края РФ на который надо по имеющимся координатам (широта и долгота) нанести точки. Как перевести координаты точек на рисунок, т.е. в пиксели. Начало координат рисунка вверху слева. Точность не очень важна. Имеются приблизительные координаты (широта и долгота) углов рисунка.

Пробовал по имеющимся данным высчитать сколько в одном пикселе градусов но что то с этой затеей ни чего не получилось, думаю не так это делается.

Может кто подскажет алгоритм?
  • Вопрос задан
  • 32402 просмотра
Пригласить эксперта
Ответы на вопрос 6
Riateche
@Riateche
Задача не так тривиальна, как кажется. Всё зависит от того, в какой проекции сделана карта.

Например, есть проекция Меркатора (примером ее использования является Google Maps). Там широта и долгота зависят от номера пикселя линейно, и достаточно вычислить координаты четырех углов, а дальше легко посчитать.

А если проекция карты — WGS84 (ее, например, использует Google Earth), приведенный выше способ не подходит. Там есть свои базовые координаты, которые зависят от номера пикселя линейно, а для переведения их в широту и долготу необходимо воспользоваться соответствующими нелинейными формулами.

Необходимо точно узнать, какую проекцию использует ваш файл. Существует довольно много различных проекций карт, и в каждой своя зависимость координат пикселя от широты и долготы. При изготовлении карты выбор проекции зависит от преследуемых целей. Проекция Меркатора сохраняет углы, но не расстояния, и для удаленных от экватора территорий дает большие искажения.

Существуют форматы, которые позволяют хранить проекцию карты (geotiff, sid, img), и ПО, которое позволяет эти данные из файлов читать. Например, для geotiff есть простая консольная утилита listgeo, которая выдает информацию о типе проекции и координатах углов. Попробуйте найти карту, в которой есть информация о проекции.
Ответ написан
Levsha100
@Levsha100
Не уверен, но думаю что как-то так:
x= cos(долгота)*радиус_земли* масштаб + сдвиг участка карты
y= sin(широта)*радиус_земли* масштаб + сдвиг участка карты
Ответ написан
Комментировать
AndreyIvanoff
@AndreyIvanoff
Смотря в какой проекции сделан рисунок местности? В любом случае потребуется геопривязка вашего рисунка по паре извсетных базовых точек.
Ответ написан
@Talismanium
возьми побольше точек привязки (пересечения рек и все что точно можешь привязать)
и потом средним арифметическим: не так точно, но быстро
Ответ написан
Комментировать
alaudo
@alaudo
Если размер карты небольшой и кривизной земной поверхности можно пренебречь, то самый простой способ следующий:
Допустим рисунок имеет разрешение (Xmax, Ymax).
Коогдинаты левого верхнего угла картинки (X1, Y1) и правого нижнего (X2, Y2).
Тогда произвольная точка с географическими координатами (A, B) при условии X1 < A < X2 && Y1 < B < Y2 получит пиксельные координаты:
Xcoord = Xmax * (A — X1) / (X2 — X1)
Ycoord = Ymax * (B — Y1) / (Y2 — Y1)
Ответ написан
anaximen
@anaximen
Думаю нужно перевести астрономические координаты в прямоугольные, а уже после выполнять привязку к растровому изображению.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы