我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,这是错误的.

我不知道为什么第二次转换给出了错误的结果.非常感谢您的帮助.

推荐答案

根据定义,纬度在-90(南极)到90(北极)之间.

所以你从无效的-477.421875开始,结果可以是任意的.

经度是正确的.它与原始的略有不同,这是预期的,因为您将x截断为最接近的整数.如果想要相同的值,不要舍入为整数.

Asp.net相关问答推荐

.Net Framework:w3wp.exe 中的异常

从数据库中检索数据的最快方法

静态字段与会话变量

如何使用文件上传控件 Select 多个文件?

RestSharp 不反序列化 JSON 对象列表,始终为 Null

什么相当于 ASP.NET 中的 cron 作业(job)?

使用 ASP.NET WebForms 的 jQuery DataTables 服务器端处理

我需要更改什么以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

IIS 6.0 通配符映射基准?

获取页面上特定类型的所有 Web 控件

如何在 ASP.NET 页面中以编程方式生成 401 错误

使用 Moq 验证活动注册

根据 DropDownList 的值动态启用或禁用RequiredFieldValidator

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

System.Reflection.Assembly.LoadFile 锁定文件

ASP.NET MVC 路由的无限 URL 参数

在.net的内存数据库中

DataTable 不包含 AsEnumerable 的定义

使用 jQuery 从 asp:RadioButtonList 读取选定的值

Unity 中的单例每个调用上下文(Web 请求)