mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Equirectangular projections
This commit is contained in:
parent
419e2dee16
commit
218071faea
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,14 +128,9 @@ namespace MapControl
|
|||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue