1

У меня есть map with Albers projection, и у меня есть Lat и Long в каком-то месте, и мне нужно нарисовать точку на этом изображении. Я знаю, что эта карта была построена с проекцией Альберса, используя стандартные параллели на 52 и 64 и WGS 84. Я попытался реализовать this formulas в Javascript, но результат кажется неправильным. Я понятия не имею, что делать. Я нашел a few аналогичный вопрос, но они не дали мне ответа на мой вопрос.Преобразование Lat/Longs в X/Y Координаты на карте проекций Альберса

// lat and long of left top corner 
f0 = 66 * (Math.PI/180); 
a0 = 36 * (Math.PI/180); 
// lat and long of my point 
f = 55 * (Math.PI/180); 
a = 37 * (Math.PI/180); 
// Standart parallers 
f1 = 52 * (Math.PI/180); 
f2 = 64 * (Math.PI/180); 

n = 1/2 * (Math.sin(f1)+Math.sin(f2)); 
c = Math.pow(Math.cos(f1),2) + 2*n*Math.sin(f1); 
t = n*(a*(180/Math.PI) - a0*(180/Math.PI))* (Math.PI/180); 
p0 = 1/n * Math.sqrt(c-2*n*Math.sin(f0)); 
p=1/n*Math.sqrt(c-2*n*Math.sin(f)); 

x=p*Math.sin(t); 
y=p0-p*Math.cos(t); 

Спасибо.

+0

вещей, которые могут помочь: http://trac.osgeo.org/proj4js/ http://gis.stackexchange.com/questions/62335/what-parameters- являются полезными для альберс-равных-площадь-проекция-карта-оф-мир – lexicore

+0

Веб-страница для вашей карты: http://www.transparentworld.ru/ru/environment/oopt/oopt-map/ – lexicore

+0

Спасибо, но я не могу использовать никакую другую библиотеку (proj4js и т. Д.). Мне нужно исправить мой код, чтобы он работал правильно. Кажется, я правильно реализую этот код http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html, но он не работает так, как я хочу. – PePe

ответ

1

Проблема решена Хорошо, мне нужно также рассчитать Центральный меридиан для моей карты. Этот код работает отлично.

function albers(lat, lng) { 

    var lat0 = 66 * (Math.PI/180), // Latitude_Of_Origin 
     lng0 = 105 * (Math.PI/180), // Central_Meridian 
     phi1 = 52 * (Math.PI/180), // Standard_Parallel_1 
     phi2 = 64 * (Math.PI/180), // Standard_Parallel_2 


     n = 0.5 * (Math.sin(phi1) + Math.sin(phi2)), 
     c = Math.cos(phi1), 
     C = c*c + 2*n*Math.sin(phi1), 
     p0 = Math.sqrt(C - 2*n*Math.sin(lat0))/n, 
     theta = n * (lng * Math.PI/180 - lng0), 
     p = Math.sqrt(C - 2*n*Math.sin(lat* Math.PI/180))/n, 

     x = p * Math.sin(theta), 
     y = p0 - p * Math.cos(theta) 

     return [x,y] 
} 

Все кредиты идет к https://gist.github.com/RandomEtc/476238

Смежные вопросы