2016-12-06 23 views
4

對於畫布圖層,如何訪問特定瓷磚的單擊像素?給定像{ lat: 37.68816, lng: -119.76196 }那樣的LatLng,我該如何:#1,檢索點擊的正確拼貼,以及#2,拼貼內的像素座標?這兩個都應該考慮maxNativeZoom項目小冊子LatLng以瓷磚像素座標

回答

5

需要像L.CRS.EPSG3857這樣的CRS。地圖的CRS可通過map.options.crs訪問。真正的變焦,平鋪尺寸(像256,但也可以是約512 maxNativeZoom或更高),並且需要的像素原點像map.getPixelOrigin()

const latlngToTilePixel = (latlng, crs, zoom, tileSize, pixelOrigin) => { 
    const layerPoint = crs.latLngToPoint(latlng, zoom).floor() 
    const tile = layerPoint.divideBy(tileSize).floor() 
    const tileCorner = tile.multiplyBy(tileSize).subtract(pixelOrigin) 
    const tilePixel = layerPoint.subtract(pixelOrigin).subtract(tileCorner) 

    return [tile, tilePixel] 
} 

首先,轉換latlng到的層點。現在所有單位都以像素爲單位。

二,除以tileSize並舍入。這給出了瓦片「滑動」的座標。

第三,乘以tileSize得到瓷磚角落的像素座標,調整爲pixelOrigin

最後,要獲取瓦片像素,從原點和瓦片角落減去圖層點。

+0

此外,請閱讀Leaflet教程,特別是關於[擴展Leaflet以創建新圖層](http://leafletjs.com/examples/extending/extending-2-layers.html)的教程。這裏對像素座標和像素原點的概念進行了詳細解釋。 – IvanSanchez