Exemplo n.º 1
0
        public void TestIntervisibility(string dataSetName, double latStart, double lonStart
                                        , double latEnd, double lonEnd, double expectedObstacles)
        {
            DEMDataSet dataSet = DEMDataSet.RegisteredDatasets.FirstOrDefault(d => d.Name == dataSetName);

            Assert.NotNull(dataSet);

            IntervisibilityReport report = _elevationService.GetIntervisibilityReport(new GeoPoint(latStart, lonStart), new GeoPoint(latEnd, lonEnd), dataSet);

            Assert.NotNull(report);
            Assert.Equal(expectedObstacles, report.ObstacleCount, 0);
            Assert.Equal(expectedObstacles, report.Metrics.Obstacles.Count, 0);
        }
Exemplo n.º 2
0
        private void PlotVisibilityReport(IntervisibilityReport metrics, int width = 800, int height = 600, string fileName = "VisibilityReport.png")
        {
            try
            {
                double[] distancesX  = metrics.GeoPoints.Select(p => p.DistanceFromOriginMeters ?? 0).ToArray();
                double[] elevationsY = metrics.GeoPoints.Select(p => p.Elevation ?? 0).ToArray();



                var plt = new Plot(width, height);
                plt.PlotScatter(distancesX, elevationsY, lineWidth: 2, markerSize: 0, label: "profile");
                plt.PlotLine(0, elevationsY[0] + metrics.OriginVerticalOffset, distancesX.Last(), elevationsY.Last(), color: System.Drawing.Color.Red, 1, "ray");
                plt.Title("Visiblity report");
                plt.XLabel("Distance (meters)");
                plt.YLabel("Elevation (meters)");

                if (metrics.HasObstacles)
                {
                    var      obstacles        = metrics.Metrics.Obstacles;
                    double[] obstacleEntriesX = obstacles.Select(o => o.EntryPoint.DistanceFromOriginMeters ?? 0).ToArray();
                    double[] obstacleEntriesY = obstacles.Select(o => o.EntryPoint.Elevation ?? 0).ToArray();
                    double[] obstaclePeaksX   = obstacles.Select(o => o.PeakPoint.DistanceFromOriginMeters ?? 0).ToArray();
                    double[] obstaclePeaksY   = obstacles.Select(o => o.PeakPoint.Elevation ?? 0).ToArray();
                    double[] obstacleExitsX   = obstacles.Select(o => o.ExitPoint.DistanceFromOriginMeters ?? 0).ToArray();
                    double[] obstacleExitsY   = obstacles.Select(o => o.ExitPoint.Elevation ?? 0).ToArray();

                    plt.PlotScatter(obstacleEntriesX, obstacleEntriesY, lineWidth: 0, markerSize: 5, color: System.Drawing.Color.Green, markerShape: MarkerShape.cross, label: "entry");
                    plt.PlotScatter(obstaclePeaksX, obstaclePeaksY, lineWidth: 0, markerSize: 5, color: System.Drawing.Color.Black, markerShape: MarkerShape.cross, label: "peak");
                    plt.PlotScatter(obstacleExitsX, obstacleExitsY, lineWidth: 0, markerSize: 5, color: System.Drawing.Color.Violet, markerShape: MarkerShape.cross, label: "exit");
                }

                plt.Legend(enableLegend: true, fixedLineWidth: false);

                plt.SaveFig(fileName);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 3
0
        public void TestIntervisibilityWithInitialAltitude(string dataSetName, double latStart, double lonStart, double altitudeStart
                                                           , double latEnd, double lonEnd, double altitudeEnd, double expectedObstacles)
        {
            DEMDataSet dataSet = DEMDataSet.RegisteredDatasets.FirstOrDefault(d => d.Name == dataSetName);

            Assert.NotNull(dataSet);

            BoundingBox bbox = new BoundingBox(lonStart, lonEnd, latStart, latEnd);

            _elevationService.DownloadMissingFiles(dataSet, bbox);

            var sourcePoint    = new GeoPoint(latStart, lonStart);
            var targetPoint    = new GeoPoint(latEnd, lonEnd);
            var startElevation = _elevationService.GetPointElevation(sourcePoint, dataSet).Elevation ?? 0;
            var endElevation   = _elevationService.GetPointElevation(targetPoint, dataSet).Elevation ?? 0;

            IntervisibilityReport report = _elevationService.GetIntervisibilityReport(sourcePoint, targetPoint, dataSet, downloadMissingFiles: true, altitudeStart - startElevation, altitudeEnd - endElevation);


            Assert.NotNull(report);
            Assert.Equal(expectedObstacles, report.ObstacleCount, 0);
            Assert.Equal(expectedObstacles, report.Metrics.Obstacles.Count, 0);
        }