Version 1.3.6: Fixed removing of OnViewportChanged handler in MapPanel and MapOverlay.

This commit is contained in:
ClemensF 2013-06-07 15:09:59 +02:00
parent 9ed0b04352
commit da651e3e32
15 changed files with 72 additions and 68 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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -388,17 +388,19 @@ namespace MapControl
} }
/// <summary> /// <summary>
/// Sets the value of the ZoomLevel property while retaining the specified origin point /// Sets the value of the TargetZoomLevel property while retaining the specified origin point
/// in viewport coordinates. /// in viewport coordinates.
/// </summary> /// </summary>
public void ZoomMap(Point origin, double zoomLevel) public void ZoomMap(Point origin, double zoomLevel)
{ {
SetTransformOrigin(origin);
var targetZoomLevel = TargetZoomLevel; var targetZoomLevel = TargetZoomLevel;
TargetZoomLevel = zoomLevel; TargetZoomLevel = zoomLevel;
if (TargetZoomLevel != targetZoomLevel) // TargetZoomLevel might be coerced if (TargetZoomLevel == targetZoomLevel) // TargetZoomLevel might be coerced
{ {
SetTransformOrigin(origin); ResetTransformOrigin();
} }
} }

View file

@ -32,7 +32,6 @@ namespace MapControl
private readonly DispatcherTimer updateTimer; private readonly DispatcherTimer updateTimer;
private string uriFormat; private string uriFormat;
private bool latLonBoundingBox;
private bool updateInProgress; private bool updateInProgress;
private int currentImageIndex; private int currentImageIndex;
@ -68,22 +67,16 @@ namespace MapControl
throw new ArgumentException("UriFormat must specify the requested image size by {X} and {Y}."); throw new ArgumentException("UriFormat must specify the requested image size by {X} and {Y}.");
} }
if (value.Contains("{w}") && value.Contains("{s}") && value.Contains("{e}") && value.Contains("{n}")) if (!(value.Contains("{W}") && value.Contains("{S}") && value.Contains("{E}") && value.Contains("{N}")) &&
!(value.Contains("{w}") && value.Contains("{s}") && value.Contains("{e}") && value.Contains("{n}")))
{ {
latLonBoundingBox = true; throw new ArgumentException("UriFormat must specify a bounding box in meters by {W},{S},{E},{N} or lat/lon by {w},{s},{e},{n}.");
}
else if (!(value.Contains("{W}") && value.Contains("{S}") && value.Contains("{E}") && value.Contains("{N}")))
{
throw new ArgumentException("UriFormat must specify a bounding box in meters by {W},{S},{E},{N} or as lat/lon by {w},{s},{e},{n}.");
} }
} }
uriFormat = value; uriFormat = value;
if (ParentMap != null) UpdateImage(this, EventArgs.Empty);
{
UpdateImage(this, EventArgs.Empty);
}
} }
} }
@ -103,15 +96,7 @@ namespace MapControl
{ {
var uri = uriFormat.Replace("{X}", width.ToString()).Replace("{Y}", height.ToString()); var uri = uriFormat.Replace("{X}", width.ToString()).Replace("{Y}", height.ToString());
if (latLonBoundingBox) if (uri.Contains("{W}") && uri.Contains("{S}") && uri.Contains("{E}") && uri.Contains("{N}"))
{
uri = uri.
Replace("{w}", west.ToString(CultureInfo.InvariantCulture)).
Replace("{s}", south.ToString(CultureInfo.InvariantCulture)).
Replace("{e}", east.ToString(CultureInfo.InvariantCulture)).
Replace("{n}", north.ToString(CultureInfo.InvariantCulture));
}
else
{ {
var p1 = ParentMap.MapTransform.Transform(new Location(south, west)); var p1 = ParentMap.MapTransform.Transform(new Location(south, west));
var p2 = ParentMap.MapTransform.Transform(new Location(north, east)); var p2 = ParentMap.MapTransform.Transform(new Location(north, east));
@ -123,6 +108,14 @@ namespace MapControl
Replace("{E}", (arc * p2.X).ToString(CultureInfo.InvariantCulture)). Replace("{E}", (arc * p2.X).ToString(CultureInfo.InvariantCulture)).
Replace("{N}", (arc * p2.Y).ToString(CultureInfo.InvariantCulture)); Replace("{N}", (arc * p2.Y).ToString(CultureInfo.InvariantCulture));
} }
else
{
uri = uri.
Replace("{w}", west.ToString(CultureInfo.InvariantCulture)).
Replace("{s}", south.ToString(CultureInfo.InvariantCulture)).
Replace("{e}", east.ToString(CultureInfo.InvariantCulture)).
Replace("{n}", north.ToString(CultureInfo.InvariantCulture));
}
try try
{ {
@ -156,7 +149,7 @@ namespace MapControl
private void UpdateImage(object sender, EventArgs e) private void UpdateImage(object sender, EventArgs e)
{ {
if (!updateInProgress) if (ParentMap != null && !updateInProgress)
{ {
updateTimer.Stop(); updateTimer.Stop();
updateInProgress = true; updateInProgress = true;
@ -179,10 +172,7 @@ namespace MapControl
var north = Math.Max(loc1.Latitude, Math.Max(loc2.Latitude, Math.Max(loc3.Latitude, loc4.Latitude))); var north = Math.Max(loc1.Latitude, Math.Max(loc2.Latitude, Math.Max(loc3.Latitude, loc4.Latitude)));
var image = GetImage(west, east, south, north, (int)width, (int)height); var image = GetImage(west, east, south, north, (int)width, (int)height);
if (image != null) Dispatcher.BeginInvoke((Action)(() => UpdateImage(west, east, south, north, image)));
{
Dispatcher.BeginInvoke((Action)(() => UpdateImage(west, east, south, north, image)));
}
updateInProgress = false; updateInProgress = false;
}); });

View file

@ -2,6 +2,7 @@
// Copyright © Clemens Fischer 2012-2013 // Copyright © Clemens Fischer 2012-2013
// Licensed under the Microsoft Public License (Ms-PL) // Licensed under the Microsoft Public License (Ms-PL)
using System;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media; using System.Windows.Media;
@ -170,14 +171,14 @@ namespace MapControl
{ {
if (parentMap != null) if (parentMap != null)
{ {
parentMap.ViewportChanged -= (o, e) => OnViewportChanged(); parentMap.ViewportChanged -= OnViewportChanged;
} }
parentMap = value; parentMap = value;
if (parentMap != null) if (parentMap != null)
{ {
parentMap.ViewportChanged += (o, e) => OnViewportChanged(); parentMap.ViewportChanged += OnViewportChanged;
OnViewportChanged(); OnViewportChanged();
} }
} }
@ -225,6 +226,11 @@ namespace MapControl
{ {
} }
private void OnViewportChanged(object sender, EventArgs e)
{
OnViewportChanged();
}
private void ForegroundChanged() private void ForegroundChanged()
{ {
if (Stroke == null) if (Stroke == null)

View file

@ -2,6 +2,7 @@
// Copyright © Clemens Fischer 2012-2013 // Copyright © Clemens Fischer 2012-2013
// Licensed under the Microsoft Public License (Ms-PL) // Licensed under the Microsoft Public License (Ms-PL)
using System;
#if NETFX_CORE #if NETFX_CORE
using Windows.Foundation; using Windows.Foundation;
using Windows.UI.Xaml; using Windows.UI.Xaml;
@ -57,32 +58,19 @@ namespace MapControl
{ {
if (parentMap != null && parentMap != this) if (parentMap != null && parentMap != this)
{ {
parentMap.ViewportChanged -= (o, e) => OnViewportChanged(); parentMap.ViewportChanged -= OnViewportChanged;
} }
parentMap = value; parentMap = value;
if (parentMap != null && parentMap != this) if (parentMap != null && parentMap != this)
{ {
parentMap.ViewportChanged += (o, e) => OnViewportChanged(); parentMap.ViewportChanged += OnViewportChanged;
OnViewportChanged(); OnViewportChanged();
} }
} }
} }
protected virtual void OnViewportChanged()
{
foreach (UIElement element in InternalChildren)
{
var location = GetLocation(element);
if (location != null)
{
SetViewportPosition(element, parentMap, location);
}
}
}
protected override Size MeasureOverride(Size availableSize) protected override Size MeasureOverride(Size availableSize)
{ {
foreach (UIElement element in InternalChildren) foreach (UIElement element in InternalChildren)
@ -110,6 +98,24 @@ namespace MapControl
return finalSize; return finalSize;
} }
protected virtual void OnViewportChanged()
{
foreach (UIElement element in InternalChildren)
{
var location = GetLocation(element);
if (location != null)
{
SetViewportPosition(element, parentMap, location);
}
}
}
private void OnViewportChanged(object sender, EventArgs e)
{
OnViewportChanged();
}
private static void ParentMapPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) private static void ParentMapPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{ {
var mapElement = obj as IMapElement; var mapElement = obj as IMapElement;

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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -45,10 +45,10 @@
<!--<map:TileLayer SourceName="OSM Local Files" Description="© {y} OpenStreetMap Contributors, CC-BY-SA" <!--<map:TileLayer SourceName="OSM Local Files" Description="© {y} OpenStreetMap Contributors, CC-BY-SA"
TileSource="file:///C:/ProgramData/MapControl/TileCache/OpenStreetMap/{z}/{x}/{y}.png"/>--> TileSource="file:///C:/ProgramData/MapControl/TileCache/OpenStreetMap/{z}/{x}/{y}.png"/>-->
</map:TileLayerCollection> </map:TileLayerCollection>
<CollectionViewSource x:Key="TileLayersView" Source="{StaticResource TileLayers}"/>
<local:LocationToVisibilityConverter x:Key="LocationToVisibilityConverter"/>
<map:TileLayer x:Key="SeamarksTileLayer" SourceName="Seamarks" Description="© {y} OpenSeaMap Contributors, CC-BY-SA" <map:TileLayer x:Key="SeamarksTileLayer" SourceName="Seamarks" Description="© {y} OpenSeaMap Contributors, CC-BY-SA"
TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png" MinZoomLevel="10" MaxZoomLevel="18"/> TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png" MinZoomLevel="10" MaxZoomLevel="18"/>
<CollectionViewSource x:Key="TileLayersViewSource" Source="{StaticResource TileLayers}"/>
<local:LocationToVisibilityConverter x:Key="LocationToVisibilityConverter"/>
<DataTemplate x:Key="PolylineItemTemplate"> <DataTemplate x:Key="PolylineItemTemplate">
<map:MapPolyline Locations="{Binding Locations}" Stroke="Red" StrokeThickness="3"/> <map:MapPolyline Locations="{Binding Locations}" Stroke="Red" StrokeThickness="3"/>
</DataTemplate> </DataTemplate>
@ -153,7 +153,7 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<map:Map Name="map" Margin="2" Center="53.5,8.2" ZoomLevel="11" MaxZoomLevel="20" <map:Map Name="map" Margin="2" Center="53.5,8.2" ZoomLevel="11" MaxZoomLevel="20"
TileLayer="{Binding Source={StaticResource TileLayersView}, Path=CurrentItem}" TileLayer="{Binding Source={StaticResource TileLayersViewSource}, Path=CurrentItem}"
MouseLeftButtonDown="MapMouseLeftButtonDown" MouseRightButtonDown="MapMouseRightButtonDown" MouseLeftButtonDown="MapMouseLeftButtonDown" MouseRightButtonDown="MapMouseRightButtonDown"
MouseMove="MapMouseMove" MouseLeave="MapMouseLeave" MouseMove="MapMouseMove" MouseLeave="MapMouseLeave"
ManipulationInertiaStarting="MapManipulationInertiaStarting"> ManipulationInertiaStarting="MapManipulationInertiaStarting">
@ -229,7 +229,7 @@
</StackPanel> </StackPanel>
<CheckBox ToolTip="Seamarks Overlay" Margin="7" VerticalAlignment="Bottom" Content="Seamarks" Click="SeamarksClick"/> <CheckBox ToolTip="Seamarks Overlay" Margin="7" VerticalAlignment="Bottom" Content="Seamarks" Click="SeamarksClick"/>
<ComboBox ToolTip="Tile Layer" Margin="5" VerticalAlignment="Bottom" DisplayMemberPath="SourceName" <ComboBox ToolTip="Tile Layer" Margin="5" VerticalAlignment="Bottom" DisplayMemberPath="SourceName"
SelectedIndex="0" ItemsSource="{Binding Source={StaticResource TileLayersView}}"/> SelectedIndex="0" ItemsSource="{Binding Source={StaticResource TileLayersViewSource}}"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>

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.3.5")] [assembly: AssemblyVersion("1.3.6")]
[assembly: AssemblyFileVersion("1.3.5")] [assembly: AssemblyFileVersion("1.3.6")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.18033 // Runtime Version:4.0.30319.18046
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.