private void ClientOnComputeFieldOfViewCompleted(object sender, ComputeFieldOfViewAsImageCompletedEventArgs e) { if (e.Error != null) { Logger.Log("Field of View", "Error showing field of view result", e.Error.Message, Logger.Level.Error, true); return; } var result = e.Result; if (result == null || result.ByteBuffer == null) return; var image = ConvertToBitmapImage(result); Execute.OnUIThread(() => { Image.Source = image; }); var env = webMercator.FromGeographic(new Envelope(e.Result.BoundingBox.MinimumLongitude, e.Result.BoundingBox.MinimumLatitude, e.Result.BoundingBox.MaximumLongitude, e.Result.BoundingBox.MaximumLatitude)) as Envelope; ElementLayer.SetEnvelope(Image, env); }
///// <summary> ///// Convert to Radians. ///// </summary> //private static double ToRadian(double val) //{ // return (Math.PI / 180) * val; //} //private static double ToDegrees(double val) //{ // return (180 / Math.PI) * val; //} //private const double EarthRadius = 6378137.0; ///// <summary> ///// Calculates the end-point from a given source at a given range (meters) and bearing (degrees). ///// This methods uses simple geometry equations to calculate the end-point. ///// </summary> ///// <param name="source">Point of origin</param> ///// <param name="range">Range in meters</param> ///// <param name="bearing">Bearing in degrees</param> ///// <returns>End-point from the source given the desired range and bearing.</returns> //public static Point CalculateDerivedPosition(Point source, double range, double bearing) //{ // var latA = ToRadian(source.Y); // var lonA = ToRadian(source.X); // var angularDistance = range / EarthRadius; // var trueCourse = ToRadian(bearing); // var lat = Math.Asin(Math.Sin(latA) * Math.Cos(angularDistance) + Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse)); // var dlon = Math.Atan2(Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA), Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat)); // var lon = ((lonA + dlon + Math.PI) % (Math.PI * 2)) - Math.PI; // return new Point(ToDegrees(lon), ToDegrees(lat)); //} private void ClientOnComputeFieldOfViewAsImageCompleted(object sender, ComputeFieldOfViewAsImageCompletedEventArgs e) { if (e.Error != null) { AppStateSettings.Instance.TriggerNotification("Error generating FoV", "FoV Error", Brushes.Red); return; } var result = e.Result; if (result == null || result.ByteBuffer == null) return; var bitmapImage = ConvertToBitmapImage(result); var env = webMercator.FromGeographic(new Envelope(e.Result.BoundingBox.MinimumLongitude, e.Result.BoundingBox.MinimumLatitude, e.Result.BoundingBox.MaximumLongitude, e.Result.BoundingBox.MaximumLatitude)) as Envelope; Execute.OnUIThread(() => { image.Source = bitmapImage; ElementLayer.SetEnvelope(image, env); }); }