Коэффициент масштабирования карты при преобразовании из Mercator в Equirectangular
Допустим, у меня есть карта в проекции Меркатора, и я знаю верхнюю и нижнюю широты:
topLatitude = 80; bottomLatitude = -55;
Я также знаю ширину и высоту карты:
ширина = 800; высота = 500;
Я хочу изменить масштаб карты до Равноугольной проекции, сохранив ту же ширину.
Как я могу рассчитать новую высоту карты?
1 ответ
Решение
Я придумал решение.
Это формула для расчета x и y проецируемой карты Меркатора:
Вот функция для y:
function degreesToRadians(degrees){
return degrees / 180 * Math.PI;
}
function mercatorLatitudeToY(latitude){
return Math.log(Math.tan(Math.PI / 4 + degreesToRadians(latitude) / 2));
}
Когда R=1, вы получите радианы. Поэтому я вычисляю y для верхней и нижней широт.
Затем я вычисляю те же радианы, если проекция равноугольная - мне просто нужно преобразовать верхнюю и нижнюю широту в радианы. И последнее - мне просто нужно найти соотношение сторон:
var scale = (mercatorLatitudeToY(topLatitude) - mercatorLatitudeToY(bottomLatitude))/ (degreesToRadians(topLatitude) - degreesToRadians(bottomLatitude));
Для карты без Антарктиды, соотношение сторон составляет ~1,5