private void SplitBlock(SpatialSplitInfo spatialSplitInfo) { var block = spatialSplitInfo.Block; lastBlock++; var splitInfo = block.Split(GetFileName(lastBlock)); spatialSplitInfo.SplitByLatitude = splitInfo.SplitByLatitude; spatialSplitInfo.SplitValue = splitInfo.SplitValue; spatialSplitInfo.FirstChild = splitInfo.FirstChild; spatialSplitInfo.SecondChild = splitInfo.SecondChild; spatialSplitInfo.Block = null; }
private void SplitToReducedSize(SpatialSplitInfo spatialSplitInfo) { if (spatialSplitInfo.Block == null) { SplitToReducedSize(spatialSplitInfo.FirstChild); SplitToReducedSize(spatialSplitInfo.SecondChild); } else { if (spatialSplitInfo.Block.Size > ReducedBlockLimit) { SplitBlock(spatialSplitInfo); SplitToReducedSize(spatialSplitInfo); } } }
private void WriteSplitInfo(SpatialSplitInfo spatialSplitInfo, BinaryWriter writer) { if (spatialSplitInfo.Block == null) { writer.Write(spatialSplitInfo.SplitByLatitude ?(byte)1 : (byte)2); if (!spatialSplitInfo.SplitValue.HasValue) { throw new InvalidOperationException("SpatialSplitInfo must have SplitValue when no Block is defined."); } writer.Write(spatialSplitInfo.SplitValue.Value); WriteSplitInfo(spatialSplitInfo.FirstChild, writer); WriteSplitInfo(spatialSplitInfo.SecondChild, writer); } else { spatialSplitInfo.Block.Flush(); writer.Write((byte)0); writer.Write(spatialSplitInfo.Block.FileName); } }