コード例 #1
0
ファイル: FieldOfView.cs プロジェクト: TNOCS/csTouch
 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);
 }
コード例 #2
0
ファイル: FoVPoi.cs プロジェクト: TNOCS/csTouch
        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;
            }
        }