Example #1
0
        /// <summary>
        /// 读取shx索引信息
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        private static List <ShxRecord> GetAllIndexRecords(Stream stream)
        {
            List <ShxRecord> records = new List <ShxRecord>();

            try
            {
                stream.Position = 100;
                byte[] streamBuffer;
                do
                {
                    streamBuffer = ShpUtil.ReadBytesFromStream(stream, 8);
                    if (streamBuffer.Length < 8)
                    {
                        break;
                    }
                    else
                    {
                        ShxRecord myRecord = new ShxRecord(streamBuffer);
                        records.Add(myRecord);
                    }
                } while (streamBuffer.Length > 0);
            }
            catch
            {
                records.Clear();
            }
            return(records);
        }
Example #2
0
        /// <summary>
        /// 打开shp、shx文件流
        /// 读取shp、shx信息时需要首先执行此操作
        /// 同时操作头文件读取和ShxRecord、ShpRecord示例化
        /// </summary>
        /// <param name="ofs"></param>
        public void Open(Stream shpStream, Stream shxStream)
        {
            if (mShpFile != null)
            {
                Close();
            }

            mShpFile       = shpStream;
            mShxFile       = shxStream;
            mShpFileReader = null;
            mShpFileWriter = null;
            mShxFileReader = null;
            mShxFileWriter = null;
            if (mShpFile.CanRead)
            {
                mShpFileReader = new BinaryReader(mShpFile);
            }
            if (mShpFile.CanWrite)
            {
                mShpFileWriter = new BinaryWriter(mShpFile);
            }

            if (mShxFile.CanRead)
            {
                mShxFileReader = new BinaryReader(mShxFile);
            }
            if (mShxFile.CanWrite)
            {
                mShxFileWriter = new BinaryWriter(mShxFile);
            }
            //reset position
            mRecordsReadCount = 0;
            //assume header is not written
            mHeaderWritten = false;

            //read the header
            if (shpStream.CanRead)
            {
                //try to read the header...
                try
                {
                    mHeader.Read(mShpFileReader);
                    mHeaderWritten = true;
                }
                catch (EndOfStreamException)
                {
                    //could not read header, file is empty
                    mHeader        = new ShpHeader();
                    mHeaderWritten = false;
                }
            }
            if (mShpFile != null)
            {
                mIsReadOnly    = !mShpFile.CanWrite;
                mIsForwardOnly = !mShpFile.CanSeek;
            }
            mShxRecord = new ShxRecord(mHeader);
            mShpRecord = new ShpRecord(mHeader);
        }
Example #3
0
 /// <summary>
 /// 写入shp
 /// </summary>
 /// <param name="wktList"></param>
 public void WriteShp(List <string> wktList)
 {
     if (mFileCreat)
     {
         mShpRecord.GetWKTInfo(wktList);
         mShxRecord = new ShxRecord(mShpRecord.Header);
         mHeader.Write(mShpFileWriter);
         mShxRecord.RecordDic = mShpRecord.Write(mShpFileWriter);
     }
 }
        public ShxRecord[] ReadRecordes(int startRecIndex, int count)
        {
            using (var stream = MMFCache.GetFileReadItems(_FilePath)
                                .MMF.CreateViewStream(100 + startRecIndex * 8, count * 8))

            {
                using (var brShapeIndex = new BinaryReader(stream))
                {
                    var records = new ShxRecord[count];

                    for (int i = 0; i < count; i++)
                    {
                        int offset  = 2 * Util.SwapByteOrder(brShapeIndex.ReadInt32()); // word to byte
                        int cLength = 2 * Util.SwapByteOrder(brShapeIndex.ReadInt32());

                        records[i] = new ShxRecord(offset, cLength);
                    }
                    return(records);
                }
            }
        }