Delphi ArcEngine 根据条件添加文本注记

function Annotation4Layer(aeMapControl: TMapControl; pLayer: ILayer; sField: string; pColor: IRgbColor;

  sWhere: string = ''; iTextSize: SmallInt = 9): Boolean;

//带条件的 文字标注 ,指定图层 ,字段,颜色 和 条件表达式 ,文字大小

var
  pFeatureLayer: IFeatureLayer;
  pFeatureCursor: IFeatureCursor;
  pFeature: IFeature;
  pFields: IFields;
  pEnvelope: IEnvelope;
  pPoint: IPoint;

  pTextSymbol: ITextSymbol;
  pTextElement: ITextElement;
  pElement: IElement;

  pActiveView: IActiveView;
  pGraphicsContainer: IGraphicsContainer;
  pQueryFilter: IQueryFilter;
  i: Integer;
begin
  pFeatureLayer := pLayer as IFeatureLayer;

  if sWhere = '' then
  begin
    pFeatureCursor := pFeatureLayer.Search(nil, True);
  end
  else
  begin
    pQueryFilter := CoQueryFilter.Create as IQueryFilter;
    pQueryFilter.WhereClause := sWhere;
    try
      pFeatureCursor := pFeatureLayer.Search(pQueryFilter, True);
    except
      on E: Exception do
      begin
        ShowMessage('查询表达式错误!');
        Exit(False);
      end;
    end;
  end;

  pFeature := pFeatureCursor.NextFeature;

  if pFeature = nil then //空图层时 退出
    Exit(False);

  pFields := pFeature.Fields;
  i := pFields.FindField(sField);

  if i < 0 then //字段错误 退出
    Exit(False);

  pActiveView := aeMapControl.ActiveView;
  pGraphicsContainer := aeMapControl.Map as IGraphicsContainer;

  //文本符号
  pTextSymbol := CoTextSymbol.Create as ITextSymbol;
  pTextSymbol.Size := iTextSize;
  pTextSymbol.Color := pColor;

  pPoint := CoPoint.Create as IPoint;
  while pFeature <> nil do
  begin
    //文本元素
    pTextElement := CoTextElement.Create as ITextElement;
    pTextElement.ScaleText := True;
    pTextElement.Symbol := pTextSymbol;
    pTextElement.Text := VarToStr(pFeature.Value[i]);

    pEnvelope := pFeature.Extent;
    pPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2);

    pElement := pTextElement as IElement;
    pElement.Geometry := pPoint;

    pGraphicsContainer.AddElement(pElement, 0);
    pFeature := pFeatureCursor.NextFeature;
  end;
  pActiveView.PartialRefresh(esriViewGraphics, nil, nil);
  Result := True;
end;
原文地址:https://www.cnblogs.com/chinacodegear/p/1428866.html