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

本文介绍了一个 DelphiArcEngine 中实现的函数,该函数可以在地图上根据指定条件为特定图层添加文本注记。函数允许设置注记的字段、颜色、条件表达式及文字大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值