여러 개의 속성값으로 라벨 문자열을 조립하여 실제 표시되는 라벨을 결정하는 코드의 예입니다.
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);