XAML-Map-Control/MapProjections/Shared/UtmProjection.cs
2022-01-21 16:55:00 +01:00

35 lines
961 B
C#

// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
// © 2022 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
using ProjNet.CoordinateSystems;
using System;
namespace MapControl.Projections
{
public class UtmProjection : GeoApiProjection
{
public UtmProjection(int zone, bool north)
{
SetZone(zone, north);
}
public UtmProjection(Location location)
{
var zone = Math.Min((int)Math.Floor(Location.NormalizeLongitude(location.Longitude) + 180d) / 6 + 1, 60);
SetZone(zone, location.Latitude >= 0d);
}
protected void SetZone(int zone, bool north)
{
if (zone < 1 || zone > 60)
{
throw new ArgumentException("Invalid UTM zone number.", nameof(zone));
}
CoordinateSystem = ProjectedCoordinateSystem.WGS84_UTM(zone, north);
}
}
}