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/archive/2009/04/03/1428866.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值