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.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;