C#(SuperCluster Mapbox)中纬度和归一化墨卡托 y 坐标之间逆向坐标转换的精度问题

问题描述 投票:0回答:0

我实现了两个函数

LatY
YLat
将给定的 latitude 值转换为归一化的 Mercator y 坐标 值,反之亦然。
LatY
函数使用以下公式:

double LatY(double lat)
{
    var sin = Math.Sin(lat * Math.PI / 180);
    
    var y = 0.5 - 0.25 * Math.Log((1 + sin) / (1 - sin)) / Math.PI;

    return y;
}

YLat
函数使用以下公式:

double YLat(double y)
{
    var exp = -(Math.PI / 0.25) * (y - 0.5);

    var antiLog = Math.Pow(10, exp);

    var sin = (antiLog - 1) / (antiLog + 1);

    var lat2 = Math.Asin(sin) * (180 / Math.PI);
    return lat2;
}

但是,当我通过使用 LatY 将纬度值转换为 y 然后使用 YLat 返回纬度来测试函数时,结果与原始纬度值不同。例如:

var y = LatY(-112.484379);
var lat = YLat(y);

lat
的期望值应该是
-112.484379
,但是计算值是
-87.22371494918505

我怀疑精度问题可能导致了这个问题,但我不确定如何解决它。任何人都可以就可能导致此问题的原因以及如何解决它提供一些见解吗?

我期望计算出的纬度值与原始纬度值相同。然而,结果并不如预期,预期值与实际值存在显着差异。

注意: 我也在 JavaScript 中尝试过,但遇到了同样的问题。

c# math geometry mercator supercluster
© www.soinside.com 2019 - 2024. All rights reserved.