zoukankan      html  css  js  c++  java
  • Delphi版 创建ClassBreaks专题地图

    function ClassBreaksRenderer(pLayer: ILayer; sField: string; pColor: IColor; PColorFrom: IColor;
       pColorTo: IColor; eStyle: TOleEnum; iBreakCount: Integer): Boolean;
    var
       pGeoLayer: IGeoFeatureLayer;
       pTable   : ITable;
       pRenderer: IClassBreaksRenderer;
       pTableHistogram: ITableHistogram;
       pBasicHistogram: IBasicHistogram;
       values   : OleVariant;
       vFrequency: OleVariant;
       ClassResult: OleVariant;
       pClassifyGen: IClassifyGEN;

       pColorRamp: IAlgorithmicColorRamp;
       pEnumColors: IEnumColors;
       pFillSymbol: ISimpleFillSymbol;

       ok       : WordBool; //创建色带成功标志
       I        : Integer;
    begin
       pGeoLayer := pLayer as IGeoFeatureLayer;
       pTable := pLayer as ITable;

       //按照 数值字段分级
       pTableHistogram := CoBasicTableHistogram.Create as ITableHistogram;
       pTableHistogram.Field := sField;
       pTableHistogram.Table := pTable;

       pBasicHistogram := pTableHistogram as IBasicHistogram;

       //先统计每个值和各个值出现的次数
       pBasicHistogram.GetHistogram(values, vfrequency);

       //创建平均分级对象
       pClassifyGen := CoEqualInterval.Create as IClassifyGEN;

       //用统计结果进行分级 ,级别数目为 iBreakcount
       pClassifyGen.Classify(values, vFrequency, iBreakCount);

       //获得分级结果,是个 双精度类型数组

       ClassResult := pClassifyGen.ClassBreaks;

       pRenderer := CoClassBreaksRenderer.Create as IClassBreaksRenderer;
       pRenderer.Field := sField;
       pRenderer.BreakCount := VarArrayHighBound(ClassResult, 1); 

       //创建色带
       pColorRamp := CoAlgorithmicColorRamp.Create as IAlgorithmicColorRamp;
       pColorRamp.FromColor := PColorFrom;
       pColorRamp.ToColor := pColorTo;
       pColorRamp.Size := VarArrayHighBound(ClassResult, 1);
       pColorRamp.CreateRamp(ok);

       pEnumColors := pColorRamp.Colors;
       pEnumColors.Reset;

       pFillSymbol := CoSimpleFillSymbol.Create as ISimpleFillSymbol;
       for I := 0 to VarArrayHighBound(ClassResult, 1) - 1 do
       begin
          pFillSymbol.Color := pEnumColors.Next;
          pFillSymbol.Style := esriSFSSolid;
          pRenderer.Symbol[I] := pFillSymbol as ISymbol;
          pRenderer.Break[I] := ClassResult[i + 1];
       end;

       //格式化标签 根据需要设定
       for I := 0 to iBreakCount - 1 do
       begin
          if I > 0 then
             pRenderer.Label_[I] := FormatFloat('#.000', pRenderer.Break[I - 1]) + '--' +
                                    FormatFloat('#.000', pRenderer.Break[I])
          else
             pRenderer.Label_[I] :=  '<=  ' +  FormatFloat('#.000', pRenderer.Break[I]);
       end;

       pGeoLayer.Renderer := pRenderer as IFeatureRenderer;

       Result := true;
    end;
  • 相关阅读:
    1767:字符合并
    成绩单
    floj 2264
    floj 2265 【lxs Contest #141】航海舰队
    CF932D Tree
    1745:分组
    1744:跳台阶
    Xamarin.Forms之跨平台性能
    Xamarin.Forms之部署和测试(性能)
    Xamarin.Forms数据绑定
  • 原文地址:https://www.cnblogs.com/chinacodegear/p/1404340.html
Copyright © 2011-2022 走看看