• 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;
  • 相关阅读:
    100 numpy exercises
    IndentationError: unindent does not match any outer indentation level
    Git详解之七:自定义Git
    Git详解之六:Git工具
    Git详解之五:分布式Git
    Git详解之四:服务器上的Git
    Git详解之三:Git分支
    Git详解之二:Git基础
    Git详解之一:Git起步
    Jquery基础之事件操作
  • 原文地址:https://www.cnblogs.com/chinacodegear/p/1428866.html
Copyright © 2020-2023  润新知