如果我使用以下代码从指定的Lat / Lng获取LayerPoint:
var latLng = new L.latLng(-37.81303878836989,144.97421264648438); var point = map.latLngToLayerPoint(latLng);
输出如下:
o.Point x: 86042 y: 77065
然后当我尝试使用以下URL访问图层图层:
http://a.tile.osm.org/10/86042/77065.png
我得到一个404,因为它是一个无效的X,Y
现在,如果我使用以下代码:
map.on("click",function (e) { console.log(e); });
我可以在控制台中沿纬度和经度检索LayerPoint.
latlng: o.LatLng lat: -37.81303878836989 lng: 144.97421264648438 layerPoint: o.Point x: 950 y: 303
然后访问以下URL将返回此图层:
http://a.tile.osm.org/10/950/303.png
问题在于,它似乎并不是纬度经度的正确拼图,也不是我的原始代码将lat lng转换为LayerPoint实际上返回一个有效的X,Y.
我很困惑,为什么我得到这些结果.任何帮助将不胜感激.也许我在做错事.
我不知道是否有另一种方法根据纬度和经度列表来检索图层图层?
之后我的原因是因为我想要使用缓存的瓦片数据进行脱机应用程序,唯一的数据是通过为客户端应用程序生成的geoJSON有效载荷的几何/坐标.
更新:
根据this link.
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; };
OUTPUT:
Object {x: 924,y: 628}
http://a.tile.osm.org/10/924/628.png
更新2:
经过进一步的研究,事实证明,我以后是以下功能:
var layerPoint = map.project(latlng).divideBy(256).floor(); console.log(layerPoint.x,layerPoint.y);
解决方法
经过进一步的研究,我以后是以下功能:
var layerPoint = map.project(latlng).divideBy(256).floor(); console.log(layerPoint.x,layerPoint.y);