- 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)