arcgis序列化.docVIP

  • 13
  • 0
  • 约6.14千字
  • 约 10页
  • 2018-01-01 发布于河南
  • 举报
arcgis序列化

arcgis序列化 ArcEngine 中有很多对象是可以序列化,凡是实现了接口的对象都可序列化,序列化之后的好处呢有很多,比如:你可以将Ilayer,IfeatureLayer,Irasterlayer,ifeatureSender....等等序列化之后存为文件保存起来,或者是将序列化之后的对象转为字节数组存到数据库中保存,上述对象一般都是存有图层的信息,存起来之后有利于我们调用各种显示效果。ArcEngine 中对象属于COM对象,当我们在做多线程程序处理GIS数据的时候这些COM对象是不AE提供的序列化功能将这些COM对象序列化为自己数组或是文件来达到线程间数据共享的目的。 AE对象序列化后转成字节数组和从字节数组反序列化为AE对象 1、AE对象序列化后转成字节数组 /// summary /// 将传入的AE对象序列化成byte数组 /// /summary /// param name=objData要序列化的数据/param /// param name=type序列化的类别,0:rasterlayer,1:featurelayer/param private byte[] CreateByteFromObjData(object objData,int type) { //Engine中的BlobStream对象 IMemoryBlobStream pBlobStream = new MemoryBlobStream(); 将传入的对象转为 IPersistStream pPerStreamout = (IPersistStream)objData; //存入BlobStream pPerStreamout.Save(pBlobStream, 0); //转换为Variant类型 IMemoryBlobStreamVariant pVar = (IMemoryBlobStreamVariant)pBlobStream; object pobj = new object(); //转入Object对象 pVar.ExportToVariant(out pobj); //强制转换为Byte数组,并返回 byte[] tempRaster = pobj as byte[]; return ?tempRaster ; } 2、?从字节数组反序列化为AE对象 ? /// summary /// 将byte数组反序列化为AE对象 /// /summary ///param name=type反序列化类型,0:irasterlayer,1:Ifeaturelayer/param private IPersistStream GetRasterLayerFromByte(?byte[] tempByte ) { IMemoryBlobStream pBlobStream = new MemoryBlobStreamClass(); IMemoryBlobStreamVariant pVar = (IMemoryBlobStreamVariant)pBlobStream; IPersistStream pPerStreamout = null; object pobj = tempByte as object; //从Byte数据读取数据 pVar.ImportFromVariant(pobj); //根要转换的类型创建不同的?IPersistStream 对象 pPerStreamout = new RasterLayerClass(); /

文档评论(0)

1亿VIP精品文档

相关文档