我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相关问答推荐

ASP.NET MVC项目中的产品采购并发性测试

在 ASP.NET 中访问没有值的查询字符串参数

在哪里可以记录 ASP.NET Core 应用程序的启动/停止/错误事件?

Window.Open 使用 PDF 流而不是 PDF 位置

HttpContext.Cache 过期

如何使用 ASP.NET Identity 创建用户并获取新创建的 ID

不支持关键字:服务器

Request.Params 和 Request.Form 什么时候不同?

无法使用单例Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor中的范围服务MyDbContext

ASP.NET vNext 与主机无关,这意味着什么?

在 asp.net 中为动态 PDF 指定文件名

无法共同创建探查器错误 - 但未使用探查器

ASP.NET Core 中的 NuGet 包位置在哪里?

Cache.Add 绝对过期 - 是否基于 UTC?

ASP.NET 身份提供程序 SignInManager 不断返回失败

主机与 DnsSafeHost

为什么 Controls 集合不提供所有 IEnumerable 方法?

~/ 等价于 javascript

配置授权服务器端点

如何将 DataTable 转换为类 Object?