您的位置:首页 > 其它

为图层增加注记表达式

2016-04-15 10:26 344 查看
从注记表达式的文本文件中程序里读取并动态地增加注记。label expression 可以为简单的或vb脚本等

/// <summary>

/// 图层增加注记表达式

/// </summary>

/// <param name="map">The map.</param>

/// <param name="tcname">The tcname.</param>

public static void AddAnno(ILayer plyr , string tcname)

{

if (!System.IO.File.Exists(注记文件存储路径))

return;

IGeoFeatureLayer pGeoFeaLayer = (plyr as IFeatureLayer) as IGeoFeatureLayer;

IAnnotateLayerPropertiesCollection pAnoLayPC = pGeoFeaLayer.AnnotationProperties;

pAnoLayPC.Clear();

ILabelEngineLayerProperties pAnnoLayerProps = new LabelEngineLayerPropertiesClass();

(pAnnoLayerProps.BasicOverposterLayerProperties as IOverposterLayerProperties2).TagUnplaced = false;  ////是否覆盖,对应Arcmap:layer properties-》labels-》placement properties-》conflict detection ::place overlapping labels

pAnnoLayerProps.SymbolID = 0;

IBasicOverposterLayerProperties4 blp = pAnnoLayerProps.BasicOverposterLayerProperties as IBasicOverposterLayerProperties4;

//blp.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;

blp.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape; ////每个图形只标注一个  label properties--palcement properties--duplicate labels

blp.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal; //// label properties--palcement properties--polygon settings

// blp.PlaceOnlyInsidePolygon = true;  ////保证在图形内部  label properties--palcement properties--only place label inside polygon

string annoExpression = GetAnnoExpression(注记文件存储路径);

if (annoExpression.ToUpper().IndexOf("FUNCTION") >= 0)

pAnnoLayerProps.IsExpressionSimple = false;

else

pAnnoLayerProps.IsExpressionSimple = true; //对应aArcMap的advanced选项

pAnnoLayerProps.Expression = annoExpression;

pAnnoLayerProps.Symbol = CreateTextSymbol();

pGeoFeaLayer.DisplayAnnotation = true;

}

/// <summary>

/// 根据注记文件存储路径获取标注表达式

/// </summary>

/// <param name="tcname">The tcname.</param>

/// <returns></returns>

public static string GetAnnoExpression(string注记文件存储路径)

{

StreamReader sr = new StreamReader(注记文件存储路径);

string annoExpression = string.Empty;

while (!sr.EndOfStream)

{

string text = sr.ReadLine();

if (annoExpression == string.Empty)

annoExpression = text;

else

annoExpression = annoExpression + "\r\n" + text;

}

return annoExpression;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: