Как перевести координаты с PaintBox X и Y в Longitude и Latitude (Openstreetmap)?
Столкнулся с интересной задачей. У нас есть компонент TPaintBox на нем отображается условно какая-то часть карты взятая с Openstreetmap. Вопрос, как узнать широту и долготу, когда мы перемещаем курсор по данному компоненту, если нам известно следующие:
Ширина и высота компонента TPaintBox: hBox = 400 | wBox = 800
Из Openstreetmapизвестен текущий масштаб: 11
Lon и Lat для верхней левой точки (0,0) : Lon = 28.12 | Lat = 46.07
Так же в пределах нашего TPaintBox перемещается наш курсор, то есть мы знаем положение X и Y
тайлы с OpenStreet всегда имеют длину и высоту: 256 pxl
Буду признателен за помощь с формулами, для ниже обозначенных функций, например как:
function GetLonByX(APosX: Integer): Double;
function GetLonByY(APosX: Integer): Double;
ЗЫ. Масштаб и начальные координаты Lon | Lat могут меняться...
freeExec, эх перерыл конечно еще перед тем как задавать вопрос... там все есть (координаты для тайлов и возврат X Y для широт по тайлам и т.д.), но именно своего вопроса не нашел :-(
memradar, Lon считается точно, а вот Lat, как верно заметил freeExec, будет с погрешностью.
А прежде чем сравнивать координаты, вы их приведите к одному формату. В гугле же они отображаются в градусах и минутах, а у вас - в градусах.
memradar, Чтобы посчитать точно и Lat, надо для точки (0,0) по формуле найти Y, прибавить к нему смещение по Y внутри битмапа и по обратной формуле найти Lat (в формуле обозначено как φ).
Из гугла: 27˚27"08' = 27 + 1/60*27 + 1/3600 * 08 = 27,4522222
Из гугла: 53˚57"11' = 53 + 1/60*57 + 1/3600 * 11 = 53,953055
так что всё у вас правильно считает