如何通过单击Leaflet map获取tile的XYZ坐标

 手机用户2502923697 发布于 2023-01-29 18:59

我想请求帮助来处理地图Leaflet上可能使用的非标准坐标.

我想使用Leaflet用我自己的tile生成器显示自定义地图.通过脚本动态生成平铺,具体取决于计划显示的位置(对脚本的URL请求中的参数{x},{y},{z})地图将可缩放(从0到10),大小在最大变焦范围内~16000*16000个瓷砖,最少16*16个瓷砖)它将显示各种对象,每个对象在一个单独的图块中.每个64*64像素的图块是地图上的对象.对于每个对象(方形图块),我想通过AJAX请求向服务器发送鼠标单击信息.我不想为了优化目标预先加载有关所有对象的所有信息.我的主要问题 - 我无法理解如何正确获取鼠标点击的图块的XYЯ坐标.基本上因为从服务器加载每个tile时绑定到网格{x},{y},{z},所以我想从点击中获取这些{x},{y},{z}映射并发送它们以获取有关该对象的信息的进一步AJAX请求.现在可以将点击点作为Latlng坐标或坐标相对于地图的左上角以像素为单位,我无法引用切片网格.

而且我想知道获得相对于瓷砖的点击坐标的可能性.例如,如果图块的尺寸为64*64,并且单击位于图块的中心,那么如何获得点击[32,32]的相对坐标?因为如果我们知道了瓷砖的{X},{Y},{Z}坐标以及瓷砖内部点击的相对X*和Y*坐标,那么我们就可以做"通用替代坐标网格".

可能这不是问题而且可以轻松解决,但我从未使用任何Maps API,因此我想知道这个问题的答案.

在此先感谢您的帮助!

1 个回答
  • 下面是获取点击图块的缩放,X和Y坐标的一个工作示例(使用openstreet地图):http://jsfiddle.net/84P9r/

    function getTileURL(lat, lon, zoom) {
        var xtile = parseInt(Math.floor( (lon + 180) / 360 * (1<<zoom) ));
        var ytile = parseInt(Math.floor( (1 - Math.log(Math.tan(lat.toRad()) + 1 / Math.cos(lat.toRad())) / Math.PI) / 2 * (1<<zoom) ));
        return "" + zoom + "/" + xtile + "/" + ytile;
    }
    

    根据答案/sf/ask/17360801/

    2023-01-29 19:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有