// WPF MapControl - http://wpfmapcontrol.codeplex.com/
// Copyright © 2012 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Media;
namespace MapControl
{
///
/// Defines a normal cylindrical projection. Latitude and longitude values in degrees
/// are transformed to cartesian coordinates with origin at latitude = 0 and longitude = 0.
/// Longitude values are transformed identically to x values in the interval [-180 .. 180].
///
public abstract class MapTransform
{
///
/// Gets the absolute value of the minimum and maximum latitude that can be transformed.
///
public abstract double MaxLatitude { get; }
///
/// Gets the scale factor of the map projection at the specified geographic location
/// relative to the scale at latitude zero.
///
public abstract double RelativeScale(Location location);
///
/// Transforms a geographic location to a cartesian coordinate point.
///
public abstract Point Transform(Location location);
///
/// Transforms a cartesian coordinate point to a geographic location.
///
public abstract Location TransformBack(Point point);
///
/// Transforms a collection of geographic locations to a collection of cartesian coordinate points.
///
public PointCollection Transform(IEnumerable locations)
{
return new PointCollection(locations.Select(l => Transform(l)));
}
///
/// Transforms a collection of cartesian coordinate points to a collections of geographic location.
///
public LocationCollection TransformBack(IEnumerable points)
{
return new LocationCollection(points.Select(p => TransformBack(p)));
}
}
}