FAQ
ArcObjects でレンダラーの閾値を設定する方法

ナレッジ番号:5593 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

数値分類などのレンダラーでは、クラスの上限値を IClassBreaksRenderer::Break プロパティや IRasterClassifyColorRampRenderer::Break プロパティなどで設定します。

閾値を一括で指定したい場合、対象データおよびフィールド値をもとに分類をし、自動的に最適な閾値を指定することが可能です。
分類を行う場合分類手法を設定しますが、その指定は IClassifyGEN インターフェイスを使用します。

自然分類 (Natural Breaks) の使用例は、★関連ナレッジがみつかりませんでした★こちらの FAQ でご確認ください。

サンプル コード

以下は、指定間隔分類で分類した例です。

public IClassBreaksRenderer MakeClassbreaksDedinedIntervalRenderer(IFeatureLayer pFLayer, string aname, int ainterval)
{
    IClassBreaksRenderer pRender = new ClassBreaksRendererClass();
    ITable pTable;
    IGeoFeatureLayer pGeoLayer;
    IClassifyGEN pClassifyGEN;
    bool ok;

    IBasicHistogram pHistogram;
    object frqs;
    object xVals;
    //double[] cb;
    object cb;

    IAlgorithmicColorRamp pColorRamp;
    IEnumColors pEnumColors;
    IRgbColor pColor1;
    IRgbColor pColor2;
    IClassBreaksUIProperties pUIProperties;
    ISimpleFillSymbol pSimpleFillSym;

    pTable = pFLayer.FeatureClass as ITable;
    pGeoLayer = pFLayer as IGeoFeatureLayer;
    pClassifyGEN = new DefinedIntervalClass();
    pHistogram = new BasicTableHistogramClass();
    ITableHistogram pTableHistogram = (ITableHistogram)pHistogram;

    //間隔を追加
    IIntervalRange2 pIntervalRange2 = (IIntervalRange2)pClassifyGEN;
    //間隔を指定
    pIntervalRange2.IntervalRange = ainterval;
    //分類用の暫定的なクラス数(わざと大きい数値)
    int tempclass = 30;

    pTableHistogram.Field = aname;      //レンダリングするフィールド
    pTableHistogram.Table = pTable;
    pHistogram.GetHistogram(out xVals, out frqs);
    pClassifyGEN.Classify(xVals, frqs, tempclass); //クラス数は暫定的に入れる

    //aclass に設定されたクラス数で分類する
    cb = pClassifyGEN.ClassBreaks;
    //カラーランプ作成のため、正確なクラス数を配列より求める
    int aclass = ((double[])cb).Length;

    pRender.Field = aname;
    pRender.BreakCount = aclass;
    pRender.MinimumBreak = ((double[])cb)[0];
    // minimum break は最小の閾値ではなく、データセットにおける実際の最小の値、最小値

    // カラーランプの作成
    pColorRamp = new AlgorithmicColorRampClass();
    pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

    pColor1 = new RgbColorClass();
    pColor2 = new RgbColorClass();

    pColor1.Red = 0;
    pColor1.Green = 0;
    pColor1.Blue = 225;
    pColor2.Red = 225;
    pColor2.Green = 0;
    pColor2.Blue = 0;

    pColorRamp.FromColor = pColor1;
    pColorRamp.ToColor = pColor2;
    pColorRamp.Size = aclass;
    pColorRamp.CreateRamp(out ok);
    pEnumColors = pColorRamp.Colors;
    pEnumColors.Reset();

    pUIProperties = pRender as IClassBreaksUIProperties;
    pUIProperties.ColorRamp = "Custom";
    pSimpleFillSym = new SimpleFillSymbolClass();


 //各クラスの設定
    for (int j = 0; j <= aclass - 1; j++)
    {
        if (((double[])cb).Length-1==j)
        {
            pRender.set_Label(j, ((double[])cb)[j] + " - ");
        }
        else
        {
            pRender.set_Break(j, ((double[])cb)[j + 1]);
            pRender.set_Label(j, ((double[])cb)[j] + " - " + ((double[])cb)[j + 1]);
        }

        pUIProperties.set_LowBreak(j, ((double[])cb)[j]);
        pSimpleFillSym.Color = pEnumColors.Next();
        pRender.set_Symbol(j, (ISymbol)pSimpleFillSym);
    }
    return pRender;
}

メタデータ

種類

製品