Version 1.10.1: Fixed MapBase.TranslateMap and TileContainer.SetViewportTransform.

This commit is contained in:
ClemensF 2013-11-22 18:46:45 +01:00
parent f11c71799f
commit 11934a121a
11 changed files with 48 additions and 53 deletions

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -344,21 +344,17 @@ namespace MapControl
/// Changes the Center property according to the specified translation in viewport coordinates. /// Changes the Center property according to the specified translation in viewport coordinates.
/// </summary> /// </summary>
public void TranslateMap(Point translation) public void TranslateMap(Point translation)
{
if (translation.X != 0d || translation.Y != 0d)
{ {
if (transformOrigin != null) if (transformOrigin != null)
{ {
viewportOrigin.X += translation.X; ResetTransformOrigin();
viewportOrigin.Y += translation.Y;
UpdateTransform();
} }
else
if (translation.X != 0d || translation.Y != 0d)
{ {
Center = ViewportPointToLocation(new Point(viewportOrigin.X - translation.X, viewportOrigin.Y - translation.Y)); Center = ViewportPointToLocation(new Point(viewportOrigin.X - translation.X, viewportOrigin.Y - translation.Y));
} }
} }
}
/// <summary> /// <summary>
/// Changes the Center, Heading and ZoomLevel properties according to the specified /// Changes the Center, Heading and ZoomLevel properties according to the specified
@ -386,8 +382,7 @@ namespace MapControl
InternalSetValue(TargetZoomLevelProperty, zoomLevel); InternalSetValue(TargetZoomLevelProperty, zoomLevel);
} }
UpdateTransform(); UpdateTransform(true);
ResetTransformOrigin();
} }
/// <summary> /// <summary>
@ -577,18 +572,16 @@ namespace MapControl
center = new Location(); center = new Location();
InternalSetValue(property, center); InternalSetValue(property, center);
} }
else else if (center.Longitude < -180d || center.Longitude > 180d ||
center.Latitude < -mapTransform.MaxLatitude || center.Latitude > mapTransform.MaxLatitude)
{ {
var latitude = Math.Min(Math.Max(center.Latitude, -mapTransform.MaxLatitude), mapTransform.MaxLatitude); center = new Location(
var longitude = Location.NormalizeLongitude(center.Longitude); Math.Min(Math.Max(center.Latitude, -mapTransform.MaxLatitude), mapTransform.MaxLatitude),
Location.NormalizeLongitude(center.Longitude));
if (center.Latitude != latitude || center.Longitude != longitude)
{
center = new Location(latitude, longitude);
InternalSetValue(property, center); InternalSetValue(property, center);
} }
} }
}
private void CenterPropertyChanged(Location center) private void CenterPropertyChanged(Location center)
{ {
@ -750,8 +743,7 @@ namespace MapControl
InternalSetValue(ZoomLevelProperty, TargetZoomLevel); InternalSetValue(ZoomLevelProperty, TargetZoomLevel);
RemoveAnimation(ZoomLevelProperty); // remove holding animation in WPF RemoveAnimation(ZoomLevelProperty); // remove holding animation in WPF
UpdateTransform(); UpdateTransform(true);
ResetTransformOrigin();
} }
} }
@ -830,7 +822,7 @@ namespace MapControl
} }
} }
private void UpdateTransform() private void UpdateTransform(bool resetTransformOrigin = false)
{ {
var center = Center; var center = Center;
var scale = SetViewportTransform(transformOrigin ?? center); var scale = SetViewportTransform(transformOrigin ?? center);
@ -838,9 +830,13 @@ namespace MapControl
if (transformOrigin != null) if (transformOrigin != null)
{ {
center = ViewportPointToLocation(new Point(RenderSize.Width / 2d, RenderSize.Height / 2d)); center = ViewportPointToLocation(new Point(RenderSize.Width / 2d, RenderSize.Height / 2d));
center.Longitude = Location.NormalizeLongitude(center.Longitude);
var latitude = center.Latitude; if (center.Latitude < -mapTransform.MaxLatitude || center.Latitude > mapTransform.MaxLatitude)
center.Latitude = Math.Min(Math.Max(latitude, -mapTransform.MaxLatitude), mapTransform.MaxLatitude); {
center.Latitude = Math.Min(Math.Max(center.Latitude, -mapTransform.MaxLatitude), mapTransform.MaxLatitude);
resetTransformOrigin = true;
}
InternalSetValue(CenterProperty, center); InternalSetValue(CenterProperty, center);
@ -850,7 +846,7 @@ namespace MapControl
InternalSetValue(CenterPointProperty, MapTransform.Transform(center)); InternalSetValue(CenterPointProperty, MapTransform.Transform(center));
} }
if (center.Latitude != latitude) if (resetTransformOrigin)
{ {
ResetTransformOrigin(); ResetTransformOrigin();
scale = SetViewportTransform(center); scale = SetViewportTransform(center);

View file

@ -15,8 +15,8 @@ using System.Windows;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -98,19 +98,11 @@ namespace MapControl
var transformOffsetX = viewportOrigin.X - mapOrigin.X * scale; var transformOffsetX = viewportOrigin.X - mapOrigin.X * scale;
var transformOffsetY = viewportOrigin.Y + mapOrigin.Y * scale; var transformOffsetY = viewportOrigin.Y + mapOrigin.Y * scale;
ViewportTransform.Matrix = GetViewportTransformMatrix(scale, transformOffsetX, transformOffsetY);
tileLayerOffset.X = transformOffsetX - 180d * scale; tileLayerOffset.X = transformOffsetX - 180d * scale;
tileLayerOffset.Y = transformOffsetY - 180d * scale; tileLayerOffset.Y = transformOffsetY - 180d * scale;
ViewportTransform.Matrix = GetViewportTransformMatrix(scale, transformOffsetX, transformOffsetY);
if (Math.Abs(mapOrigin.X - oldMapOriginX) > 180d)
{
// immediately handle map origin leap when map center moves across 180° longitude
UpdateTiles(this, EventArgs.Empty);
}
else
{
var tileLayerTransform = GetTileLayerTransformMatrix(); var tileLayerTransform = GetTileLayerTransformMatrix();
foreach (TileLayer tileLayer in Children) foreach (TileLayer tileLayer in Children)
@ -118,6 +110,13 @@ namespace MapControl
tileLayer.SetTransformMatrix(tileLayerTransform); tileLayer.SetTransformMatrix(tileLayerTransform);
} }
if (Math.Abs(mapOrigin.X - oldMapOriginX) > 180d)
{
// immediately handle map origin leap when map center moves across 180° longitude
UpdateTiles(this, EventArgs.Empty);
}
else
{
updateTimer.Start(); updateTimer.Start();
} }

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")] [assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")] [assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1.10.0")] [assembly: AssemblyVersion("1.10.1")]
[assembly: AssemblyFileVersion("1.10.0")] [assembly: AssemblyFileVersion("1.10.1")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]