从 Mercator 转换为 Equirectangular 时的地图比例因子
Map scale factor when converting from Mercator to Equirectangular
假设我有一张墨卡托投影的地图,并且我知道最高和最低纬度:
topLatitude = 80; bottomLatitude = -55;
我也知道地图的宽度和高度:
宽度=800;高度 = 500;
我想将地图重新缩放为等距柱状投影,并保持相同的宽度。
如何计算地图的新高度?
我想出了一个解决办法。
这是计算墨卡托投影地图的 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。
接下来,如果投影是 Equirectangular,我将计算相同的弧度 - 我只需要将顶部和底部的纬度转换为弧度。最后一件事 - 我只需要找到差异的纵横比:
var scale = (mercatorLatitudeToY(topLatitude) - mercatorLatitudeToY(bottomLatitude))/ (degreesToRadians(topLatitude) - degreesToRadians(bottomLatitude));
对于没有南极洲的地图,纵横比约为 1.5
假设我有一张墨卡托投影的地图,并且我知道最高和最低纬度:
topLatitude = 80; bottomLatitude = -55;
我也知道地图的宽度和高度:
宽度=800;高度 = 500;
我想将地图重新缩放为等距柱状投影,并保持相同的宽度。
如何计算地图的新高度?
我想出了一个解决办法。
这是计算墨卡托投影地图的 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。
接下来,如果投影是 Equirectangular,我将计算相同的弧度 - 我只需要将顶部和底部的纬度转换为弧度。最后一件事 - 我只需要找到差异的纵横比:
var scale = (mercatorLatitudeToY(topLatitude) - mercatorLatitudeToY(bottomLatitude))/ (degreesToRadians(topLatitude) - degreesToRadians(bottomLatitude));
对于没有南极洲的地图,纵横比约为 1.5