我try 将lat/long转换为XYZ平铺,然后再次使用XYZ值try 恢复lat/long.lat/long的值不同(原始值和转换值).我参考了https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#C.23,得到了换算公式.
以下代码供您参考:
从横向/纵向转换为XYZ:
var x = (int)Math.Floor((longitude + 180.0) / 360.0 * Math.Pow(2, zoom));
var y = (int)Math.Floor((1 - Math.Log(Math.Tan((Math.PI / 180) * latitude) + 1 / Math.Cos((Math.PI / 180) * latitude)) / Math.PI) / 2 * Math.Pow(2, zoom));
从XYZ转换为横向/纵向:
var longitude = x / Math.Pow(2, z) * 360 - 180;
var n = Math.PI - 2 * Math.PI * y / Math.Pow(2, z);
var latitude = 180 / Math.PI * Math.Atan(0.5 * (Math.Exp(n) - Math.Exp(-n)));
当我经过纬度=477.42187500000006,经度=37.3002752813443,zoom =15,然后我得到x=19779和y=-2147483648.
但当我通过x=19779,y=-2147483648,z=15时,我得到的纬度=90.0,经度=37.298583984375,这是错误的.
我不知道为什么第二次转换给出了错误的结果.非常感谢您的帮助.