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\"]]";