2014-01-10 1 views
1

Мне нужно реализовать преобразование из географических координат с высокими данными в изображение.Цилиндрическая проекция - как получить координаты изображения y от тангенсов (широта)

Как описано в http://mathworld.wolfram.com/CylindricalProjection.html.

Я просто не знаю, как создать подходящий у-значение ...

Например:

double longitude = -180; // (λ) 
    double latitude = 80; // (φ) 
    int mapHeight = 360; 
    int mapWidth = 720; 
    x = (int)((longitude+180.0)*(mapWidth/360.0)); 

Как я использовать результаты

Math.tan(Math.toRadians(latitude)) 

Thank вы!

ответ

0

Вы не можете представлять полюса, используя цилиндрическую проекцию. Поэтому вам нужно установить максимальную широту и сохранить ее (скажем double maxlat=3.1415/2.0). Чтобы получить y, первое, испытание, если точка не близко к полюсам, то вычислить:

y=(int)(mapHeight/2+mapHeight/2*Math.tan(Math.toRadians(latitude)) /Math.tan(Math.toRadians(maxlat))) ; 

Если вы ищете красивую карту, рассмотреть вопрос об использовании проекции Меркатора:

y=(int)(mapHeight/2+mapHeight/2*Math.log(Math.tan(Math.toRadians(latitude)/2.0+M_PI/4.0)) /Math.log(Math.tan(Math.toRadians(maxlat)/2.0+M_PI/4.0))) ; 

Магазин Math.tan(Math.toRadians(maxlat)) или math.log(Math.tan(Math.toRadians(maxlat)/2.0+M_PI/4.0)), если вам нужно вычислить много баллов

+0

Большое спасибо за ваш быстрый и полезный ответ! /Math.tan(Math.toRadians(maxlat)) была моей недостающей частью. Я знаю, что Меркатор - это лучшая проекция карты, чем стандартная цилиндрическая, и у меня уже есть ее реализация (мне пришлось реализовать 3 разных проекции). – user3183556