XAML-Map-Control/MapControl/MapTransform.cs

66 lines
2.2 KiB
C#
Raw Normal View History

// XAML Map Control - http://xamlmapcontrol.codeplex.com/
2015-01-20 17:52:02 +01:00
// © 2015 Clemens Fischer
2012-05-04 12:52:20 +02:00
// Licensed under the Microsoft Public License (Ms-PL)
#if NETFX_CORE
using Windows.Foundation;
#else
2012-04-25 22:02:53 +02:00
using System.Windows;
#endif
2012-04-25 22:02:53 +02:00
namespace MapControl
{
/// <summary>
/// Defines a normal cylindrical projection. Latitude and longitude values in degrees are
/// transformed to cartesian coordinates with origin at latitude = 0 and longitude = 0.
2012-04-25 22:02:53 +02:00
/// Longitude values are transformed identically to x values in the interval [-180 .. 180].
/// Latitude values in the interval [-MaxLatitude .. MaxLatitude] are transformed to y values in
/// the interval [-180 .. 180] according to the actual projection, e.g. the Mercator projection.
2012-04-25 22:02:53 +02:00
/// </summary>
2012-05-04 12:52:20 +02:00
public abstract class MapTransform
2012-04-25 22:02:53 +02:00
{
/// <summary>
/// Gets the absolute value of the minimum and maximum latitude that can be transformed.
/// </summary>
public abstract double MaxLatitude { get; }
/// <summary>
2012-05-04 12:52:20 +02:00
/// Gets the scale factor of the map projection at the specified geographic location
/// relative to the scale at latitude zero.
/// </summary>
public abstract double RelativeScale(Location location);
/// <summary>
/// Transforms a cartesian coordinate point to a geographic location.
2012-05-04 12:52:20 +02:00
/// </summary>
public abstract Location Transform(Point point);
2012-05-04 12:52:20 +02:00
/// <summary>
/// Transforms a geographic location to a cartesian coordinate point.
2012-05-04 12:52:20 +02:00
/// </summary>
public abstract Point Transform(Location location);
/// <summary>
/// Transforms a geographic location to a cartesian coordinate point
/// with minumum distance to the specified reference longitude value.
/// </summary>
public Point Transform(Location location, double referenceLongitude)
{
var p = Transform(location);
p.X = Location.NormalizeLongitude(p.X);
if (p.X > referenceLongitude + 180d)
{
p.X -= 360d;
}
else if (p.X < referenceLongitude - 180d)
{
p.X += 360d;
}
return p;
}
2012-04-25 22:02:53 +02:00
}
}