2016-12-06 45 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