From 0d602be61124a1024a18303229a76a7a2b067183 Mon Sep 17 00:00:00 2001 From: Clemens Date: Mon, 24 Jan 2022 20:43:22 +0100 Subject: [PATCH] Updated GeoApiProjection --- MapProjections/Shared/Ed50UtmProjection.cs | 2 +- MapProjections/Shared/Etrs89UtmProjection.cs | 2 +- MapProjections/Shared/GeoApiProjection.cs | 6 +++--- MapProjections/Shared/GeoApiProjectionFactory.cs | 10 +++++++++- MapProjections/Shared/WorldMercatorProjection.cs | 3 ++- 5 files changed, 16 insertions(+), 7 deletions(-) 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,"