diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs index b0fe885d..11b727e2 100644 --- a/MapControl/Shared/MapProjectionFactory.cs +++ b/MapControl/Shared/MapProjectionFactory.cs @@ -67,6 +67,9 @@ namespace MapControl case var c when c >= Etrs89UtmProjection.FirstZoneEpsgCode && c <= Etrs89UtmProjection.LastZoneEpsgCode: return new Etrs89UtmProjection(epsgCode % 100); + case var c when c >= Nad27UtmProjection.FirstZoneEpsgCode && c <= Nad27UtmProjection.LastZoneEpsgCode: + return new Nad27UtmProjection(epsgCode % 100); + case var c when c >= Nad83UtmProjection.FirstZoneEpsgCode && c <= Nad83UtmProjection.LastZoneEpsgCode: return new Nad83UtmProjection(epsgCode % 100); diff --git a/MapControl/Shared/Nad27UtmProjection.cs b/MapControl/Shared/Nad27UtmProjection.cs new file mode 100644 index 00000000..b0379c8a --- /dev/null +++ b/MapControl/Shared/Nad27UtmProjection.cs @@ -0,0 +1,40 @@ +// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control +// Copyright © 2024 Clemens Fischer +// Licensed under the Microsoft Public License (Ms-PL) + +using System; + +namespace MapControl +{ + /// + /// NAD27 UTM Projection with zone number. + /// + public class Nad27UtmProjection : TransverseMercatorProjection + { + public const int FirstZone = 1; + public const int LastZone = 22; + public const int FirstZoneEpsgCode = 26700 + FirstZone; + public const int LastZoneEpsgCode = 26700 + LastZone; + + public int Zone { get; } + + public Nad27UtmProjection(int zone) + { + if (zone < FirstZone || zone > LastZone) + { + throw new ArgumentException($"Invalid NAD27 UTM zone {zone}.", nameof(zone)); + } + + Zone = zone; + CrsId = $"EPSG:{26700 + Zone}"; + + // Clarke 1866 + EquatorialRadius = 6378206.4; + Flattening = 1d / 294.978698213898; + ScaleFactor = 0.9996; + CentralMeridian = Zone * 6d - 183d; + FalseEasting = 5e5; + FalseNorthing = 0d; + } + } +} diff --git a/MapControl/UWP/MapControl.UWP.csproj b/MapControl/UWP/MapControl.UWP.csproj index 2da96286..d510b553 100644 --- a/MapControl/UWP/MapControl.UWP.csproj +++ b/MapControl/UWP/MapControl.UWP.csproj @@ -143,6 +143,9 @@ MapTileLayerBase.cs + + Nad27UtmProjection.cs + Nad83UtmProjection.cs