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;
}
}
}