static ShapefileHeader ReadFileHeader(BinaryReader br) //用于读取文件头的函数 { //************************************* /* * byte[] buff = br.ReadBytes(Marshal.SizeOf(typeof(ShapefileHeader))); * GCHandle handle = GCHandle.Alloc(buff, GCHandleType.Pinned);//handle读取buff数组在内存中的指针 * //指针指向的内存被映射给一个结构体实例header * ShapefileHeader header = (ShapefileHeader)Marshal.PtrToStructure * (handle.AddrOfPinnedObject(), typeof(ShapefileHeader)); * handle.Free(); //释放内存 将其还给C#管理 * return header; */ return((ShapefileHeader)GISTools.FromBytes(br, typeof(ShapefileHeader))); }
public static GISLayer ReadFile(string filename) { FileStream fsr = new FileStream(filename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); MyFileHeader mfh = (MyFileHeader)(GISTools.FromBytes(br, typeof(MyFileHeader))); //读取文件头 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse(typeof(SHAPETYPE), mfh.Shapetype.ToString()); //获取空间实体类型shapetype和 GISExtent Extent = new GISExtent(mfh.MinX, mfh.MaxX, mfh.MinY, mfh.MaxY); //地图范围extent string layername = GISTools.ReadString(br); //读取图层名 List <GISField> Fields = ReadFields(br, mfh.FieldCount); //读取字段信息 GISLayer layer = new GISLayer(layername, ShapeType, Extent, Fields); ReadFeatures(layer, br, mfh.FeatureCount); br.Close(); fsr.Close(); return(layer); }