zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    sed匹配多行并替换其中的内容
    sysbench 安装、使用和测试
    linux inode号已满的解决办法
    Linux双网卡绑定
    es安装
    kibana安装
    filebeat
    Codeforces 464E The Classic Problem (最短路 + 主席树 + hash)
    Codeforces 1137C Museums Tour (强连通分量, DP)
    HDU 4921 Map(状态压缩)
  • 原文地址:https://www.cnblogs.com/chinacodegear/p/1428866.html
Copyright © 2011-2022 走看看