diff --git a/MapProjections/Shared/Ed50UtmProjection.cs b/MapProjections/Shared/Ed50UtmProjection.cs
index ed3e39ed..114d2044 100644
--- a/MapProjections/Shared/Ed50UtmProjection.cs
+++ b/MapProjections/Shared/Ed50UtmProjection.cs
@@ -45,7 +45,7 @@ namespace MapControl.Projections
+ "AXIS[\"Northing\",NORTH],"
+ "AUTHORITY[\"EPSG\",\"230{0}\"]]";
- WKT = string.Format(wktFormat, zone, 6 * zone - 183);
+ CoordinateSystemWkt = string.Format(wktFormat, zone, 6 * zone - 183);
}
}
}
diff --git a/MapProjections/Shared/Etrs89UtmProjection.cs b/MapProjections/Shared/Etrs89UtmProjection.cs
index d1117098..2a704654 100644
--- a/MapProjections/Shared/Etrs89UtmProjection.cs
+++ b/MapProjections/Shared/Etrs89UtmProjection.cs
@@ -45,7 +45,7 @@ namespace MapControl.Projections
+ "AXIS[\"Northing\",NORTH],"
+ "AUTHORITY[\"EPSG\",\"258{0}\"]]";
- WKT = string.Format(wktFormat, zone, 6 * zone - 183);
+ CoordinateSystemWkt = string.Format(wktFormat, zone, 6 * zone - 183);
}
}
}
diff --git a/MapProjections/Shared/GeoApiProjection.cs b/MapProjections/Shared/GeoApiProjection.cs
index 65b8a873..0eb9391d 100644
--- a/MapProjections/Shared/GeoApiProjection.cs
+++ b/MapProjections/Shared/GeoApiProjection.cs
@@ -32,9 +32,9 @@ namespace MapControl.Projections
{
}
- public GeoApiProjection(string wkt)
+ public GeoApiProjection(string coordinateSystemWkt)
{
- WKT = wkt;
+ CoordinateSystemWkt = coordinateSystemWkt;
}
///
@@ -42,7 +42,7 @@ namespace MapControl.Projections
/// i.e. a PROJCS[...] or GEOGCS[...] string as used by https://epsg.io or http://spatialreference.org.
/// Setting this property updates the CoordinateSystem property with an ICoordinateSystem created from the WKT string.
///
- public string WKT
+ public string CoordinateSystemWkt
{
get { return CoordinateSystem?.WKT; }
protected set { CoordinateSystem = new CoordinateSystemFactory().CreateFromWkt(value); }
diff --git a/MapProjections/Shared/GeoApiProjectionFactory.cs b/MapProjections/Shared/GeoApiProjectionFactory.cs
index c215d82c..65060eef 100644
--- a/MapProjections/Shared/GeoApiProjectionFactory.cs
+++ b/MapProjections/Shared/GeoApiProjectionFactory.cs
@@ -2,6 +2,8 @@
// © 2022 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
+using System.Collections.Generic;
+
namespace MapControl.Projections
{
public class GeoApiProjectionFactory : MapProjectionFactory
@@ -19,11 +21,17 @@ namespace MapControl.Projections
public const int Wgs84UtmSouthLast = 32760;
public const int Wgs84UpsSouth = 32761;
+ public Dictionary CoordinateSystemWkts { get; } = new Dictionary();
+
public override MapProjection GetProjection(string crsId)
{
MapProjection projection = null;
- if (crsId.StartsWith("EPSG:") && int.TryParse(crsId.Substring(5), out int epsgCode))
+ if (CoordinateSystemWkts.TryGetValue(crsId, out string wkt))
+ {
+ projection = new GeoApiProjection(wkt);
+ }
+ else if (crsId.StartsWith("EPSG:") && int.TryParse(crsId.Substring(5), out int epsgCode))
{
switch (epsgCode)
{
diff --git a/MapProjections/Shared/WorldMercatorProjection.cs b/MapProjections/Shared/WorldMercatorProjection.cs
index 381fca56..bb3adc7b 100644
--- a/MapProjections/Shared/WorldMercatorProjection.cs
+++ b/MapProjections/Shared/WorldMercatorProjection.cs
@@ -17,7 +17,8 @@ namespace MapControl.Projections
{
public WorldMercatorProjection()
{
- WKT = "PROJCS[\"WGS 84 / World Mercator\","
+ CoordinateSystemWkt
+ = "PROJCS[\"WGS 84 / World Mercator\","
+ "GEOGCS[\"WGS 84\","
+ "DATUM[\"WGS_1984\","
+ "SPHEROID[\"WGS 84\",6378137,298.257223563,"