diff --git a/MapControl/Shared/EquirectangularProjection.cs b/MapControl/Shared/EquirectangularProjection.cs index ad0725ac..703c3b7e 100644 --- a/MapControl/Shared/EquirectangularProjection.cs +++ b/MapControl/Shared/EquirectangularProjection.cs @@ -17,9 +17,9 @@ namespace MapControl /// public class EquirectangularProjection : MapProjection { - public const int EpsgCode = 4326; + public const string DefaultCrsId = "EPSG:4326"; - public EquirectangularProjection(string crsId = "EPSG:4326") + public EquirectangularProjection(string crsId = DefaultCrsId) { Type = MapProjectionType.NormalCylindrical; CrsId = crsId; diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs index cbc13062..81d511ab 100644 --- a/MapControl/Shared/MapProjectionFactory.cs +++ b/MapControl/Shared/MapProjectionFactory.cs @@ -14,46 +14,25 @@ namespace MapControl set => instance = value; } - public virtual MapProjection GetProjection(int epsgCode) - { - switch (epsgCode) - { - case WorldMercatorProjection.EpsgCode: - return new WorldMercatorProjection(); - - case WebMercatorProjection.EpsgCode: - return new WebMercatorProjection(); - - case EquirectangularProjection.EpsgCode: - return new EquirectangularProjection(); - - case UpsNorthProjection.EpsgCode: - return new UpsNorthProjection(); - - case UpsSouthProjection.EpsgCode: - return new UpsSouthProjection(); - - case var c when c >= Etrs89UtmProjection.FirstZoneEpsgCode && c <= Etrs89UtmProjection.LastZoneEpsgCode: - return new Etrs89UtmProjection(epsgCode % 100); - - case var c when c >= Nad83UtmProjection.FirstZoneEpsgCode && c <= Nad83UtmProjection.LastZoneEpsgCode: - return new Nad83UtmProjection(epsgCode % 100); - - case var c when c >= Wgs84UtmProjection.FirstZoneNorthEpsgCode && c <= Wgs84UtmProjection.LastZoneNorthEpsgCode: - return new Wgs84UtmProjection(epsgCode % 100, true); - - case var c when c >= Wgs84UtmProjection.FirstZoneSouthEpsgCode && c <= Wgs84UtmProjection.LastZoneSouthEpsgCode: - return new Wgs84UtmProjection(epsgCode % 100, false); - - default: - return null; - } - } - public virtual MapProjection GetProjection(string crsId) { switch (crsId) { + case WebMercatorProjection.DefaultCrsId: + return new WebMercatorProjection(); + + case WorldMercatorProjection.DefaultCrsId: + return new WorldMercatorProjection(); + + case EquirectangularProjection.DefaultCrsId: + return new EquirectangularProjection(); + + case UpsNorthProjection.DefaultCrsId: + return new UpsNorthProjection(); + + case UpsSouthProjection.DefaultCrsId: + return new UpsSouthProjection(); + case Wgs84AutoUtmProjection.DefaultCrsId: return new Wgs84AutoUtmProjection(); @@ -78,5 +57,26 @@ namespace MapControl : null; } } + + public virtual MapProjection GetProjection(int epsgCode) + { + switch (epsgCode) + { + case var c when c >= Etrs89UtmProjection.FirstZoneEpsgCode && c <= Etrs89UtmProjection.LastZoneEpsgCode: + return new Etrs89UtmProjection(epsgCode % 100); + + case var c when c >= Nad83UtmProjection.FirstZoneEpsgCode && c <= Nad83UtmProjection.LastZoneEpsgCode: + return new Nad83UtmProjection(epsgCode % 100); + + case var c when c >= Wgs84UtmProjection.FirstZoneNorthEpsgCode && c <= Wgs84UtmProjection.LastZoneNorthEpsgCode: + return new Wgs84UtmProjection(epsgCode % 100, true); + + case var c when c >= Wgs84UtmProjection.FirstZoneSouthEpsgCode && c <= Wgs84UtmProjection.LastZoneSouthEpsgCode: + return new Wgs84UtmProjection(epsgCode % 100, false); + + default: + return null; + } + } } } diff --git a/MapControl/Shared/PolarStereographicProjection.cs b/MapControl/Shared/PolarStereographicProjection.cs index 93c56a65..2efe6301 100644 --- a/MapControl/Shared/PolarStereographicProjection.cs +++ b/MapControl/Shared/PolarStereographicProjection.cs @@ -117,9 +117,9 @@ namespace MapControl /// public class UpsNorthProjection : PolarStereographicProjection { - public const int EpsgCode = 32661; + public const string DefaultCrsId = "EPSG:32661"; - public UpsNorthProjection(string crsId = "EPSG:32661") + public UpsNorthProjection(string crsId = DefaultCrsId) { CrsId = crsId; IsNorth = true; @@ -131,9 +131,9 @@ namespace MapControl /// public class UpsSouthProjection : PolarStereographicProjection { - public const int EpsgCode = 32761; + public const string DefaultCrsId = "EPSG:32761"; - public UpsSouthProjection(string crsId = "EPSG:32761") + public UpsSouthProjection(string crsId = DefaultCrsId) { CrsId = crsId; IsNorth = false; diff --git a/MapControl/Shared/WebMercatorProjection.cs b/MapControl/Shared/WebMercatorProjection.cs index 290e2abd..50630446 100644 --- a/MapControl/Shared/WebMercatorProjection.cs +++ b/MapControl/Shared/WebMercatorProjection.cs @@ -15,9 +15,9 @@ namespace MapControl /// public class WebMercatorProjection : MapProjection { - public const int EpsgCode = 3857; + public const string DefaultCrsId = "EPSG:3857"; - public WebMercatorProjection(string crsId = "EPSG:3857") + public WebMercatorProjection(string crsId = DefaultCrsId) { Type = MapProjectionType.WebMercator; CrsId = crsId; diff --git a/MapControl/Shared/WorldMercatorProjection.cs b/MapControl/Shared/WorldMercatorProjection.cs index 26d9b297..118905d8 100644 --- a/MapControl/Shared/WorldMercatorProjection.cs +++ b/MapControl/Shared/WorldMercatorProjection.cs @@ -15,9 +15,9 @@ namespace MapControl /// public class WorldMercatorProjection : MapProjection { - public const int EpsgCode = 3395; + public const string DefaultCrsId = "EPSG:3395"; - public WorldMercatorProjection(string crsId = "EPSG:3395") + public WorldMercatorProjection(string crsId = DefaultCrsId) { Type = MapProjectionType.NormalCylindrical; CrsId = crsId; diff --git a/MapProjections/Shared/GeoApiProjectionFactory.cs b/MapProjections/Shared/GeoApiProjectionFactory.cs index 23531404..2c327ad2 100644 --- a/MapProjections/Shared/GeoApiProjectionFactory.cs +++ b/MapProjections/Shared/GeoApiProjectionFactory.cs @@ -19,18 +19,28 @@ namespace MapControl.Projections return factory; } - public Dictionary CoordinateSystemWkts { get; } = new Dictionary(); + public override MapProjection GetProjection(string crsId) + { + switch (crsId) + { + case MapControl.WebMercatorProjection.DefaultCrsId: + return new WebMercatorProjection(); + + case MapControl.WorldMercatorProjection.DefaultCrsId: + return new WorldMercatorProjection(); + + case MapControl.Wgs84AutoUtmProjection.DefaultCrsId: + return new Wgs84AutoUtmProjection(); + + default: + return base.GetProjection(crsId); + } + } public override MapProjection GetProjection(int epsgCode) { switch (epsgCode) { - case WorldMercatorProjection.EpsgCode: - return new WorldMercatorProjection(); - - case WebMercatorProjection.EpsgCode: - return new WebMercatorProjection(); - case int c when c >= Ed50UtmProjection.FirstZoneEpsgCode && c <= Ed50UtmProjection.LastZoneEpsgCode: return new Ed50UtmProjection(epsgCode % 100); @@ -56,16 +66,6 @@ namespace MapControl.Projections } } - public override MapProjection GetProjection(string crsId) - { - switch (crsId) - { - case Wgs84AutoUtmProjection.DefaultCrsId: - return new Wgs84AutoUtmProjection(); - - default: - return base.GetProjection(crsId); - } - } + public Dictionary CoordinateSystemWkts { get; } = new Dictionary(); } } diff --git a/MapProjections/Shared/WebMercatorProjection.cs b/MapProjections/Shared/WebMercatorProjection.cs index ccd4575d..86388a75 100644 --- a/MapProjections/Shared/WebMercatorProjection.cs +++ b/MapProjections/Shared/WebMercatorProjection.cs @@ -18,8 +18,6 @@ namespace MapControl.Projections /// public class WebMercatorProjection : GeoApiProjection { - public const int EpsgCode = 3857; - public WebMercatorProjection() { CoordinateSystem = ProjectedCoordinateSystem.WebMercator; diff --git a/MapProjections/Shared/Wgs84UtmProjection.cs b/MapProjections/Shared/Wgs84UtmProjection.cs index df7fd64b..8360e5b4 100644 --- a/MapProjections/Shared/Wgs84UtmProjection.cs +++ b/MapProjections/Shared/Wgs84UtmProjection.cs @@ -45,11 +45,9 @@ namespace MapControl.Projections /// public class Wgs84AutoUtmProjection : Wgs84UtmProjection { - public const string DefaultCrsId = "AUTO2:42001"; - private readonly string autoCrsId; - public Wgs84AutoUtmProjection(string crsId = DefaultCrsId) + public Wgs84AutoUtmProjection(string crsId = MapControl.Wgs84AutoUtmProjection.DefaultCrsId) : base(31, true) { autoCrsId = crsId; diff --git a/MapProjections/Shared/WorldMercatorProjection.cs b/MapProjections/Shared/WorldMercatorProjection.cs index 74b0827e..8d28bae1 100644 --- a/MapProjections/Shared/WorldMercatorProjection.cs +++ b/MapProjections/Shared/WorldMercatorProjection.cs @@ -17,8 +17,6 @@ namespace MapControl.Projections /// public class WorldMercatorProjection : GeoApiProjection { - public const int EpsgCode = 3395; - public WorldMercatorProjection() { CoordinateSystemWkt @@ -43,7 +41,7 @@ namespace MapControl.Projections + "AUTHORITY[\"EPSG\",\"9001\"]]," + "AXIS[\"Easting\",EAST]," + "AXIS[\"Northing\",NORTH]," - + $"AUTHORITY[\"EPSG\",\"{EpsgCode}\"]]"; + + "AUTHORITY[\"EPSG\",\"3395\"]]"; } public override Point GetRelativeScale(Location location)