示例#1
0
        public DefaultPosMappingScanNode(PosMapper2 posMapper, IList <IGrouping <long, IDScanItem> > moonGroups,
                                         IList <IDScanItem> leftBorderScan, IList <IDScanItem> rightBorderScan)
            : base(posMapper, leftBorderScan, rightBorderScan)
        {
            _moonGroups = moonGroups;

            var towerCount = ItemsOnScan.Count(PosMappingUtils.IsTower);

            IsLeaf = towerCount == 0 || (towerCount == 1 && moonGroups.Count < 2);

            if (!IsLeaf)
            {
                PivotalScanRangeInKm =
                    PosMappingUtils.GetLowerBoundInKm(_moonGroups.Skip(_moonGroups.Count / 2).First().First().Distance);
            }
        }
示例#2
0
        public MoonClusterNode(PosMapper2 posMapper, long lowerBoundaryInKm, long upperBoundaryInKm,
                               IList <IDScanItem> leftBorderScan, IList <IDScanItem> rightBorderScan)
            : base(posMapper, leftBorderScan, rightBorderScan)
        {
            _upperBoundaryInKm = upperBoundaryInKm;
            _lowerBoundaryInKm = lowerBoundaryInKm;

            _sizeInKm            = upperBoundaryInKm - lowerBoundaryInKm;
            PivotalScanRangeInKm = upperBoundaryInKm - _sizeInKm / 2;

            var towerCount = ItemsOnScan.Count(PosMappingUtils.IsTower);

            if (IsClusterTooDense)
            {
                IsLeaf = true;
                PosMapper.OnMoonClusterIsTooDense(ItemsOnScan.Where(PosMappingUtils.IsMoon).ToList());
                //TODO on dings nicht public machen, sondern actions uebergeben oder so
            }
            else
            {
                IsLeaf = towerCount == 0 ||
                         (towerCount == 1 && ItemsOnScan.Count(PosMappingUtils.IsMoon) == 1);//TODO extension method fuer count == 1 (kann bei 2 abbrechen)
            }
        }