private bool SetTileMatrix() { var tileMatrixZoomLevel = (int)Math.Floor(ParentMap.ZoomLevel + 0.001); // avoid rounding issues var tileMatrixScale = ViewTransform.ZoomLevelToScale(tileMatrixZoomLevel); // bounds in tile pixels from view size // var bounds = ParentMap.ViewTransform.GetTileMatrixBounds(tileMatrixScale, MapTopLeft, ParentMap.RenderSize); // tile column and row index bounds // var xMin = (int)Math.Floor(bounds.X / TileSize); var yMin = (int)Math.Floor(bounds.Y / TileSize); var xMax = (int)Math.Floor((bounds.X + bounds.Width) / TileSize); var yMax = (int)Math.Floor((bounds.Y + bounds.Height) / TileSize); if (TileMatrix != null && TileMatrix.ZoomLevel == tileMatrixZoomLevel && TileMatrix.XMin == xMin && TileMatrix.YMin == yMin && TileMatrix.XMax == xMax && TileMatrix.YMax == yMax) { return(false); } TileMatrix = new TileMatrix(tileMatrixZoomLevel, xMin, yMin, xMax, yMax); return(true); }
protected override void SetRenderTransform() { // tile matrix origin in pixels // var tileMatrixOrigin = new Point(TileSize * TileMatrix.XMin, TileSize * TileMatrix.YMin); var tileMatrixScale = ViewTransform.ZoomLevelToScale(TileMatrix.ZoomLevel); ((MatrixTransform)RenderTransform).Matrix = ParentMap.ViewTransform.GetTileLayerTransform(tileMatrixScale, MapTopLeft, tileMatrixOrigin); }