private static IPosMappingScanNode CreateNode(PosMapper2 posMapper, IList <IDScanItem> leftBorderItems, IList <IDScanItem> rightBorderItems) { var itemsAtNode = rightBorderItems.Without(leftBorderItems).ToList(); var moonGroups = PosMappingUtils.GetMoonGroups(itemsAtNode); if (IsCluster(moonGroups)) { var moonGroup = moonGroups.First().First(); return(new MoonClusterNode(posMapper, PosMappingUtils.GetLowerBoundInKm(moonGroup.Distance), PosMappingUtils.GetUpperBoundInKm(moonGroup.Distance), leftBorderItems, rightBorderItems)); } return(new DefaultPosMappingScanNode(posMapper, moonGroups, leftBorderItems, rightBorderItems)); }
private void InitialScan(IList <IDScanItem> obj) { CheckForOfflineTowers(obj); _currentNodeToScan = new DefaultPosMappingScanNode(this, PosMappingUtils.GetMoonGroups(obj), new IDScanItem[0], obj); if (_currentNodeToScan.IsLeaf) { var moonItems = _currentNodeToScan.GetMoonItems(); if (moonItems.Any()) { OnMoonsScanned(moonItems); } OnScanDone(); return; } OnNextScanRequest(_currentNodeToScan.PivotalScanRangeInKm); }