2012-11-22 21:42:29 +01:00
|
|
|
|
// XAML Map Control - http://xamlmapcontrol.codeplex.com/
|
2014-01-10 20:11:39 +01:00
|
|
|
|
// Copyright © 2014 Clemens Fischer
|
2012-11-22 21:42:29 +01:00
|
|
|
|
// Licensed under the Microsoft Public License (Ms-PL)
|
|
|
|
|
|
|
2013-05-13 23:49:48 +02:00
|
|
|
|
using System;
|
2014-10-29 18:22:50 +01:00
|
|
|
|
using System.Windows;
|
2012-11-22 21:42:29 +01:00
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
|
|
|
|
|
|
|
namespace MapControl
|
|
|
|
|
|
{
|
2014-07-01 18:57:44 +02:00
|
|
|
|
internal partial class TileContainer
|
2012-11-22 21:42:29 +01:00
|
|
|
|
{
|
2014-10-19 21:50:23 +02:00
|
|
|
|
private Matrix GetTileIndexMatrix(double scale)
|
2012-11-22 21:42:29 +01:00
|
|
|
|
{
|
|
|
|
|
|
var transform = ViewportTransform.Matrix;
|
|
|
|
|
|
transform.Invert(); // view to map coordinates
|
|
|
|
|
|
transform.Translate(180d, -180d);
|
2013-05-13 23:49:48 +02:00
|
|
|
|
transform.Scale(scale, -scale); // map coordinates to tile indices
|
|
|
|
|
|
|
2012-11-22 21:42:29 +01:00
|
|
|
|
return transform;
|
|
|
|
|
|
}
|
2014-07-01 18:57:44 +02:00
|
|
|
|
|
2014-10-29 18:22:50 +01:00
|
|
|
|
private void UpdateViewportTransform(double scale, Point mapOrigin)
|
2014-07-09 21:27:28 +02:00
|
|
|
|
{
|
2014-10-30 16:27:36 +01:00
|
|
|
|
var transform = Matrix.Identity;
|
|
|
|
|
|
transform.Translate(-mapOrigin.X, -mapOrigin.Y);
|
2014-10-29 18:22:50 +01:00
|
|
|
|
transform.Scale(scale, -scale);
|
|
|
|
|
|
transform.Rotate(rotation);
|
|
|
|
|
|
transform.Translate(viewportOrigin.X, viewportOrigin.Y);
|
2014-07-09 21:27:28 +02:00
|
|
|
|
|
|
|
|
|
|
ViewportTransform.Matrix = transform;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-07-01 18:57:44 +02:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Sets a RenderTransform with origin at tileGrid.X and tileGrid.Y to minimize rounding errors.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void UpdateRenderTransform()
|
|
|
|
|
|
{
|
|
|
|
|
|
var scale = Math.Pow(2d, zoomLevel - tileZoomLevel);
|
2014-10-30 16:27:36 +01:00
|
|
|
|
var transform = Matrix.Identity;
|
|
|
|
|
|
transform.Translate(tileGrid.X * TileSource.TileSize, tileGrid.Y * TileSource.TileSize);
|
2014-07-01 18:57:44 +02:00
|
|
|
|
transform.Scale(scale, scale);
|
|
|
|
|
|
transform.Translate(tileLayerOffset.X, tileLayerOffset.Y);
|
|
|
|
|
|
transform.RotateAt(rotation, viewportOrigin.X, viewportOrigin.Y);
|
|
|
|
|
|
|
|
|
|
|
|
((MatrixTransform)RenderTransform).Matrix = transform;
|
|
|
|
|
|
}
|
2012-11-22 21:42:29 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|