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);
            }
        }