diff --git a/MapControl/Shared/Etrs89UtmProjection.cs b/MapControl/Shared/Etrs89UtmProjection.cs
index 44673444..757105a8 100644
--- a/MapControl/Shared/Etrs89UtmProjection.cs
+++ b/MapControl/Shared/Etrs89UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl
{
///
- /// ETRS89 UTM Projection with zone number.
+ /// ETRS89 Universal Transverse Mercator Projection.
///
public class Etrs89UtmProjection : TransverseMercatorProjection
{
diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs
index 260fbeb4..e021947e 100644
--- a/MapControl/Shared/MapProjectionFactory.cs
+++ b/MapControl/Shared/MapProjectionFactory.cs
@@ -33,7 +33,7 @@ namespace MapControl
break;
case Wgs84AutoUtmProjection.DefaultCrsId:
- projection = new Wgs84AutoUtmProjection();
+ projection = new Wgs84AutoUtmProjection("");
break;
case Wgs84AutoTmProjection.DefaultCrsId:
diff --git a/MapControl/Shared/Nad27UtmProjection.cs b/MapControl/Shared/Nad27UtmProjection.cs
index c061189e..8c14514c 100644
--- a/MapControl/Shared/Nad27UtmProjection.cs
+++ b/MapControl/Shared/Nad27UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl
{
///
- /// NAD27 UTM Projection with zone number.
+ /// NAD27 Universal Transverse Mercator Projection.
///
public class Nad27UtmProjection : TransverseMercatorProjection
{
diff --git a/MapControl/Shared/Nad83UtmProjection.cs b/MapControl/Shared/Nad83UtmProjection.cs
index 207dcc58..0686d6ba 100644
--- a/MapControl/Shared/Nad83UtmProjection.cs
+++ b/MapControl/Shared/Nad83UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl
{
///
- /// NAD83 UTM Projection with zone number.
+ /// NAD83 Universal Transverse Mercator Projection.
///
public class Nad83UtmProjection : TransverseMercatorProjection
{
diff --git a/MapControl/Shared/TransverseMercatorProjection.cs b/MapControl/Shared/TransverseMercatorProjection.cs
index 9af93a34..eff98aad 100644
--- a/MapControl/Shared/TransverseMercatorProjection.cs
+++ b/MapControl/Shared/TransverseMercatorProjection.cs
@@ -9,7 +9,8 @@ namespace MapControl
{
///
/// Transverse Mercator Projection.
- /// See https://en.wikipedia.org/wiki/Transverse_Mercator_projection.
+ /// See https://en.wikipedia.org/wiki/Transverse_Mercator_projection
+ /// and https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system.
///
public class TransverseMercatorProjection : MapProjection
{
diff --git a/MapControl/Shared/Wgs84AutoUtmProjection.cs b/MapControl/Shared/Wgs84AutoUtmProjection.cs
new file mode 100644
index 00000000..1fadc803
--- /dev/null
+++ b/MapControl/Shared/Wgs84AutoUtmProjection.cs
@@ -0,0 +1,61 @@
+using System;
+
+namespace MapControl
+{
+ ///
+ /// WGS84 Universal Transverse Mercator Projection with
+ /// automatic zone selection from projection center.
+ ///
+ public class Wgs84AutoUtmProjection : Wgs84UtmProjection
+ {
+ public const string DefaultCrsId = "AUTO2:42001";
+
+ private readonly string autoCrsId;
+
+ public Wgs84AutoUtmProjection()
+ : this(DefaultCrsId)
+ {
+ // XAML needs parameterless constructor
+ }
+
+ ///
+ /// When the crsId parameter is null or empty, the projection will use EPSG:32***.
+ ///
+ public Wgs84AutoUtmProjection(string crsId)
+ : base(31, true)
+ {
+ autoCrsId = crsId;
+
+ if (!string.IsNullOrEmpty(autoCrsId))
+ {
+ CrsId = autoCrsId;
+ }
+ }
+
+ public override Location Center
+ {
+ get => base.Center;
+ protected internal set
+ {
+ if (!base.Center.Equals(value))
+ {
+ base.Center = value;
+
+ var lon = Location.NormalizeLongitude(value.Longitude);
+ var zone = (int)Math.Floor(lon / 6d) + 31;
+ var north = value.Latitude >= 0d;
+
+ if (Zone != zone || IsNorth != north)
+ {
+ SetZone(zone, north);
+
+ if (!string.IsNullOrEmpty(autoCrsId))
+ {
+ CrsId = autoCrsId;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/MapControl/Shared/Wgs84UtmProjection.cs b/MapControl/Shared/Wgs84UtmProjection.cs
index db6c8e92..5d909c28 100644
--- a/MapControl/Shared/Wgs84UtmProjection.cs
+++ b/MapControl/Shared/Wgs84UtmProjection.cs
@@ -3,8 +3,7 @@
namespace MapControl
{
///
- /// WGS84 UTM Projection with zone number and north/south flag.
- /// See https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system.
+ /// WGS84 Universal Transverse Mercator Projection.
///
public class Wgs84UtmProjection : TransverseMercatorProjection
{
@@ -42,47 +41,4 @@ namespace MapControl
FalseNorthing = north ? 0d : 1e7;
}
}
-
- ///
- /// WGS84 UTM Projection with automatic zone selection from projection center.
- ///
- public class Wgs84AutoUtmProjection : Wgs84UtmProjection
- {
- public const string DefaultCrsId = "AUTO2:42001";
-
- public Wgs84AutoUtmProjection()
- : this(DefaultCrsId)
- {
- // XAML needs parameterless constructor
- }
-
- public Wgs84AutoUtmProjection(string crsId)
- : base(31, true)
- {
- CrsId = crsId;
- }
-
- public override Location Center
- {
- get => base.Center;
- protected internal set
- {
- if (!base.Center.Equals(value))
- {
- base.Center = value;
-
- var lon = Location.NormalizeLongitude(value.Longitude);
- var zone = (int)Math.Floor(lon / 6d) + 31;
- var north = value.Latitude >= 0d;
-
- if (Zone != zone || IsNorth != north)
- {
- var crsId = CrsId;
- SetZone(zone, north);
- CrsId = crsId;
- }
- }
- }
- }
- }
}
diff --git a/MapProjections/Shared/Ed50UtmProjection.cs b/MapProjections/Shared/Ed50UtmProjection.cs
index 473698f2..18ab4b18 100644
--- a/MapProjections/Shared/Ed50UtmProjection.cs
+++ b/MapProjections/Shared/Ed50UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl.Projections
{
///
- /// ED50 UTM Projection with zone number.
+ /// ED50 Universal Transverse Mercator Projection.
///
public class Ed50UtmProjection : GeoApiProjection
{
diff --git a/MapProjections/Shared/Etrs89UtmProjection.cs b/MapProjections/Shared/Etrs89UtmProjection.cs
index 9e251e0b..9043dd9f 100644
--- a/MapProjections/Shared/Etrs89UtmProjection.cs
+++ b/MapProjections/Shared/Etrs89UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl.Projections
{
///
- /// ETRS89 UTM Projection with zone number.
+ /// ETRS89 Universal Transverse Mercator Projection.
///
public class Etrs89UtmProjection : GeoApiProjection
{
diff --git a/MapProjections/Shared/Nad27UtmProjection.cs b/MapProjections/Shared/Nad27UtmProjection.cs
index 6fd217c4..891474ea 100644
--- a/MapProjections/Shared/Nad27UtmProjection.cs
+++ b/MapProjections/Shared/Nad27UtmProjection.cs
@@ -3,8 +3,7 @@
namespace MapControl.Projections
{
///
- /// NAD27 UTM Projection with zone number.
- /// Appears to be less accurate than MapControl.Nad27UtmProjection.
+ /// NAD27 Universal Transverse Mercator Projection.
///
public class Nad27UtmProjection : GeoApiProjection
{
diff --git a/MapProjections/Shared/Nad83UtmProjection.cs b/MapProjections/Shared/Nad83UtmProjection.cs
index ce7adef7..c3ddaa34 100644
--- a/MapProjections/Shared/Nad83UtmProjection.cs
+++ b/MapProjections/Shared/Nad83UtmProjection.cs
@@ -3,7 +3,7 @@
namespace MapControl.Projections
{
///
- /// NAD83 UTM Projection with zone number.
+ /// NAD83 Universal Transverse Mercator Projection.
///
public class Nad83UtmProjection : GeoApiProjection
{
diff --git a/MapProjections/Shared/Wgs84AutoUtmProjection.cs b/MapProjections/Shared/Wgs84AutoUtmProjection.cs
new file mode 100644
index 00000000..20c0d72d
--- /dev/null
+++ b/MapProjections/Shared/Wgs84AutoUtmProjection.cs
@@ -0,0 +1,59 @@
+using System;
+
+namespace MapControl.Projections
+{
+ ///
+ /// WGS84 Universal Transverse Mercator Projection with
+ /// automatic zone selection from projection center.
+ ///
+ public class Wgs84AutoUtmProjection : Wgs84UtmProjection
+ {
+ private readonly string autoCrsId;
+
+ public Wgs84AutoUtmProjection()
+ : this(MapControl.Wgs84AutoUtmProjection.DefaultCrsId)
+ {
+ // XAML needs parameterless constructor
+ }
+
+ ///
+ /// When the crsId parameter is null or empty, the projection will use EPSG:32***.
+ ///
+ public Wgs84AutoUtmProjection(string crsId)
+ : base(31, true)
+ {
+ autoCrsId = crsId;
+
+ if (!string.IsNullOrEmpty(autoCrsId))
+ {
+ CrsId = autoCrsId;
+ }
+ }
+
+ public override Location Center
+ {
+ get => base.Center;
+ protected set
+ {
+ if (!base.Center.Equals(value))
+ {
+ base.Center = value;
+
+ var lon = Location.NormalizeLongitude(value.Longitude);
+ var zone = (int)Math.Floor(lon / 6d) + 31;
+ var north = value.Latitude >= 0d;
+
+ if (Zone != zone || IsNorth != north)
+ {
+ SetZone(zone, north);
+
+ if (!string.IsNullOrEmpty(autoCrsId))
+ {
+ CrsId = autoCrsId;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/MapProjections/Shared/Wgs84UtmProjection.cs b/MapProjections/Shared/Wgs84UtmProjection.cs
index 11784408..c2add366 100644
--- a/MapProjections/Shared/Wgs84UtmProjection.cs
+++ b/MapProjections/Shared/Wgs84UtmProjection.cs
@@ -4,8 +4,7 @@ using System;
namespace MapControl.Projections
{
///
- /// WGS84 UTM Projection with zone number and north/south flag.
- /// See https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system.
+ /// WGS84 Universal Transverse Mercator Projection.
///
public class Wgs84UtmProjection : GeoApiProjection
{
@@ -36,45 +35,4 @@ namespace MapControl.Projections
CoordinateSystem = ProjectedCoordinateSystem.WGS84_UTM(Zone, IsNorth);
}
}
-
- ///
- /// WGS84 UTM Projection with automatic zone selection from projection center.
- ///
- public class Wgs84AutoUtmProjection : Wgs84UtmProjection
- {
- public Wgs84AutoUtmProjection()
- : this(MapControl.Wgs84AutoUtmProjection.DefaultCrsId)
- {
- // XAML needs parameterless constructor
- }
-
- public Wgs84AutoUtmProjection(string crsId)
- : base(31, true)
- {
- CrsId = crsId;
- }
-
- public override Location Center
- {
- get => base.Center;
- protected set
- {
- if (!base.Center.Equals(value))
- {
- base.Center = value;
-
- var lon = Location.NormalizeLongitude(value.Longitude);
- var zone = (int)Math.Floor(lon / 6d) + 31;
- var north = value.Latitude >= 0d;
-
- if (Zone != zone || IsNorth != north)
- {
- var crsId = CrsId;
- SetZone(zone, north);
- CrsId = crsId;
- }
- }
- }
- }
- }
}