NailNumberGraphicRow 사용 API 정리

지도 객체가 map이라고 할때, 먼저 chart라는 이름의 그래픽 요소를 추가함.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
map.layers().remove("chart");
let gl = new Xr.layers.GraphicLayer("chart");
map.layers().add(gl);
map.layers().remove("chart"); let gl = new Xr.layers.GraphicLayer("chart"); map.layers().add(gl);
map.layers().remove("chart");
let gl = new Xr.layers.GraphicLayer("chart");
map.layers().add(gl);

그래픽 요소가 표시되는 중심 좌표를 잡기 위해 참조되는 ShapeLayer가 ‘shpLyr’이라고 할때, 필요한 변수들을 준비함.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let graphicRows = gl.rowSet();
let lyr = map.layers("shpLyr");
let rows = lyr.shapeRowSet().rows();
let ars = lyr.attributeRowSet();
let graphicRows = gl.rowSet(); let lyr = map.layers("shpLyr"); let rows = lyr.shapeRowSet().rows(); let ars = lyr.attributeRowSet();
let graphicRows = gl.rowSet();
let lyr = map.layers("shpLyr");
let rows = lyr.shapeRowSet().rows();
let ars = lyr.attributeRowSet();

통계 데이터가 저장된 객체를 준비함. 이 객체는 네트워크를 통해 받은 데이터로 구성되는 것이 일반적임.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let tables = {
"description": "서울시 구별 코로나확진자 수 2020년 5월 18일 10시 기준",
"강남구": 71, "강동구": 19, "강북구": 8, "강천구": 31, "관악구": 53,
"광진구": 12, "구로구": 35, "금천구": 13, "노원구": 27, "도봉구": 14,
"동대문구": 34, "동작구": 37, "마포구": 24, "서대문구": 22, "서초구": 40,
"성동구": 22, "성북구": 27, "송파구": 44, "양천구": 23, "영등포구": 27,
"용산구": 34, "은평구": 30, "종로구": 18, "중구": 8, "중랑구": 17
};
let tables = { "description": "서울시 구별 코로나확진자 수 2020년 5월 18일 10시 기준", "강남구": 71, "강동구": 19, "강북구": 8, "강천구": 31, "관악구": 53, "광진구": 12, "구로구": 35, "금천구": 13, "노원구": 27, "도봉구": 14, "동대문구": 34, "동작구": 37, "마포구": 24, "서대문구": 22, "서초구": 40, "성동구": 22, "성북구": 27, "송파구": 44, "양천구": 23, "영등포구": 27, "용산구": 34, "은평구": 30, "종로구": 18, "중구": 8, "중랑구": 17 };
let tables = {
    "description": "서울시 구별 코로나확진자 수 2020년 5월 18일 10시 기준",
    "강남구": 71, "강동구": 19, "강북구": 8, "강천구": 31, "관악구": 53,
    "광진구": 12, "구로구": 35, "금천구": 13, "노원구": 27, "도봉구": 14,
    "동대문구": 34, "동작구": 37, "마포구": 24, "서대문구": 22, "서초구": 40,
    "성동구": 22, "성북구": 27, "송파구": 44, "양천구": 23, "영등포구": 27,
    "용산구": 34, "은평구": 30, "종로구": 18, "중구": 8, "중랑구": 17
};

이제 구성할 데이터의 수만큼 NailNumberGraphicRow 그래픽 요소와 1:1로 필요한 NailNumberShapeData를 생서하여 그래픽 레이어에 추가함.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
for (var fid in rows) {
let aRow = ars.row(fid);
let sRow = rows[fid];
let pt = sRow.shapeData().representativePoint();
let title = aRow.valueAsString(0).trim();
let value = tables[title];
let nnsd = new Xr.data.NailNumberShapeData({
pos: [pt.x, pt.y],
outbox_size: [55, 55],
inbox_size: [42, 25],
title: title,
value: value,
title_offset_y: 1,
value_offset_y: 2
});
let nngr = new Xr.data.NailNumberGraphicRow(fid, nnsd);
graphicRows.add(nngr);
}
for (var fid in rows) { let aRow = ars.row(fid); let sRow = rows[fid]; let pt = sRow.shapeData().representativePoint(); let title = aRow.valueAsString(0).trim(); let value = tables[title]; let nnsd = new Xr.data.NailNumberShapeData({ pos: [pt.x, pt.y], outbox_size: [55, 55], inbox_size: [42, 25], title: title, value: value, title_offset_y: 1, value_offset_y: 2 }); let nngr = new Xr.data.NailNumberGraphicRow(fid, nnsd); graphicRows.add(nngr); }
for (var fid in rows) {
    let aRow = ars.row(fid);
    let sRow = rows[fid];
    let pt = sRow.shapeData().representativePoint();
    let title = aRow.valueAsString(0).trim();
    let value = tables[title];
    let nnsd = new Xr.data.NailNumberShapeData({
        pos: [pt.x, pt.y],
        outbox_size: [55, 55],
        inbox_size: [42, 25],
        title: title,
        value: value,
        title_offset_y: 1,
        value_offset_y: 2
    });

    let nngr = new Xr.data.NailNumberGraphicRow(fid, nnsd);
    graphicRows.add(nngr);
}

그래픽 요소들의 구성이 완료되면 실제 화면의 표시되도록 아래의 코드를 호출함.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
gl.refresh();
gl.refresh();
gl.refresh();

결과는 아래와 같음.

다소 밋밋한 표현인데, 이를 값에 따라 색상을 달리하고 색상을 단순 솔리드가 아닌 그라디언트 계열로 표현하기 위해 17번과 18번 코드 밑에 아래의 코드를 추가함.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nngr.brushSymbolForOutbox(new Xr.symbol.LinearGradientBrushSymbol());
if (value > 50) {
nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
stops: [
{ "offset": "0%", "step-color": "#ff0000" },
{ "offset": "100%", "step-color": "#660000" }
]
}));
} else if (value < 20) {
nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
stops: [
{ "offset": "0%", "step-color": "#00ff00" },
{ "offset": "100%", "step-color": "#006600" }
]
}));
} else {
nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
stops: [
{ "offset": "0%", "step-color": "#7F8C8D" },
{ "offset": "100%", "step-color": "#303030" }
]
}));
}
nngr.brushSymbolForOutbox(new Xr.symbol.LinearGradientBrushSymbol()); if (value > 50) { nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({ stops: [ { "offset": "0%", "step-color": "#ff0000" }, { "offset": "100%", "step-color": "#660000" } ] })); } else if (value < 20) { nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({ stops: [ { "offset": "0%", "step-color": "#00ff00" }, { "offset": "100%", "step-color": "#006600" } ] })); } else { nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({ stops: [ { "offset": "0%", "step-color": "#7F8C8D" }, { "offset": "100%", "step-color": "#303030" } ] })); }
nngr.brushSymbolForOutbox(new Xr.symbol.LinearGradientBrushSymbol());

if (value > 50) {
    nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
        stops: [
            { "offset": "0%", "step-color": "#ff0000" },
            { "offset": "100%", "step-color": "#660000" }
        ]
    }));
} else if (value < 20) {
    nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
        stops: [
            { "offset": "0%", "step-color": "#00ff00" },
            { "offset": "100%", "step-color": "#006600" }
        ]
    }));
} else {
    nngr.brushSymbolForInbox(new Xr.symbol.LinearGradientBrushSymbol({
        stops: [
            { "offset": "0%", "step-color": "#7F8C8D" },
            { "offset": "100%", "step-color": "#303030" }
        ]
    }));
}

결과는 다음과 같음.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다