Jochen Arndt
Вам нужен размер изображения в пикселях (width
и height
), опорная точка lat/lon в заданном положении пикселя (например, lat0
и lon0
при x = y = 0), а также lat/lon-дегресс, охватываемый изображением (например, при наличии другой опорной точки на макс. x и y).
Первый шаг-вычисление коэффициентов масштабирования в пикселях на градус:
double scale_x = width / lon_range;
double scale_y = height / lat_range;
Теперь вы можете получить позиции пикселей:
double x = (lon - lon0) * scale_x;
double y = (lat - lat0) * scaly_y;
Наконец преобразуйте их в целые числа с округлением:
int xp = static_cast<int>((x > 0) ? x + 0.5 : x - 0.5);
int yp = static_cast<int>((y > 0) ? y + 0.5 : y - 0.5);</int></int>
Примечание: это просто с нуля (не проверял его).
Sukerbek
большое вам спасибо за ответ но результат был неправильным
когда я использовал эти параметры
ширина = 4023;
высота = 4096;
lon0 = 103.21922302246094;
lat0 = 58.177616119384766;
широта = 37.552063;
долгота = 125.518799;
lon_range = 360;
lat_range = 180;
Результат
xp = 245;
гг = -454;
Однако результат должен быть
xp = arround-> 2300 что-то; или больше, чем 2000
yp = arround-> 2300 что-то; или больше, чем 2000
Jochen Arndt
Диапазоны lat/lon должны быть шириной и высотой изображения в градусах ("Градусы, покрытые изображением"), а не полными диапазонами lat/lon 180/360.
Member 14586399
@Sukerbek, как вы решили эту проблему, используя цель, я пытаюсь достичь того же самого.