如果我使用下面的代碼從指定緯度/經度得到LayerPoint
:如何從緯度檢索LayerPoint(X,Y),並使用單張API經度座標
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
然後訪問以下網址返回此層瓦片:
http://a.tile.osm.org/10/950/303.png
的問題是,它甚至不似乎是爲經緯度正確的瓷磚我的原始代碼也不會將經緯度轉換爲LayerPoint
,但實際上首先會返回有效的X,Y。
我很困惑,爲什麼我得到這些結果。任何幫助將不勝感激。也許我做錯了什麼。
我不確定是否有另一種基於緯度和經度列表檢索瓦片圖層的方法?
之所以我之所以這樣做,是因爲我希望能夠爲離線應用程序使用緩存切片數據,並且我擁有的唯一數據是通過爲客戶端生成的geoJSON有效內容的幾何/座標應用。
UPDATE:
結束了此功能會(感謝@scai)。
根據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);