[英]How to retrieve LayerPoint (X, Y) from Latitude and Longitude coordinates using Leaflet API
如果我使用以下代碼從指定的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
問題是它甚至看起來不是那個緯度經度的正確LayerPoint
貼,我的原始代碼將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;
};
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);
OSM的磁貼URL基於不同的方案。 您應該在OSM wiki中閱讀有關slippy地圖圖塊名稱的信息。 它包含lon / lat到tile數字的實現,反之亦然,適用於各種編程/腳本語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.