diff --git a/MapControl/Shared/AutoEquirectangularProjection.cs b/MapControl/Shared/AutoEquirectangularProjection.cs index 81518007..a40ee16f 100644 --- a/MapControl/Shared/AutoEquirectangularProjection.cs +++ b/MapControl/Shared/AutoEquirectangularProjection.cs @@ -24,6 +24,13 @@ namespace MapControl CrsId = crsId; } + public override Point GetRelativeScale(Location location) + { + return new Point( + Math.Cos(Center.Latitude * Math.PI / 180d) / Math.Cos(location.Latitude * Math.PI / 180d), + 1d); + } + public override Point? LocationToMap(Location location) { return new Point( diff --git a/MapControl/Shared/EquirectangularProjection.cs b/MapControl/Shared/EquirectangularProjection.cs index 703c3b7e..b9fc24c9 100644 --- a/MapControl/Shared/EquirectangularProjection.cs +++ b/MapControl/Shared/EquirectangularProjection.cs @@ -48,12 +48,17 @@ namespace MapControl public override string GetBboxValue(Rect rect) { - return string.Format(CultureInfo.InvariantCulture, - CrsId == "CRS:84" ? "{0},{1},{2},{3}" : "{1},{0},{3},{2}", - rect.X / Wgs84MeterPerDegree, - rect.Y / Wgs84MeterPerDegree, - (rect.X + rect.Width) / Wgs84MeterPerDegree, - (rect.Y + rect.Height) / Wgs84MeterPerDegree); + if (CrsId == DefaultCrsId || CrsId == "CRS:84") + { + return string.Format(CultureInfo.InvariantCulture, + CrsId == DefaultCrsId ? "{1:F8},{0:F8},{3:F8},{2:F8}" : "{0:F8},{1:F8},{2:F8},{3:F8}", + rect.X / Wgs84MeterPerDegree, + rect.Y / Wgs84MeterPerDegree, + (rect.X + rect.Width) / Wgs84MeterPerDegree, + (rect.Y + rect.Height) / Wgs84MeterPerDegree); + } + + return base.GetBboxValue(rect); } } } diff --git a/MapControl/Shared/MapProjection.cs b/MapControl/Shared/MapProjection.cs index c3330d1c..c1e8bf18 100644 --- a/MapControl/Shared/MapProjection.cs +++ b/MapControl/Shared/MapProjection.cs @@ -128,14 +128,9 @@ namespace MapControl /// public virtual string GetBboxValue(Rect rect) { - // Truncate values for seamless stitching of two WMS images at 180° longitude, - // as done in WmsImageLayer.GetImageAsync. - // - return string.Format(CultureInfo.InvariantCulture, "{0:F2},{1:F2},{2:F2},{3:F2}", - 0.01 * Math.Ceiling(100d * rect.X), - 0.01 * Math.Ceiling(100d * rect.Y), - 0.01 * Math.Floor(100d * (rect.X + rect.Width)), - 0.01 * Math.Floor(100d * (rect.Y + rect.Height))); + return string.Format(CultureInfo.InvariantCulture, + "{0:F2},{1:F2},{2:F2},{3:F2}", + rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height); } } } diff --git a/MapControl/Shared/MapProjectionFactory.cs b/MapControl/Shared/MapProjectionFactory.cs index 81d511ab..b0fe885d 100644 --- a/MapControl/Shared/MapProjectionFactory.cs +++ b/MapControl/Shared/MapProjectionFactory.cs @@ -25,7 +25,9 @@ namespace MapControl return new WorldMercatorProjection(); case EquirectangularProjection.DefaultCrsId: - return new EquirectangularProjection(); + case "CRS:84": + case "EPSG:4087": + return new EquirectangularProjection(crsId); case UpsNorthProjection.DefaultCrsId: return new UpsNorthProjection();