4
對於畫布圖層,如何訪問特定瓷磚的單擊像素?給定像{ lat: 37.68816, lng: -119.76196 }
那樣的LatLng,我該如何:#1,檢索點擊的正確拼貼,以及#2,拼貼內的像素座標?這兩個都應該考慮maxNativeZoom
。項目小冊子LatLng以瓷磚像素座標
對於畫布圖層,如何訪問特定瓷磚的單擊像素?給定像{ lat: 37.68816, lng: -119.76196 }
那樣的LatLng,我該如何:#1,檢索點擊的正確拼貼,以及#2,拼貼內的像素座標?這兩個都應該考慮maxNativeZoom
。項目小冊子LatLng以瓷磚像素座標
需要像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
。
最後,要獲取瓦片像素,從原點和瓦片角落減去圖層點。
此外,請閱讀Leaflet教程,特別是關於[擴展Leaflet以創建新圖層](http://leafletjs.com/examples/extending/extending-2-layers.html)的教程。這裏對像素座標和像素原點的概念進行了詳細解釋。 – IvanSanchez