Version 5.0: Separated map projection and view transform.

This commit is contained in:
ClemensF 2020-03-26 19:08:20 +01:00
parent 53723844a0
commit c7cb2efcdb
47 changed files with 401 additions and 382 deletions

View file

@ -45,10 +45,6 @@ namespace MapControl
public MapBase()
{
MapProjection = new WebMercatorProjection();
ScaleRotateTransform.Children.Add(ScaleTransform);
ScaleRotateTransform.Children.Add(RotateTransform);
// set Background by Style to enable resetting by ClearValue in MapLayerPropertyChanged
var style = new Style(typeof(MapBase));
style.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.Transparent)));

View file

@ -140,18 +140,21 @@
<Compile Include="..\Shared\Tile.cs">
<Link>Tile.cs</Link>
</Compile>
<Compile Include="..\Shared\TileGrid.cs">
<Link>TileGrid.cs</Link>
</Compile>
<Compile Include="..\Shared\TileImageLoader.cs">
<Link>TileImageLoader.cs</Link>
</Compile>
<Compile Include="..\Shared\TileMatrix.cs">
<Link>TileMatrix.cs</Link>
</Compile>
<Compile Include="..\Shared\TileSource.cs">
<Link>TileSource.cs</Link>
</Compile>
<Compile Include="..\Shared\ViewportChangedEventArgs.cs">
<Link>ViewportChangedEventArgs.cs</Link>
</Compile>
<Compile Include="..\Shared\ViewTransform.cs">
<Link>ViewTransform.cs</Link>
</Compile>
<Compile Include="..\Shared\WebMercatorProjection.cs">
<Link>WebMercatorProjection.cs</Link>
</Compile>

View file

@ -24,7 +24,8 @@ namespace MapControl
protected override void OnViewportChanged(ViewportChangedEventArgs e)
{
var projection = ParentMap.MapProjection;
var map = ParentMap;
var projection = map.MapProjection;
if (projection.IsNormalCylindrical)
{
@ -39,7 +40,7 @@ namespace MapControl
Children.Add(path);
}
var bounds = projection.ViewportRectToBoundingBox(new Rect(0d, 0d, ParentMap.RenderSize.Width, ParentMap.RenderSize.Height));
var bounds = map.ViewportRectToBoundingBox(new Rect(0d, 0d, map.RenderSize.Width, map.RenderSize.Height));
var lineDistance = GetLineDistance();
var labelStart = new Location(
@ -65,14 +66,14 @@ namespace MapControl
{
var figure = new PathFigure
{
StartPoint = projection.LocationToViewportPoint(new Location(lat, lineStart.Longitude)),
StartPoint = map.LocationToViewportPoint(new Location(lat, lineStart.Longitude)),
IsClosed = false,
IsFilled = false
};
figure.Segments.Add(new LineSegment
{
Point = projection.LocationToViewportPoint(new Location(lat, lineEnd.Longitude))
Point = map.LocationToViewportPoint(new Location(lat, lineEnd.Longitude))
});
geometry.Figures.Add(figure);
@ -82,14 +83,14 @@ namespace MapControl
{
var figure = new PathFigure
{
StartPoint = projection.LocationToViewportPoint(new Location(lineStart.Latitude, lon)),
StartPoint = map.LocationToViewportPoint(new Location(lineStart.Latitude, lon)),
IsClosed = false,
IsFilled = false
};
figure.Segments.Add(new LineSegment
{
Point = projection.LocationToViewportPoint(new Location(lineEnd.Latitude, lon))
Point = map.LocationToViewportPoint(new Location(lineEnd.Latitude, lon))
});
geometry.Figures.Add(figure);
@ -112,7 +113,7 @@ namespace MapControl
{
var renderTransform = new TransformGroup();
renderTransform.Children.Add(new TranslateTransform());
renderTransform.Children.Add(ParentMap.RotateTransform);
renderTransform.Children.Add(map.RotateTransform);
renderTransform.Children.Add(new TranslateTransform());
label = new TextBlock { RenderTransform = renderTransform };
@ -153,7 +154,7 @@ namespace MapControl
var label = (TextBlock)Children[i];
var location = (Location)label.Tag;
var viewportTransform = (TranslateTransform)((TransformGroup)label.RenderTransform).Children[2];
var viewportPosition = projection.LocationToViewportPoint(location);
var viewportPosition = map.LocationToViewportPoint(location);
viewportTransform.X = viewportPosition.X;
viewportTransform.Y = viewportPosition.Y;
}

View file

@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Clemens Fischer")]
[assembly: AssemblyCopyright("Copyright © 2020 Clemens Fischer")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("4.17.0")]
[assembly: AssemblyFileVersion("4.17.0")]
[assembly: AssemblyVersion("5.0.0")]
[assembly: AssemblyFileVersion("5.0.0")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]