簡體   English   中英

如何使用Leaflet API從緯度和經度坐標中檢索LayerPoint(X,Y)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM