using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesRasterUI;
using Pacia.Map.Engine;
using ESRI.ArcGIS.Display;
/// <summary>
/// 序列化图层的标注属性
/// </summary>
/// <param name="lyr">矢量图层</param>
/// <returns>byte[],包括标注的字体样式和位置</returns>
public static byte[] SerializeLabelProperty(IGeoFeatureLayer lyr)
{
try
{
IXMLStream pStream = new XMLStreamClass();
IXMLWriter pWriter = new XMLWriterClass();
pWriter.WriteTo((IStream)pStream);
IXMLSerializer pSerializer = new XMLSerializerClass();
ESRI.ArcGIS.Carto.IAnnotateLayerProperties pAnno;
IElementCollection pEle;
IElementCollection pEle2;
lyr.AnnotationProperties.QueryItem(0, out pAnno, out pEle, out pEle2);
ILabelEngineLayerProperties pLabelPro = pAnno as ILabelEngineLayerProperties;
ESRI.ArcGIS.Carto.IBasicOverposterLayerProperties pBasicLyrProp = pLabelPro.BasicOverposterLayerProperties;
ESRI.ArcGIS.Display.IFormattedTextSymbol pFormatSymbol = pLabelPro.Symbol as ESRI.ArcGIS.Display.IFormattedTextSymbol;
IPropertySet propertySet = new PropertySetClass();
propertySet.SetProperty("BasicOverposterLayerProperties", pBasicLyrProp);
propertySet.SetProperty("FormattedTextSymbol", pFormatSymbol);
pSerializer.WriteObject(pWriter, null, null, "", "", propertySet);
return pStream.SaveToBytes();
}
catch
{
return null;
}
return null;
}
图层的标注属性,除了字段值及样式以外,还有字体的旋转角度等,使用序列化的方式直接保存起来,方便使用。