diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs index 8348d1dc..260fbeb4 100644 --- a/MapControl/Shared/MapProjectionFactory.cs +++ b/MapControl/Shared/MapProjectionFactory.cs @@ -36,6 +36,10 @@ namespace MapControl projection = new Wgs84AutoUtmProjection(); break; + case Wgs84AutoTmProjection.DefaultCrsId: + projection = new Wgs84AutoTmProjection(); + break; + case OrthographicProjection.DefaultCrsId: projection = new OrthographicProjection(); break; diff --git a/MapControl/Shared/TransverseMercatorProjection.cs b/MapControl/Shared/TransverseMercatorProjection.cs index 38a54285..9af93a34 100644 --- a/MapControl/Shared/TransverseMercatorProjection.cs +++ b/MapControl/Shared/TransverseMercatorProjection.cs @@ -8,8 +8,8 @@ using Avalonia; namespace MapControl { /// - /// Universal Transverse Mercator Projection. - /// See https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system. + /// Transverse Mercator Projection. + /// See https://en.wikipedia.org/wiki/Transverse_Mercator_projection. /// public class TransverseMercatorProjection : MapProjection { @@ -17,7 +17,7 @@ namespace MapControl public double Flattening { get; set; } = Wgs84Flattening; public double ScaleFactor { get; set; } = 0.9996; public double CentralMeridian { get; set; } - public double FalseEasting { get; set; } = 5e5; + public double FalseEasting { get; set; } public double FalseNorthing { get; set; } public TransverseMercatorProjection() diff --git a/MapControl/Shared/Wgs84AutoTmProjection.cs b/MapControl/Shared/Wgs84AutoTmProjection.cs new file mode 100644 index 00000000..ebf9039f --- /dev/null +++ b/MapControl/Shared/Wgs84AutoTmProjection.cs @@ -0,0 +1,31 @@ +namespace MapControl +{ + /// + /// WGS84 Auto Transverse Mercator Projection. + /// + public class Wgs84AutoTmProjection : TransverseMercatorProjection + { + public const string DefaultCrsId = "AUTO2:42002"; + + public Wgs84AutoTmProjection() + : this(DefaultCrsId) + { + // XAML needs parameterless constructor + } + + public Wgs84AutoTmProjection(string crsId) + { + CrsId = crsId; + } + + public override Location Center + { + get => base.Center; + protected internal set + { + base.Center = value; + CentralMeridian = value.Longitude; + } + } + } +} diff --git a/MapControl/Shared/Wgs84UtmProjection.cs b/MapControl/Shared/Wgs84UtmProjection.cs index 7f0a8151..db6c8e92 100644 --- a/MapControl/Shared/Wgs84UtmProjection.cs +++ b/MapControl/Shared/Wgs84UtmProjection.cs @@ -4,6 +4,7 @@ namespace MapControl { /// /// WGS84 UTM Projection with zone number and north/south flag. + /// See https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system. /// public class Wgs84UtmProjection : TransverseMercatorProjection { @@ -66,7 +67,7 @@ namespace MapControl get => base.Center; protected internal set { - if (!Equals(base.Center, value)) + if (!base.Center.Equals(value)) { base.Center = value; diff --git a/MapProjections/Shared/Wgs84UtmProjection.cs b/MapProjections/Shared/Wgs84UtmProjection.cs index c0942d1a..11784408 100644 --- a/MapProjections/Shared/Wgs84UtmProjection.cs +++ b/MapProjections/Shared/Wgs84UtmProjection.cs @@ -5,6 +5,7 @@ namespace MapControl.Projections { /// /// WGS84 UTM Projection with zone number and north/south flag. + /// See https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system. /// public class Wgs84UtmProjection : GeoApiProjection { @@ -41,17 +42,16 @@ namespace MapControl.Projections /// public class Wgs84AutoUtmProjection : Wgs84UtmProjection { - private readonly string autoCrsId; + public Wgs84AutoUtmProjection() + : this(MapControl.Wgs84AutoUtmProjection.DefaultCrsId) + { + // XAML needs parameterless constructor + } - public Wgs84AutoUtmProjection(string crsId = MapControl.Wgs84AutoUtmProjection.DefaultCrsId) + public Wgs84AutoUtmProjection(string crsId) : base(31, true) { - autoCrsId = crsId; - - if (!string.IsNullOrEmpty(autoCrsId)) - { - CrsId = autoCrsId; - } + CrsId = crsId; } public override Location Center @@ -59,7 +59,7 @@ namespace MapControl.Projections get => base.Center; protected set { - if (!Equals(base.Center, value)) + if (!base.Center.Equals(value)) { base.Center = value; @@ -69,12 +69,9 @@ namespace MapControl.Projections if (Zone != zone || IsNorth != north) { + var crsId = CrsId; SetZone(zone, north); - - if (!string.IsNullOrEmpty(autoCrsId)) - { - CrsId = autoCrsId; - } + CrsId = crsId; } } }