Exemplo n.º 1
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));
        }
Exemplo n.º 2
0
        /// <summary>
        /// </summary>
        /// <param name="cloud"></param>
        /// <param name="detectionParameters"></param>
        /// <param name="mergingParameters"></param>
        /// <returns></returns>
        public IList <Tree> DetectPotentialTrees(Cloud cloud, DetectionParameters detectionParameters, MergingParameters mergingParameters)
        {
            var pointSets      = DetectTrunkPointSets(cloud, detectionParameters).SelectMany(group => group.PointSets).ToList();
            var pointSetGroup  = new PointSetGroup(pointSets);
            var potentialTrees = pointSetGroup.BuildTrees(mergingParameters);

            return(FilterTrees(potentialTrees, detectionParameters.TreeFilters));
        }
Exemplo n.º 3
0
        private static Task <IList <Tree> > ExecuteFromProcessed(DetectTreesCommand command, ILogger logger)
        {
            using var reader = new GpdReader(command.Input);
            var cloud         = reader.ReadPointSlices().SelectMany(slice => slice.PointSets).ToList();
            var pointSetGroup = new PointSetGroup(cloud);
            var trees         = Detect(pointSetGroup);

            return(Task.FromResult(trees));
        }
Exemplo n.º 4
0
        private static IList <Tree> Detect(PointSetGroup pointSetGroup)
        {
            var mergingParameters = new MergingParameters
            {
                MinimumRegressionGroupingDistance = 0.09,
                MaximumGroupingEmptyHeight        = 20,
                MinimumGroupingDistance           = 0.35,
            };
            var treeFilters = new List <ITreeFilter>
            {
                new TreeHeightFilter
                {
                    MinimalTreeHeight = 4
                }
            };
            var potentialTrees = pointSetGroup.BuildTrees(mergingParameters);

            return(FilterTrees(potentialTrees, treeFilters));
        }