示例#1
0
            public RTreeNode(byte[] buffer)
            {
                System.Diagnostics.Debug.Assert(buffer.Length == 960, "buffer.Length == 960");

                Array.Reverse(buffer, 0, 2);
                _treedepth = BitConverter.ToInt16(buffer, 0);
                Array.Reverse(buffer, 2, 2);
                NodesCount = BitConverter.ToInt16(buffer, 2);
                if (NodesCount == 0)
                {
                    XMin = YMin = float.NaN;
                    XMax = YMax = float.NaN;
                    return;
                }


                Entries = new RTreeNodeEntry[NodesCount];
                var entry = new byte[24];

                Buffer.BlockCopy(buffer, 4, entry, 0, 24);
                Entries[0] = new RTreeNodeEntry(entry);
                XMin       = Entries[0].XMin;
                XMax       = Entries[0].XMax;
                YMin       = Entries[0].YMin;
                YMax       = Entries[0].YMax;

                var offset = 28;

                for (var i = 1; i < NodesCount; i++)
                {
                    Buffer.BlockCopy(buffer, offset, entry, 0, 24);
                    Entries[i] = new RTreeNodeEntry(entry);

                    if (Entries[i].XMin < XMin)
                    {
                        XMin = Entries[i].XMin;
                    }
                    if (Entries[i].XMax > XMax)
                    {
                        XMax = Entries[i].XMax;
                    }
                    if (Entries[i].YMin < YMin)
                    {
                        YMin = Entries[i].YMin;
                    }
                    if (Entries[i].YMax > YMax)
                    {
                        YMax = Entries[i].YMax;
                    }

                    offset += 24;
                }
            }
示例#2
0
            public RTreeNode(byte[] buffer)
            {
                System.Diagnostics.Debug.Assert(buffer.Length == 960, "buffer.Length == 960");

                Array.Reverse(buffer, 0, 2);
                _treedepth = BitConverter.ToInt16(buffer, 0);
                Array.Reverse(buffer, 2, 2);
                NodesCount = BitConverter.ToInt16(buffer, 2);
                if (NodesCount == 0)
                {
                    XMin = YMin = float.NaN;
                    XMax = YMax = float.NaN;
                    return;
                }


                Entries = new RTreeNodeEntry[NodesCount];
                var entry = new byte[24];
                Buffer.BlockCopy(buffer, 4, entry, 0, 24);
                Entries[0] = new RTreeNodeEntry(entry);
                XMin = Entries[0].XMin;
                XMax = Entries[0].XMax;
                YMin = Entries[0].YMin;
                YMax = Entries[0].YMax;
                
                var offset = 28;
                for (var i = 1; i < NodesCount; i++)
                {
                    Buffer.BlockCopy(buffer, offset, entry, 0, 24);
                    Entries[i] = new RTreeNodeEntry(entry);

                    if (Entries[i].XMin < XMin) XMin = Entries[i].XMin;
                    if (Entries[i].XMax > XMax) XMax = Entries[i].XMax;
                    if (Entries[i].YMin < YMin) YMin = Entries[i].YMin;
                    if (Entries[i].YMax > YMax) YMax = Entries[i].YMax;
                    
                    offset += 24;
                }
            }