From d5ee7bbfc0bd409026232742c263bd48decfe675 Mon Sep 17 00:00:00 2001 From: ClemensFischer Date: Tue, 20 Jan 2026 23:05:33 +0100 Subject: [PATCH] Updated projection factories --- MapControl/Shared/MapProjectionFactory.cs | 78 +++++-------------- .../Shared/ProjNetMapProjectionFactory.cs | 25 +++--- 2 files changed, 33 insertions(+), 70 deletions(-) diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs index 5881c620..645a3d6a 100644 --- a/MapControl/Shared/MapProjectionFactory.cs +++ b/MapControl/Shared/MapProjectionFactory.cs @@ -6,71 +6,29 @@ namespace MapControl { public virtual MapProjection GetProjection(string crsId) { - MapProjection projection = null; - - switch (crsId) + MapProjection projection = crsId switch { - case WebMercatorProjection.DefaultCrsId: - projection = new WebMercatorProjection(); - break; - - case WorldMercatorProjection.DefaultCrsId: - projection = new WorldMercatorProjection(); - break; - - case EquirectangularProjection.DefaultCrsId: - case "CRS:84": - case "EPSG:4087": - projection = new EquirectangularProjection(crsId); - break; - - case Wgs84UpsNorthProjection.DefaultCrsId: - projection = new Wgs84UpsNorthProjection(); - break; - - case Wgs84UpsSouthProjection.DefaultCrsId: - projection = new Wgs84UpsSouthProjection(); - break; - - case Wgs84AutoUtmProjection.DefaultCrsId: - projection = new Wgs84AutoUtmProjection(); - break; - - case Wgs84AutoTmProjection.DefaultCrsId: - projection = new Wgs84AutoTmProjection(); - break; - - case OrthographicProjection.DefaultCrsId: - projection = new OrthographicProjection(); - break; - - case AutoEquirectangularProjection.DefaultCrsId: - projection = new AutoEquirectangularProjection(); - break; - - case GnomonicProjection.DefaultCrsId: - projection = new GnomonicProjection(); - break; - - case StereographicProjection.DefaultCrsId: - projection = new StereographicProjection(); - break; - - case AzimuthalEquidistantProjection.DefaultCrsId: - projection = new AzimuthalEquidistantProjection(); - break; - - default: - if (crsId.StartsWith("EPSG:") && int.TryParse(crsId.Substring(5), out int epsgCode)) - { - projection = GetProjection(epsgCode); - } - break; - } + WebMercatorProjection.DefaultCrsId => new WebMercatorProjection(), + WorldMercatorProjection.DefaultCrsId => new WorldMercatorProjection(), + EquirectangularProjection.DefaultCrsId or "CRS:84" or "EPSG:4087" => new EquirectangularProjection(crsId), + Wgs84UpsNorthProjection.DefaultCrsId => new Wgs84UpsNorthProjection(), + Wgs84UpsSouthProjection.DefaultCrsId => new Wgs84UpsSouthProjection(), + Wgs84AutoUtmProjection.DefaultCrsId => new Wgs84AutoUtmProjection(), + Wgs84AutoTmProjection.DefaultCrsId => new Wgs84AutoTmProjection(), + OrthographicProjection.DefaultCrsId => new OrthographicProjection(), + AutoEquirectangularProjection.DefaultCrsId => new AutoEquirectangularProjection(), + GnomonicProjection.DefaultCrsId => new GnomonicProjection(), + StereographicProjection.DefaultCrsId => new StereographicProjection(), + AzimuthalEquidistantProjection.DefaultCrsId => new AzimuthalEquidistantProjection(), + _ => GetProjectionFromEpsgCode(crsId), + }; return projection ?? throw new NotSupportedException($"MapProjection \"{crsId}\" is not supported."); } + public MapProjection GetProjectionFromEpsgCode(string crsId) => + crsId.StartsWith("EPSG:") && int.TryParse(crsId.Substring(5), out int epsgCode) ? GetProjection(epsgCode) : null; + public virtual MapProjection GetProjection(int epsgCode) => epsgCode switch { var code when code >= Etrs89UtmProjection.FirstZoneEpsgCode && code <= Etrs89UtmProjection.LastZoneEpsgCode => new Etrs89UtmProjection(epsgCode % 100), diff --git a/MapProjections/Shared/ProjNetMapProjectionFactory.cs b/MapProjections/Shared/ProjNetMapProjectionFactory.cs index 46415d63..77ff6f31 100644 --- a/MapProjections/Shared/ProjNetMapProjectionFactory.cs +++ b/MapProjections/Shared/ProjNetMapProjectionFactory.cs @@ -25,17 +25,22 @@ namespace MapControl.Projections { 29193, WktConstants.ProjCsSad69Utm23S }, }; - public override MapProjection GetProjection(string crsId) => crsId switch + public override MapProjection GetProjection(string crsId) { - MapControl.WebMercatorProjection.DefaultCrsId => new WebMercatorProjection(), - MapControl.WorldMercatorProjection.DefaultCrsId => new WorldMercatorProjection(), - MapControl.Wgs84UpsNorthProjection.DefaultCrsId => new Wgs84UpsNorthProjection(), - MapControl.Wgs84UpsSouthProjection.DefaultCrsId => new Wgs84UpsSouthProjection(), - MapControl.Wgs84AutoUtmProjection.DefaultCrsId => new Wgs84AutoUtmProjection(), - MapControl.OrthographicProjection.DefaultCrsId => new Wgs84OrthographicProjection(), - MapControl.StereographicProjection.DefaultCrsId => new Wgs84StereographicProjection(), - _ => base.GetProjection(crsId) - }; + MapProjection projection = crsId switch + { + MapControl.WebMercatorProjection.DefaultCrsId => new WebMercatorProjection(), + MapControl.WorldMercatorProjection.DefaultCrsId => new WorldMercatorProjection(), + MapControl.Wgs84UpsNorthProjection.DefaultCrsId => new Wgs84UpsNorthProjection(), + MapControl.Wgs84UpsSouthProjection.DefaultCrsId => new Wgs84UpsSouthProjection(), + MapControl.Wgs84AutoUtmProjection.DefaultCrsId => new Wgs84AutoUtmProjection(), + MapControl.OrthographicProjection.DefaultCrsId => new Wgs84OrthographicProjection(), + MapControl.StereographicProjection.DefaultCrsId => new Wgs84StereographicProjection(), + _ => GetProjectionFromEpsgCode(crsId) + }; + + return projection ?? base.GetProjection(crsId); + } public override MapProjection GetProjection(int epsgCode) => epsgCode switch {