private void UpdateModelShape()
{
var rdCenter = new MapPoint(5.387206, 52.155174);
// var rdCenter = new MapPoint(155000, 463000);
var start = new WebMercator().ToGeographic(Start.Mp) as MapPoint;
// rdCenter = new WebMercator().FromGeographic(rdCenter) as MapPoint;
var srcSr = new SpatialReference(28992);
var targetSr = new SpatialReference(4326);
var src = ProjectionInfo.FromEpsgCode(srcSr.WKID);
var dest = ProjectionInfo.FromEpsgCode(targetSr.WKID);
var radAngle = (float)(GetAngle(Start.Mp, Finish.Mp) * (Math.PI / 180f));
foreach (var graphic in EffectsModelShapes)
{
graphic.SetZIndex(0);
var baseGraphic = graphic.Attributes["base"] as Graphic;
var basePoly = baseGraphic.Geometry as Polygon;
var clone = basePoly.Clone();
clone.SpatialReference = targetSr;
List<PointCollection> newRings = new List<PointCollection>();
foreach (var linestring in clone.Rings)
{
foreach (var point in linestring)
{
// RotatePoint(point, rdCenter, radAngle);
RotatePoint(point, new MapPoint(0,0), radAngle);
}
var projectedPoints = linestring.SelectMany(c => new double[2] { c.X + 155000, c.Y + 463000 }).ToArray();
Reproject.ReprojectPoints(projectedPoints, null, src, dest, 0, projectedPoints.Length / 2);
var projectedLineString = new PointCollection(Enumerable.Range(0, projectedPoints.Length / 2).Select(i => new MapPoint(projectedPoints[i * 2], projectedPoints[(i * 2) + 1] , targetSr)));
newRings.Add(projectedLineString);
}
clone.Rings = new ObservableCollection<PointCollection>(newRings);
clone.Offset(start.X - rdCenter.X, start.Y - rdCenter.Y);
graphic.Geometry = clone;
}
}