Получение позиции Y из Latitude на сферической проецируемой карте

В Javascript.

У меня есть карта мира 1024 x 1024 пикселей - это сферическая проекция Меркатора.

Я хочу преобразовать long / lat в x, y для этой карты. У меня есть несколько координат, которые мне нужно наложить поверх них.

Вычислить долготу было очень легко, и я делаю это так:

pos.x = ((long + 180)/ 360) * 1024;

Мне просто нужно то же самое для широты -> у

Я огляделся и увидел много ссылок на openlayers, но не заметил такого преобразования.


person Adam Meyer    schedule 14.06.2011    source источник


Ответы (2)


Чтобы свести это к нулю:

var mercator = function(lat, lng) {
  return [lng, Math.log( (Math.sin(lat) + 1.0) / Math.cos(lat)) ] ;
};

Разумеется, широта и долгота должны быть выражены в радианах.

person Malvolio    schedule 14.06.2011
comment
Спасибо! Если кому-то это нужно, пожалуйста pos.y = ((Math.log( (Math.sin(lat) + 1.0) / Math.cos(lat))) + (Math.PI) ) / (2 * Math.PI) * 1024 - person Adam Meyer; 14.06.2011
comment
Выше нужны радианы, а не градусы - person Adam Meyer; 14.06.2011

Вы можете найти соответствующие формулы в этой статье в Википедии: Проекция Меркатора.

person Howard    schedule 14.06.2011
comment
Итак, я попробовал это ... но, похоже, это не сработало. Я получаю неопределенные значения выше / ниже 60º pos.y = Math.log(Math.tan((Math.PI/ 4) + (lat/2))); - person Adam Meyer; 14.06.2011
comment
tan() ожидает аргумент в радианах. Умножьте угол на PI/180, чтобы преобразовать его соответственно. - person Howard; 14.06.2011
comment
Почувствуйте себя немного глупо, если не сделаете это раньше, но это все равно не работает. -90 дает бесконечное измерение. А 90 дает 37,33 pos.y = Math.log(Math.tan((Math.PI/ 4) + ( (lat * (Math.PI/180) ) /2))); - person Adam Meyer; 14.06.2011
comment
@Adam Да, это одно из неудачных свойств Меркатора. - person Howard; 14.06.2011