长/晚到世界贴图:y值总是NaN

本文关键字:NaN 世界 | 更新日期: 2023-09-27 18:07:10

我正在尝试使用这里找到的算法计算世界平铺位置

我的问题:当我用有效的长,晚坐标运行函数时,y值始终是NAN。出了什么问题?

长而低的坐标为:-33.752000f, 151.239000f,这是澳大利亚的有效位置。

你知道怎么回事吗?

static public Vector2 WorldToTilePos(double lon, double lat, int zoom)
{
    Vector2 p = new Vector2();
    p.x = (float)((lon + 180.0) / 360.0 * (1 << zoom));
    p.y = (float)((1.0 - Math.Log(Math.Tan(lat * Math.PI / 180.0) + 
        1.0 / Math.Cos(lat * Math.PI / 180.0)) / Math.PI) / 2.0 * (1 << zoom));
    Debug.Log (String.Format ("p.y: {0}, lat: {1}", p.y, lat));
    // Always outputs: "p.y: NaN, lat: 151.238998413086"
    return p;
}
// Usuage
Vector2 pos = WorldToTilePos(-33.752000f, 151.239000f, 18);

长/晚到世界贴图:y值总是NaN

这个错误来自于使用负数调用Math.Log,这给了您NaN。问题是latlong没有有效值。从您的网站链接:

- x = lon
- y = arsinh(lat) = log[tan(lat) + sec(lat)]
  (lat and lon are in radians)

EDIT:如果我理解对了,我认为你把lonlat颠倒了。不是WorldToTilePos(151.239000f,-33.752000f, 18)吗?

Math.Log的输入值不能小于0。所以

Math.Log(x) = NaN   // for x<0
相关文章: