여러 개의 속성값으로 라벨 문자열을 조립하여 실제 표시되는 라벨을 결정하는 코드의 예입니다.
CustomLabelFormatter = Xr.Class({ name: "CustomLabelFormatter", extend: Xr.label.ProgrammableLabelFormatter, requires: [Xr.label.ILabelFormatter], construct: function (layer) { this.superclass(layer); this._MGN_CD = -1; this._MGN_DT = -1; this._codeValues = { 'C01': '시설A', 'C02': '시설B', 'P01': '시설C', 'P03': '시설D', 'R03': '시설E', 'T01': '시설F' }; }, methods: { value: function (shapeRow, fieldSet, attributeRow) { if (this._EQMT_FIXPLC_RGN_SE_CD == -1) { this._EQMT_FIXPLC_RGN_SE_CD = fieldSet.fieldIndex("MGN_CD"); } if (this._FST_REGI_TSP == -1) { this._FST_REGI_TSP = fieldSet.fieldIndex("_MGN_DT"); } let code = attributeRow.valueAsString(this._MGN_CD); // 필드 2개의 값(_MGN_CD 필드의 코드값 + _MGN_DT 의 값)을 조합한 라벨 표시, 예: 시설B(2020-07-27 14:32:32) return this._codeValues[code] + "(" + attributeRow.valueAsString(this._MGN_DT) + ")"; } } }); var lyr = new Xr.layers.ShapeMapLayer("lyr", ...); let label = lyr.label(); label.enable(true); let formatter = new CustomLabelFormatter(lyr); label.formatter(formatter); lm.add(lyr);
다음은 속성값으로 도형의 스타일 심벌을 지정하는 코드의 예입니다.
CustomLayerTheme = Xr.Class({ name: "CustomLayerTheme", extend: Xr.theme.ProgrammableShapeDrawTheme, requires: [Xr.theme.IShapeDrawTheme], construct: function (/* ShapeMapLayer */ layer) { this.superclass(layer); this._fieldIndex = -1; let codes = ['R01', 'P02', 'R03', 'P01', 'P02', 'T01', 'T02', 'C01', 'C02']; let colors = ['#f1c40f', '#f39c12', '#e67e22', '#e74c3c', '#c0392b', '#ff0000', '#00ff00', '#0000ff', '#ff00ff']; let symbols = []; let cntCodes = codes.length; for (let i = 0; i < cntCodes; i++) { let SDS = new Xr.symbol.ShapeDrawSymbol(); SDS.brushSymbol().color(colors[i]).opacity(0.5); SDS.penSymbol().color(colors[i]).width(2); let symbol = { code: codes[i], symbol: SDS }; symbols[i] = symbol; } this._symbols = symbols; }, methods: { /* ShapeDrawSymbol */ symbol: function (/* ShapeRow */ shapeRow, /* FieldSet */ fieldSet, /* AttributeRow */ attributeRow) { if (this._fieldIndex === -1) { this._fieldIndex = fieldSet.fieldIndex("MGN_CD"); } let value = attributeRow.valueAsString(this._fieldIndex); let symbols = this._symbols; let symbol = undefined; let cntSymbols = symbols.length; for (var i = 0; i < cntSymbols; i++) { symbol = symbols[i]; if (value === symbol.code) { break; } } return symbol.symbol; }, /* boolean */ needAttribute: function () { return true; } } }); var lyr = new Xr.layers.ShapeMapLayer("lyr", ...); var newTheme = new CustomLayerTheme(lyr) lyr.theme(newTheme); lm.add(lyr);