2.5d-ui
GitHub
Web Component · Edu

<iso-city>

트리맵(Treemap)으로 바닥을 구역으로 나누고, 그 위에 건물을 세웁니다. 밑면 넓이는 학생 수(size), 건물 높이는 측정 지표(v)를 나타내어 복합적인 학교 통계를 도시처럼 한눈에 조망합니다.

가상 예시 데이터이며 외부로 전송되지 않습니다. 학년·학급별 집계 지표 예시입니다.

예시: 학교 도시 (학년별 학급 독서량)

구역은 학년을 나타내며, 각 구역 안의 건물은 학급입니다. 밑면은 학생 수, 높이는 1인당 월 독서 권수(권)입니다.

트리맵 알고리즘과 스마트 라벨링

iso-city는 정보 밀도가 높은 다차원 계층 데이터를 효과적으로 전달하기 위해 설계되었습니다.

속성

속성형식의미
dataJSON 객체계층 구조 객체(뿌리 → 구역 → 건물). 잘못된 형식이면 오류 문구를 표시합니다
max숫자축척 최댓값. 생략 시 전체 건물 중 최댓값
unit숫자(px)기본 등각 단위(--iso-u). 기본 24
height-units숫자최댓값일 때의 블록 높이 단위. 기본 5
label문자열접근성 캡션(aria-label 및 숨김 표 caption)
renderercss | svg | auto렌더링 방식. 기본 auto (건물 200개 초과 시 SVG 자동 전환)

data 객체 (Root)

키형식의미
k문자열 · 필수전체 이름 (예: "학교")
children배열 · 필수구역(District) 객체들의 배열

District 객체

키형식의미
k문자열 · 필수구역 이름 (예: "1학년")
children배열 · 필수해당 구역 내 건물(Building) 객체들의 배열

Building 객체

키형식의미
k문자열 · 필수건물 이름 (예: "1반")
size양의 숫자 · 필수밑면 넓이에 반영되는 크기 (예: 학생 수)
v0 이상 숫자 · 필수건물 높이에 반영되는 측정 지표 (예: 독서량)
cCSS 색 · 선택건물 블록의 색상

이벤트

건물 블록을 누르거나 키보드로 선택하면 iso-select가 발생합니다. detail은 { district, index, item }입니다.

document.querySelector("iso-city").addEventListener("iso-select", (e) => {
  const { district, index, item } = e.detail;
  console.log(`${district}번 구역의 ${item.k}: 학생 수 ${item.size}명, 수치 ${item.v}`);
});

빈 상태와 오류

데이터가 올바르지 않으면 오류 상태 메시지가 표시됩니다.

접근성