Solved! Go to Solution.
private void MyMap_ExtentChanged(object sender, ExtentEventArgs e)
{
//new envelope to set if needed
Envelope newExtent = null;
if (MyMap.WrapAroundIsActive)
{
//Wrap around is set to true
ESRI.ArcGIS.Client.Geometry.Geometry normalizedExtent = ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(e.NewExtent);
if (normalizedExtent is Polygon)
{
newExtent = new Envelope();
foreach (MapPoint p in (normalizedExtent as Polygon).Rings[0])
{
if (p.X < newExtent.XMin || double.IsNaN(newExtent.XMin))
newExtent.XMin = p.X;
if (p.Y < newExtent.YMin || double.IsNaN(newExtent.YMin))
newExtent.YMin = p.Y;
}
foreach (MapPoint p in (normalizedExtent as Polygon).Rings[1])
{
if (p.X > newExtent.XMax || double.IsNaN(newExtent.XMax))
newExtent.XMax = p.X;
if (p.Y > newExtent.YMax || double.IsNaN(newExtent.YMax))
newExtent.YMax = p.Y;
}
}
else if (normalizedExtent is Envelope)
{
newExtent = normalizedExtent as Envelope;
}
}
else
{
newExtent = e.NewExtent;
}
//constraint it to -90 to 90 degree latitude (Y-axis)
newExtent.YMin = Math.Max(-90, newExtent.YMin);
newExtent.YMax = Math.Min(90, newExtent.YMax);
//No constraint on longitude (X-axis)
newExtent.XMin = MyMap.Extent.XMin;
newExtent.XMax = MyMap.Extent.XMax;
if ((MyMap != null) && ((MyMap.Extent.YMin != newExtent.YMin) || (MyMap.Extent.YMax != newExtent.YMax)))
{
//set map new envelope if Y-axis min and max is exceeded
MyMap.Extent = newExtent;
}
}