public void Calculate() { if (StartPoint == null || StartPoint .Mp == null) return; if (FinishPoint == null || FinishPoint.Mp == null) return; var d = GetDistance() * 1000; var mp = webMercator.ToGeographic(StartPoint.Mp) as MapPoint; if (mp == null) return; var request2 = new FieldOfViewAsImageRequest { CameraLocation = new Location { Longitude = mp.X, Latitude = mp.Y, Altitude = 2 }, MinVisualRange = 0, MaxVisualRange = d, DesiredFieldOfView = d, Orientation = 0, ViewAngle = 360, Mode = ModeOfOperation.NormalRadar, Mask = Masks.None, Color = Color.FromArgb(128, Color.Blue) }; if (AppState.IsOnline) remoteClient.ComputeFieldOfViewAsImageAsync(request2); else localClient.ComputeFieldOfViewAsImageAsync(request2); }
public void Calculate() { var startAngleLabel = Model.Id + ".StartAngle"; if (!Poi.Labels.ContainsKey(startAngleLabel)) Poi.Labels[startAngleLabel] = "0"; var startAngle = double.Parse(Poi.Labels[startAngleLabel], CultureInfo.InvariantCulture); var distanceLabel = Model.Id + ".Distance"; if (!Poi.Labels.ContainsKey(distanceLabel)) Poi.Labels[distanceLabel] = "1000"; var distance = double.Parse(Poi.Labels[distanceLabel], CultureInfo.InvariantCulture); var viewAngleLabel = Model.Id + ".ViewAngle"; if (!Poi.Labels.ContainsKey(viewAngleLabel)) Poi.Labels[viewAngleLabel] = "45"; var viewAngle = double.Parse(Poi.Labels[viewAngleLabel], CultureInfo.InvariantCulture); var heightLabel = Model.Id + ".Height"; if (!Poi.Labels.ContainsKey(heightLabel)) Poi.Labels[heightLabel] = "2"; var height = double.Parse(Poi.Labels[heightLabel], CultureInfo.InvariantCulture); var enabledLabel = Model.Id + ".Enabled"; if (!Poi.Labels.ContainsKey(enabledLabel)) Poi.Labels[enabledLabel] = "true"; var isEnabled = bool.Parse(Poi.Labels[enabledLabel]); var domainLabel = Model.Id + ".Domain"; if (!Poi.Labels.ContainsKey(domainLabel)) Poi.Labels[domainLabel] = "Air"; var domain = Poi.Labels[domainLabel]; switch (OperatingMode) { case FieldOfViewOperatingMode.Polygon: if (distance.IsZero() || viewAngle.IsZero() || !isEnabled) { Execute.OnUIThread(ClearGraphics); } var vectorRequest = new FieldOfViewAsVectorRequest { CameraLocation = new Location { Latitude = Poi.Position.Latitude, Longitude = Poi.Position.Longitude, Altitude = height }, MinVisualRange = 0, MaxVisualRange = distance, DesiredFieldOfView = distance, ViewAngle = (int) viewAngle, Mode = ModeOfOperation.NormalRadar, Precision = precision, Orientation = (int) startAngle + (int) Poi.Orientation }; switch (domain.ToLower()) { case "surface": vectorRequest.Mask = Masks.Water; break; case "ground": vectorRequest.Mask = Masks.Land; break; default: vectorRequest.Mask = Masks.None; break; } var json = JsonConvert.SerializeObject(vectorRequest); var hash = json.GetHashCode(); var folder = Path.Combine(AppStateSettings.CacheFolder, "fov"); if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); var file = Path.Combine(folder, hash + ".res"); remoteClient.InnerChannel.OperationTimeout = new TimeSpan(0, 0, 0, 10); var loaded = false; if (File.Exists(file)) { try { var stream = File.Open(file, FileMode.Open); var bformatter = new BinaryFormatter(); var e = (FieldOfViewAsVectorResponse) bformatter.Deserialize(stream); stream.Close(); ClientOnComputeFieldOfViewAsVectorCompleted(this, new ComputeFieldOfViewAsVectorCompletedEventArgs(new object[] {e}, null, false, null)); loaded = true; } catch (Exception) {} } if (!loaded) { if (AppState.IsOnline) remoteClient.ComputeFieldOfViewAsVectorAsync(vectorRequest, file); else localClient.ComputeFieldOfViewAsVectorAsync(vectorRequest); } break; default: Execute.OnUIThread(() => { image.Visibility = (Poi.IsVisible) ? Visibility.Visible : Visibility.Collapsed; if (Math.Abs(distance) < 0.00001 || Math.Abs(viewAngle) < 0.00001 || !isEnabled) image.Source = null; }); var request2 = new FieldOfViewAsImageRequest { CameraLocation = new Location { Latitude = Poi.Position.Latitude, Longitude = Poi.Position.Longitude, Altitude = height }, MinVisualRange = 0, MaxVisualRange = distance, DesiredFieldOfView = distance, ViewAngle = (int) viewAngle, Mode = ModeOfOperation.NormalRadar, Color = Color.FromArgb(color.A, color.R, color.G, color.B), Orientation = (int) startAngle + (int) Poi.Orientation }; switch (domain.ToLower()) { case "surface": request2.Mask = Masks.Water; break; case "ground": request2.Mask = Masks.Land; break; default: request2.Mask = Masks.None; break; } if (AppState.IsOnline) remoteClient.ComputeFieldOfViewAsImageAsync(request2); else localClient.ComputeFieldOfViewAsImageAsync(request2); break; } }