MapObjects 2.x 提供 Renderer 抽象基類,七大具體渲染器對應不同視覺化需求:
| 渲染器 | 用途 | 核心屬性/方法 |
|---|---|---|
| ChartRenderer | 直方圖/餅圖 | ChartType, FieldCount, set_Field(), set_Color() |
| DotDensityRenderer | 點密度圖 | Field, DotSize, DotColor, DotValue, DrawBackground |
| ValueMapRenderer | 唯一值渲染(分類) | Field, ValueCount, set_Value(), UseDefault, DefaultSymbol |
| ClassBreaksRenderer | 分級渲染(數值區間) | Field, BreakCount, set_Break(), SizeSymbols(), RampColors() |
| ZRenderer | Z 值立體渲染 | BreakCount, set_Break(), SymbolType, get_Symbol() |
| LabelRenderer | 標註渲染 | Field, get_Symbol().Font/Color |
| GroupRenderer | 組合渲染 | Add(renderer) |
var cr = new ChartRendererClass();
cr.ChartType = ChartTypeConstants.moBar; // 或 moPIE
cr.FieldCount = 2;
cr.set_Field(0, "SURF_ELEV"); cr.set_Color(0, ColorConstants.moRed);
cr.set_Field(1, "DEPTH"); cr.set_Color(1, ColorConstants.moGreen);
layer.Renderer = cr;
map.Refresh();
var ddr = new DotDensityRendererClass();
ddr.Field = "DEPTH";
ddr.DotSize = 3; ddr.DotColor = ColorConstants.moBlue;
ddr.DotValue = 1; ddr.DrawBackground = true;
layer.Renderer = ddr;
var vmr = new ValueMapRendererClass();
vmr.Field = "FIPS_CODE";
vmr.ValueCount = countryCodes.Count;
vmr.UseDefault = true; vmr.DefaultSymbol.Color = ColorConstants.moYellow;
for (short i = 0; i < vmr.ValueCount; i++)
vmr.set_Value(i, countryCodes[i]);
layer.Renderer = vmr;
var cbr = new ClassBreaksRendererClass();
cbr.SymbolType = SymbolTypeConstants.moPointSymbol;
cbr.Field = "POPULATION";
var stat = layer.Records.CalculateStatistics("POPULATION");
double val = stat.Mean - 3 * stat.StdDev;
for (int i = 0; i < 6; i++) {
if (val >= stat.Min && val <= stat.Max) {
cbr.BreakCount++;
cbr.set_Break(cbr.BreakCount - 1, val);
}
val += stat.StdDev;
}
cbr.SizeSymbols(3, 8); // 大小漸變
cbr.RampColors(moWhite, moRed); // 顏色漸變
layer.Renderer = cbr;
var gr = new GroupRendererClass();
gr.Add(valueMapRenderer); // 底層:面塊色
gr.Add(labelRenderer); // 上層:文字標註
layer.Renderer = gr;
map.Extent = map.FullExtent 強制重繪。MoveNext() 循環讀取屬性值,用畢須 Close() 釋放游標。CalculateStatistics 會拋例外。PointZ/PolygonZ 類型,否則無效果。將渲染器建立邏輯封裝為 IRendererFactory,依圖層類型/用戶選擇動態產生,UI 僅持有 Renderer 參考,符合開放封閉原則。範例專案採 WinForms + AxMapObjects2,代碼結構清晰,可直接遷移至 WPF/WinUI 專案(改用 WindowsFormsHost 載入 ActiveX)。