示例#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);
        }
        public void Run(CancellationToken cancellationToken)
        {
            try
            {
                // ventoux
                //double lat1 = 44.17346;
                //double lon1 = 5.27829;

                // ste victoire
                //double lat1 = 43.532456;
                //double lon1 = 5.612444;

                // bottom ste victoire (fuveau)
                //double lat1 = 43.49029208393125;
                //double lon1 = 5.587234497070313;
                //double lat2 = 43.53013134607789;
                //double lon2 = 5.581398010253906;

                // geneva
                //double lat1 = 46.08129825372404;
                //double lon1 = 3.382026672363281;
                // mont blanc
                //double lat2 = 45.833;
                //double lon2 = 6.864;

                // bob
                //double lat1 = 37.212627;
                //double lon1 = 22.321612;

                //double lat2 = 37.208179;
                //double lon2 = 22.324373;


                double lat2 = 44.116655590545705;
                double lat1 = 44.19524951146881;
                double lon2 = 5.802505910396577;
                double lon1 = 5.806566774845124;

                Stopwatch sw = new Stopwatch();

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }
                _logger.LogInformation("Line elevation");

                sw.Restart();
                // Line starting at mont ventoux peak to Mont Blanc
                DEMDataSet dataSet = DEMDataSet.ASTER_GDEMV3;

                // High level way
                var metrics = _elevationService.GetIntervisibilityReport(new GeoPoint(lat1, lon1), new GeoPoint(lat2, lon2), dataSet
                                                                         , downloadMissingFiles: true, sourceVerticalOffset: 0);

                PlotVisibilityReport(metrics, 2048, 600, "VisReport.png");


                // Low level (tests from 0 to 2000 m)
                var elevationLine = GeometryService.ParseGeoPointAsGeometryLine(new GeoPoint(lat1, lon1), new GeoPoint(lat2, lon2));

                var geoPoints = _elevationService.GetLineGeometryElevation(elevationLine, dataSet);

                for (int i = 300; i < 10000; i += 500)
                {
                    var report = _elevationService.GetIntervisibilityReport(geoPoints, i);
                    PlotVisibilityReport(report, 2048, 600, $"VisReport_{i}.png");
                }

                _logger.LogInformation($"{dataSet.Name} metrics: {metrics.ToString()}");

                //var geoJson = ConvertLineElevationResultToGeoJson(simplified);

                _logger.LogInformation($"Done in {sw.Elapsed.TotalMilliseconds:N1}ms");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
            }
        }