From f841e42e397c168a9c1c61f2d0e6f466f86c9e28 Mon Sep 17 00:00:00 2001 From: Clemens Date: Mon, 7 Mar 2022 17:28:08 +0100 Subject: [PATCH] Fixed MapProjection.Center --- MapControl/Shared/MapBase.cs | 10 ++-------- MapProjections/Shared/AutoUtmProjection.cs | 2 ++ MapProjections/Shared/GeoApiProjection.cs | 5 ----- .../Shared/PolarStereographicProjection.cs | 19 +++++++++++-------- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/MapControl/Shared/MapBase.cs b/MapControl/Shared/MapBase.cs index e0729b1f..2bafd8a7 100644 --- a/MapControl/Shared/MapBase.cs +++ b/MapControl/Shared/MapBase.cs @@ -734,10 +734,7 @@ namespace MapControl var viewScale = ViewTransform.ZoomLevelToScale(ZoomLevel); var projection = MapProjection; - if (projection.Type == MapProjectionType.Azimuthal) - { - projection.Center = ProjectionCenter ?? Center; - } + projection.Center = ProjectionCenter ?? Center; var mapCenter = projection.LocationToMap(transformCenter ?? Center); @@ -770,10 +767,7 @@ namespace MapControl { ResetTransformCenter(); - if (projection.Type == MapProjectionType.Azimuthal) - { - projection.Center = ProjectionCenter ?? Center; - } + projection.Center = ProjectionCenter ?? Center; mapCenter = projection.LocationToMap(center); diff --git a/MapProjections/Shared/AutoUtmProjection.cs b/MapProjections/Shared/AutoUtmProjection.cs index 51720aa3..14c67142 100644 --- a/MapProjections/Shared/AutoUtmProjection.cs +++ b/MapProjections/Shared/AutoUtmProjection.cs @@ -24,12 +24,14 @@ namespace MapControl.Projections public override Point LocationToMap(Location location) { UpdateZone(); + return base.LocationToMap(location); } public override Location MapToLocation(Point point) { UpdateZone(); + return base.MapToLocation(point); } diff --git a/MapProjections/Shared/GeoApiProjection.cs b/MapProjections/Shared/GeoApiProjection.cs index b40b6506..580f7208 100644 --- a/MapProjections/Shared/GeoApiProjection.cs +++ b/MapProjections/Shared/GeoApiProjection.cs @@ -25,7 +25,6 @@ namespace MapControl.Projections public class GeoApiProjection : MapProjection { private ICoordinateSystem coordinateSystem; - private Location center; private double scaleFactor; private string bboxFormat; @@ -101,10 +100,6 @@ namespace MapControl.Projections Type = MapProjectionType.TransverseCylindrical; } - Center = new Location( - centralParallel != null ? centralParallel.Value : 0d, - centralMeridian != null ? centralMeridian.Value : 0d); - scaleFactor = 1d; bboxFormat = "{0},{1},{2},{3}"; } diff --git a/MapProjections/Shared/PolarStereographicProjection.cs b/MapProjections/Shared/PolarStereographicProjection.cs index dbb38867..862a13ef 100644 --- a/MapProjections/Shared/PolarStereographicProjection.cs +++ b/MapProjections/Shared/PolarStereographicProjection.cs @@ -19,14 +19,15 @@ namespace MapControl.Projections private const double ConvergenceTolerance = 1e-6; private const int MaxIterations = 10; + public bool IsNorth { get; } public double ScaleFactor { get; } public double FalseEasting { get; } public double FalseNorthing { get; } - public PolarStereographicProjection(string crsId, bool isNorth, double scaleFactor, double falseEasting, double falseNorthing) + public PolarStereographicProjection(bool isNorth, double scaleFactor, double falseEasting, double falseNorthing) { - CrsId = crsId; - Center = new Location(isNorth ? 90d : -90d, 0d); + Type = MapProjectionType.Azimuthal; + IsNorth = isNorth; ScaleFactor = scaleFactor; FalseEasting = falseEasting; FalseNorthing = falseNorthing; @@ -34,7 +35,7 @@ namespace MapControl.Projections public override Vector GetRelativeScale(Location location) { - var lat = Math.Sign(Center.Latitude) * location.Latitude * Math.PI / 180d; + var lat = (IsNorth ? location.Latitude : -location.Latitude) * Math.PI / 180d; var a = Wgs84EquatorialRadius; var e = Wgs84Eccentricity; var s = Math.Sqrt(Math.Pow(1 + e, 1 + e) * Math.Pow(1 - e, 1 - e)); @@ -52,7 +53,7 @@ namespace MapControl.Projections var lat = location.Latitude * Math.PI / 180d; var lon = location.Longitude * Math.PI / 180d; - if (Center.Latitude > 0d) + if (IsNorth) { lon = Math.PI - lon; } @@ -91,7 +92,7 @@ namespace MapControl.Projections lat = newLat; } - if (Center.Latitude > 0d) + if (IsNorth) { lon = Math.PI - lon; } @@ -119,8 +120,9 @@ namespace MapControl.Projections public const string DefaultCrsId = "EPSG:32661"; public UpsNorthProjection() - : base(DefaultCrsId, true, 0.994, 2e6, 2e6) + : base(true, 0.994, 2e6, 2e6) { + CrsId = DefaultCrsId; } } @@ -132,8 +134,9 @@ namespace MapControl.Projections public const string DefaultCrsId = "EPSG:32761"; public UpsSouthProjection() - : base(DefaultCrsId, false, 0.994, 2e6, 2e6) + : base(false, 0.994, 2e6, 2e6) { + CrsId = DefaultCrsId; } } }