コード例 #1
0
        public static Task Execute(ConvertVerb command, ILogger logger)
        {
            if (File.Exists(command.InputFile) == false)
            {
                logger.Fatal("Input file does not exist!");
                Environment.Exit(0);
            }

            var baseOutput = string.Join(".", command.InputFile.Split(".").SkipLast(1));
            var reader     = FileFormatDetector.GetCloudStreamReader(command.InputFile, command.InputFormat);

            using var writer = FileFormatDetector.GetCloudStreamWriter(
                      command.OutputFile ?? $"{baseOutput}.{command.OutputFormat.ToString().ToLower()}",
                      command.OutputFormat
                      );

            var ps = reader.ReadPointSet();

            while (ps != null)
            {
                writer.WritePointSet(ps);
                ps = reader.ReadPointSet();
            }

            return(Task.CompletedTask);
        }
コード例 #2
0
        private static Task <IList <Tree> > ExecuteFromRaw(DetectTreesCommand command, ILogger logger)
        {
            using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input);
            if (streamReader == null)
            {
                logger.Fatal("Not supported data format.");
                Environment.Exit(0);
            }

            var cloud   = new Cloud(streamReader);
            var terrain = new Terrain(cloud, command.Resolution);

            foreach (var point in cloud)
            {
                point.Z -= terrain.GetHeight(point);
            }
            var slices = cloud
                         .Slice(command.SliceHeight.GetValueOrDefault(0.1))
                         .Where(slice => slice != null).OrderBy(slice => slice.Height)
                         .ToList();
            var pointSetGroups = FilteringFlow.GetFilteredPointSetGroups(command.FiltersConfigurationFile, logger, slices);
            var pointSetGroup  = new PointSetGroup(pointSetGroups.SelectMany(p => p.PointSets).ToList());
            var trees          = Detect(pointSetGroup);

            return(Task.FromResult(trees));
        }
コード例 #3
0
        public static Task Execute(SliceCommand command, ILogger logger)
        {
            if (File.Exists(command.Input) == false)
            {
                logger.Fatal("Provided cloud point data file does not exist!");
                Environment.Exit(0);
            }

            using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input);
            if (streamReader == null)
            {
                logger.Fatal("Not supported data format.");
                Environment.Exit(0);
            }

            if (File.Exists(command.TerrainPath) == false)
            {
                logger.Fatal("Terrain file does not exist!");
                Environment.Exit(0);
            }

            var cloud   = new Cloud(streamReader);
            var terrain = Terrain.Import(command.TerrainPath);


            var slices = cloud.Slice(command.SliceHeight).Where(slice => slice != null).OrderBy(slice => slice.Height).ToList();

            foreach (var pointSlice in slices)
            {
                foreach (var pointSet in pointSlice.PointSets)
                {
                    foreach (var point in pointSet)
                    {
                        point.Z -= terrain.GetHeight(point);
                    }
                }
            }
            using var writer = new GpdWriter(command.Output, null, (float)command.SliceHeight);
            writer.WriteSlices(slices);

            return(Task.CompletedTask);
        }
コード例 #4
0
        public static Task Execute(TerrainCommand command, ILogger logger)
        {
            if (File.Exists(command.Input) == false)
            {
                logger.Fatal("Provided cloud point data file does not exist!");
                Environment.Exit(0);
            }

            using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input);
            if (streamReader == null)
            {
                logger.Fatal("Not supported data format.");
                Environment.Exit(0);
            }

            var cloud   = new Cloud(streamReader);
            var terrain = new Terrain(cloud, command.Resolution, command.MaxHeight);

            terrain.Export(command.Output);

            return(Task.CompletedTask);
        }