我正在尝试使用找到的here
算法计算世界到平铺位置我的问题:当我使用有效的long,lat坐标运行函数时,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);
答案 0 :(得分:1)
错误来自Math.Log
使用负数调用,它会为您提供NaN
。问题是lat
和long
没有有效值。来自site you link:
- x = lon
- y = arsinh(lat) = log[tan(lat) + sec(lat)]
(lat and lon are in radians)
编辑:如果我理解正确,我认为您以相反的顺序提供lon
和lat
。不是WorldToTilePos(151.239000f,-33.752000f, 18)
吗?
答案 1 :(得分:0)
Math.Log
的输入值不能小于0.所以
Math.Log(x) = NaN // for x<0