2013-04-02 58 views
0

我試圖用一種算法來計算世界瓷磚的位點發現here朗/緯度到世界瓷磚:Y值始終爲NaN

我的問題:當我運行一個有效的長期功能,經緯度座標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

'Math.Log'正在調用一個負數,它給你'NaN'。 –

回答

1

這個錯誤來自Math.Log被稱爲一個負數,它給你的NaN。問題是latlong沒有有效值。從site you link

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

編輯:如果我的理解是正確的,我認爲你是在相反的順序給予lonlat。是不是WorldToTilePos(151.239000f,-33.752000f, 18)

+0

@JakeM所以這是命令? –

+0

沒有訂單是/是正確的。當我本應該通過弧度時,我正在通過學​​位。 –

0

Math.Log輸入值不能小於0,所以

Math.Log(x) = NaN // for x<0