狂
狂迷
Unregistered / Unconfirmed
GUEST, unregistred user!
下面是一个跟据纬度计算座标的函数(分别有Delphi和C两个版本的实现代码),现在需要一个通过坐标和放大倍数反算纬度的函数(这个函数的反向函数)。我数学不行,不会写,请大家帮帮忙。Delphi 版代码: function GetY(Lat: Extended
Zoom: Integer): integer
var MaxLat, phi, Res, maxTileY: Extended
begin MaxLat := PI
if (lat > 90) then lat := lat - 180
if (lat < -90) then lat := lat + 180
// 角度转孤度 phi := PI * lat / 180
res := 0.5 * Ln((1 + Sin(phi)) / (1 - Sin(phi)))
maxTileY := Power(2, zoom)
result := Floor(((1 - res / maxlat) / 2) * (maxTileY))
end;C 版代码:double GetY(double Lat, int Zoom){ double MaxLat, phi, Res, maxTileY
int result
MaxLat = PI
if (lat > 90) lat = lat - 180
if (lat < -90) lat := lat + 180
// 角度转孤度 phi = PI * lat / 180
res = 0.5 * Log((1 + Sin(phi)) / (1 - Sin(phi)))
maxTileY = Pow(2, zoom)
result := (int)(((1 - res / maxlat) / 2) * (maxTileY))
return(result);}
Zoom: Integer): integer
var MaxLat, phi, Res, maxTileY: Extended
begin MaxLat := PI
if (lat > 90) then lat := lat - 180
if (lat < -90) then lat := lat + 180
// 角度转孤度 phi := PI * lat / 180
res := 0.5 * Ln((1 + Sin(phi)) / (1 - Sin(phi)))
maxTileY := Power(2, zoom)
result := Floor(((1 - res / maxlat) / 2) * (maxTileY))
end;C 版代码:double GetY(double Lat, int Zoom){ double MaxLat, phi, Res, maxTileY
int result
MaxLat = PI
if (lat > 90) lat = lat - 180
if (lat < -90) lat := lat + 180
// 角度转孤度 phi = PI * lat / 180
res = 0.5 * Log((1 + Sin(phi)) / (1 - Sin(phi)))
maxTileY = Pow(2, zoom)
result := (int)(((1 - res / maxlat) / 2) * (maxTileY))
return(result);}