2016-12-06 7 views
4

キャンバスレイヤーでは、特定のタイルのクリックされたピクセルにどのようにアクセスできますか? { lat: 37.68816, lng: -119.76196 }のようなLatLngが与えられた場合、どのようにすればいいですか:#1、正しいタイルをクリックして取り出し、#2、タイル内のピクセル座標を取得できますか?これらの両方とも、maxNativeZoomを考慮する必要があります。プロジェクトリーフレットLatLngをピクセル座標に変換する

答えて

5

L.CRS.EPSG3857のようなCRSが必要です。地図のCRSはmap.options.crsでアクセスできます。真ズーム、タイルサイズ(256のような、しかしmaxNativeZoom約512以上とすることができる)と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で割り、小数点以下を切り捨てます。これは、タイル "滑りやすい"座標を与える。

第3に、tileSizeを掛けて、タイルコーナーのピクセル座標を取得し、pixelOriginに調整します。

最後に、タイルピクセルを取得するには、原点とタイルコーナーからレイヤーポイントを減算します。

+0

リーフレットのチュートリアル、特に「リーフレットを拡張して新しいレイヤーを作成する」(http://leafletjs.com/examples/extending/extending-2-layers.html)のチュートリアルを読んでください。そこにはピクセル座標とピクセル原点の概念が長さで説明されています。 – IvanSanchez

関連する問題