Beispiel #1
0
 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)));
 }
Beispiel #2
0
        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);
        }