如何使用Leaflet API从纬度和经度坐标中检索LayerPoint(X,Y)

fuz*_*uzz 12 javascript dictionary openstreetmap geojson leaflet

如果我使用以下代码LayerPoint从指定的Lat/Lng获取:

var latLng = new L.latLng(-37.81303878836989, 144.97421264648438);
var point = map.latLngToLayerPoint(latLng);
Run Code Online (Sandbox Code Playgroud)

输出如下:

o.Point
  x: 86042
  y: 77065
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试使用以下URL访问图层磁贴时:

http://a.tile.osm.org/10/86042/77065.png

我得到404因为它是无效的X,Y.

现在,如果我使用以下代码:

map.on("click", function (e) {
    console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

我可以LayerPoint在纬度和经度旁边检索控制台.

latlng: o.LatLng
  lat: -37.81303878836989
  lng: 144.97421264648438
layerPoint: o.Point
  x: 950
  y: 303
Run Code Online (Sandbox Code Playgroud)

然后访问以下URL返回此图层磁贴:

http://a.tile.osm.org/10/950/303.png

在此输入图像描述

问题是,它甚至看起来不是那个纬度经度的正确磁贴,也不是我的原始代码将lat lng转换为LayerPoint实际上首先返回一个有效的X,Y.

我很困惑为什么我得到这些结果.任何帮助将不胜感激.也许我做错了什么.

我不确定是否有另一种基于纬度和经度列表检索切片图层的方法?

我之后的原因是因为我希望能够为离线应用程序使用缓存的磁贴数据,而我所拥有的唯一数据是通过为客户端应用程序生成的GeoJSON有效负载的几何/坐标.

更新:

结束这个功能(感谢@scai).

根据这个链接.

var getSlippyTileLayerPoints = function (lat_deg, lng_deg, zoom) {
    var x = (Math.floor((lng_deg + 180) / 360 * Math.pow(2, zoom)));
    var y = (Math.floor((1 - Math.log(Math.tan(lat_deg * Math.PI / 180) + 1 / Math.cos(lat_deg * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));

    var layerPoint = {
        x: x,
        y: y
    };

    return layerPoint;
};
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

Object {x: 924, y: 628}
Run Code Online (Sandbox Code Playgroud)

http://a.tile.osm.org/10/924/628.png

在此输入图像描述

更新2:

经过进一步研究,结果证明我所追求的是以下功能:

var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);
Run Code Online (Sandbox Code Playgroud)

fuz*_*uzz 9

经过进一步研究,结果证明我所追求的是以下功能:

var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);
Run Code Online (Sandbox Code Playgroud)