Exemplo n.º 1
0
        private void SetRenderTransform()
        {
            var tileScale  = (double)(1 << TileGrid.ZoomLevel);
            var scale      = Math.Pow(2d, parentMap.ZoomLevel) / tileScale;
            var tileCenter = new Point(tileScale * (0.5 + parentMap.Center.Longitude / 360d),
                                       tileScale * (0.5 - WebMercatorProjection.LatitudeToY(parentMap.Center.Latitude) / 360d));
            var tileOrigin = new Point(MapProjection.TileSize * (tileCenter.X - TileGrid.XMin),
                                       MapProjection.TileSize * (tileCenter.Y - TileGrid.YMin));
            var viewCenter = new Point(parentMap.RenderSize.Width / 2d, parentMap.RenderSize.Height / 2d);

            ((MatrixTransform)RenderTransform).Matrix =
                MapProjection.CreateTransformMatrix(tileOrigin, scale, parentMap.Heading, viewCenter);
        }
Exemplo n.º 2
0
        private TileGrid GetTileGrid()
        {
            var tileZoomLevel = Math.Max(0, (int)Math.Round(parentMap.ZoomLevel + ZoomLevelOffset));
            var tileScale     = (double)(1 << tileZoomLevel);
            var scale         = tileScale / (Math.Pow(2d, parentMap.ZoomLevel) * MapProjection.TileSize);
            var tileCenter    = new Point(tileScale * (0.5 + parentMap.Center.Longitude / 360d),
                                          tileScale * (0.5 - WebMercatorProjection.LatitudeToY(parentMap.Center.Latitude) / 360d));
            var viewCenter = new Point(parentMap.RenderSize.Width / 2d, parentMap.RenderSize.Height / 2d);

            var transform = new MatrixTransform
            {
                Matrix = MapProjection.CreateTransformMatrix(viewCenter, scale, -parentMap.Heading, tileCenter)
            };

            var bounds = transform.TransformBounds(new Rect(0d, 0d, parentMap.RenderSize.Width, parentMap.RenderSize.Height));

            return(new TileGrid(tileZoomLevel,
                                (int)Math.Floor(bounds.X), (int)Math.Floor(bounds.Y),
                                (int)Math.Floor(bounds.X + bounds.Width), (int)Math.Floor(bounds.Y + bounds.Height)));
        }