From e6b25c2f8d2779f20aabd8715e5729f65484def3 Mon Sep 17 00:00:00 2001 From: Clemens Date: Fri, 21 Jan 2022 23:26:21 +0100 Subject: [PATCH] MapProjection properties --- .../Shared/EquirectangularProjection.cs | 6 +----- MapControl/Shared/MapProjection.cs | 15 +++----------- MapControl/Shared/WebMercatorProjection.cs | 20 +++---------------- MapControl/Shared/WorldMercatorProjection.cs | 14 ++----------- MapProjections/Shared/GeoApiProjection.cs | 20 ++++--------------- .../Shared/GeoApiProjectionFactory.cs | 15 +++++++++----- .../Shared/WorldMercatorProjection.cs | 12 +++++++---- 7 files changed, 31 insertions(+), 71 deletions(-) diff --git a/MapControl/Shared/EquirectangularProjection.cs b/MapControl/Shared/EquirectangularProjection.cs index 7e6e5226..39469fba 100644 --- a/MapControl/Shared/EquirectangularProjection.cs +++ b/MapControl/Shared/EquirectangularProjection.cs @@ -23,11 +23,7 @@ namespace MapControl public EquirectangularProjection() { CrsId = DefaultCrsId; - } - - public override bool IsNormalCylindrical - { - get { return true; } + IsNormalCylindrical = true; } public override Vector GetRelativeScale(Location location) diff --git a/MapControl/Shared/MapProjection.cs b/MapControl/Shared/MapProjection.cs index 9e3da69f..cef74fab 100644 --- a/MapControl/Shared/MapProjection.cs +++ b/MapControl/Shared/MapProjection.cs @@ -37,26 +37,17 @@ namespace MapControl /// /// Indicates if this is a normal cylindrical projection. /// - public virtual bool IsNormalCylindrical - { - get { return false; } - } + public bool IsNormalCylindrical { get; protected set; } /// /// Indicates if this is a web mercator projection, i.e. compatible with MapTileLayer. /// - public virtual bool IsWebMercator - { - get { return false; } - } + public bool IsWebMercator { get; protected set; } /// /// Gets the absolute value of the minimum and maximum latitude that can be transformed. /// - public virtual double MaxLatitude - { - get { return 90d; } - } + public double MaxLatitude { get; protected set; } = 90d; /// /// Gets the relative map scale at the specified Location. diff --git a/MapControl/Shared/WebMercatorProjection.cs b/MapControl/Shared/WebMercatorProjection.cs index 78ca7572..5fd7bf4b 100644 --- a/MapControl/Shared/WebMercatorProjection.cs +++ b/MapControl/Shared/WebMercatorProjection.cs @@ -17,26 +17,12 @@ namespace MapControl { public const string DefaultCrsId = "EPSG:3857"; - private static readonly double maxLatitude = YToLatitude(180d); - public WebMercatorProjection() { CrsId = DefaultCrsId; - } - - public override bool IsNormalCylindrical - { - get { return true; } - } - - public override bool IsWebMercator - { - get { return true; } - } - - public override double MaxLatitude - { - get { return maxLatitude; } + IsNormalCylindrical = true; + IsWebMercator = true; + MaxLatitude = YToLatitude(180d); } public override Vector GetRelativeScale(Location location) diff --git a/MapControl/Shared/WorldMercatorProjection.cs b/MapControl/Shared/WorldMercatorProjection.cs index 5ad47fb9..6592bb45 100644 --- a/MapControl/Shared/WorldMercatorProjection.cs +++ b/MapControl/Shared/WorldMercatorProjection.cs @@ -20,21 +20,11 @@ namespace MapControl public static double ConvergenceTolerance { get; set; } = 1e-6; public static int MaxIterations { get; set; } = 10; - private static readonly double maxLatitude = YToLatitude(180d); - public WorldMercatorProjection() { CrsId = DefaultCrsId; - } - - public override bool IsNormalCylindrical - { - get { return true; } - } - - public override double MaxLatitude - { - get { return maxLatitude; } + IsNormalCylindrical = true; + MaxLatitude = YToLatitude(180d); } public override Vector GetRelativeScale(Location location) diff --git a/MapProjections/Shared/GeoApiProjection.cs b/MapProjections/Shared/GeoApiProjection.cs index 0dc1f039..65b8a873 100644 --- a/MapProjections/Shared/GeoApiProjection.cs +++ b/MapProjections/Shared/GeoApiProjection.cs @@ -25,8 +25,6 @@ namespace MapControl.Projections public class GeoApiProjection : MapProjection { private ICoordinateSystem coordinateSystem; - private bool isNormalCylindrical; - private bool isWebMercator; private double scaleFactor; private string bboxFormat; @@ -83,19 +81,19 @@ namespace MapControl.Projections var falseEasting = projection.GetParameter("false_easting"); var falseNorthing = projection.GetParameter("false_northing"); - isNormalCylindrical = + IsNormalCylindrical = (centralMeridian == null || centralMeridian.Value == 0d) && (centralParallel == null || centralParallel.Value == 0d) && (falseEasting == null || falseEasting.Value == 0d) && (falseNorthing == null || falseNorthing.Value == 0d); - isWebMercator = CrsId == "EPSG:3857" || CrsId == "EPSG:900913"; + IsWebMercator = CrsId == "EPSG:3857" || CrsId == "EPSG:900913"; scaleFactor = 1d; bboxFormat = "{0},{1},{2},{3}"; } else { - isNormalCylindrical = true; - isWebMercator = false; + IsNormalCylindrical = true; + IsWebMercator = false; scaleFactor = Wgs84MetersPerDegree; bboxFormat = "{1},{0},{3},{2}"; } @@ -106,16 +104,6 @@ namespace MapControl.Projections public IMathTransform MapToLocationTransform { get; private set; } - public override bool IsNormalCylindrical - { - get { return isNormalCylindrical; } - } - - public override bool IsWebMercator - { - get { return isWebMercator; } - } - public override Point LocationToMap(Location location) { if (LocationToMapTransform == null) diff --git a/MapProjections/Shared/GeoApiProjectionFactory.cs b/MapProjections/Shared/GeoApiProjectionFactory.cs index c29be7ca..d419a45f 100644 --- a/MapProjections/Shared/GeoApiProjectionFactory.cs +++ b/MapProjections/Shared/GeoApiProjectionFactory.cs @@ -76,10 +76,14 @@ namespace MapControl.Projections = "PROJCS[\"ETRS89 / UTM zone {1}N\"," + "GEOGCS[\"ETRS89\"," + "DATUM[\"European_Terrestrial_Reference_System_1989\"," - + "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," - + "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]]," - + "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," - + "UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]]," + + "SPHEROID[\"GRS 1980\",6378137,298.257222101," + + "AUTHORITY[\"EPSG\",\"7019\"]]," + + "TOWGS84[0,0,0,0,0,0,0]," + + "AUTHORITY[\"EPSG\",\"6258\"]]," + + "PRIMEM[\"Greenwich\",0," + + "AUTHORITY[\"EPSG\",\"8901\"]]," + + "UNIT[\"degree\",0.0174532925199433," + + "AUTHORITY[\"EPSG\",\"9122\"]]," + "AUTHORITY[\"EPSG\",\"4258\"]]," + "PROJECTION[\"Transverse_Mercator\"]," + "PARAMETER[\"latitude_of_origin\",0]," @@ -87,7 +91,8 @@ namespace MapControl.Projections + "PARAMETER[\"scale_factor\",0.9996]," + "PARAMETER[\"false_easting\",500000]," + "PARAMETER[\"false_northing\",0]," - + "UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]," + + "UNIT[\"metre\",1," + + "AUTHORITY[\"EPSG\",\"9001\"]]," + "AXIS[\"Easting\",EAST]," + "AXIS[\"Northing\",NORTH]," + "AUTHORITY[\"EPSG\",\"{0}\"]]"; diff --git a/MapProjections/Shared/WorldMercatorProjection.cs b/MapProjections/Shared/WorldMercatorProjection.cs index 9ff29bf4..381fca56 100644 --- a/MapProjections/Shared/WorldMercatorProjection.cs +++ b/MapProjections/Shared/WorldMercatorProjection.cs @@ -20,10 +20,13 @@ namespace MapControl.Projections WKT = "PROJCS[\"WGS 84 / World Mercator\"," + "GEOGCS[\"WGS 84\"," + "DATUM[\"WGS_1984\"," - + "SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]," + + "SPHEROID[\"WGS 84\",6378137,298.257223563," + + "AUTHORITY[\"EPSG\",\"7030\"]]," + "AUTHORITY[\"EPSG\",\"6326\"]]," - + "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," - + "UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]]," + + "PRIMEM[\"Greenwich\",0," + + "AUTHORITY[\"EPSG\",\"8901\"]]," + + "UNIT[\"degree\",0.0174532925199433," + + "AUTHORITY[\"EPSG\",\"9122\"]]," + "AUTHORITY[\"EPSG\",\"4326\"]]," + "PROJECTION[\"Mercator_1SP\"]," + "PARAMETER[\"latitude_of_origin\",0]," @@ -31,7 +34,8 @@ namespace MapControl.Projections + "PARAMETER[\"scale_factor\",1]," + "PARAMETER[\"false_easting\",0]," + "PARAMETER[\"false_northing\",0]," - + "UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]," + + "UNIT[\"metre\",1," + + "AUTHORITY[\"EPSG\",\"9001\"]]," + "AXIS[\"Easting\",EAST]," + "AXIS[\"Northing\",NORTH]," + "AUTHORITY[\"EPSG\",\"3395\"]]";