[javascript] D3.js를 이용한 지리적 시각화

D3.js는 데이터를 시각적으로 표현하기 위한 JavaScript 라이브러리입니다. 이를 이용하면 지도를 포함한 지리적 정보를 손쉽게 시각화할 수 있습니다.

D3.js를 사용하여 지리적 데이터를 시각화하는 방법에는 여러 가지가 있습니다. 그 중에서도 가장 흔한 방법은 TopoJSON 파일을 사용하는 것입니다. TopoJSON은 지리적 데이터를 효율적으로 표현하기 위해 개발된 데이터 형식입니다.

TopoJSON 파일을 불러오기

먼저 D3.js를 사용하여 TopoJSON 파일을 불러와야 합니다. 이를 위해 아래와 같은 코드를 사용할 수 있습니다.

d3.json("path/to/your/file.json").then(function(data){
  // 데이터 로드 후에 실행할 코드
  // ...
}).catch(function(error){
  // 에러 처리 코드
});

위 코드에서 path/to/your/file.json 부분을 실제 TopoJSON 파일의 경로로 바꿔야 합니다. 데이터를 성공적으로 로드하면 then 함수 내에 지도를 그리는 코드를 작성할 수 있습니다.

지도 그리기

지도를 그리기 위해서는 SVG 요소를 생성해야 합니다. D3.js를 사용하면 아래와 같이 간단한 코드로 SVG 요소를 생성할 수 있습니다.

var svg = d3.select("body")
            .append("svg")
            .attr("width", width)
            .attr("height", height);

위 코드에서 body 부분은 지도를 표시할 HTML 문서의 요소를 선택하는 부분입니다. 적절한 요소를 선택하여 사용하세요. widthheight는 SVG 요소의 크기를 지정하는 부분입니다.

SVG 요소를 생성한 후에는 projection을 정의하여 지도를 그릴 수 있습니다. projection은 좌표를 화면에 표시하는 방법을 지정하는 함수입니다.

var projection = d3.geoMercator()
                   .scale(scale)
                   .translate([translateX, translateY]);

위 코드에서 scale은 지도의 축척을 나타내는 값입니다. translateXtranslateY는 지도의 이동 거리를 나타냅니다.

경로 그리기

TopoJSON 데이터를 이용하여 경로를 그려야 합니다. D3.js는 path 요소를 이용하여 경로를 그리는 기능을 제공합니다.

var path = d3.geoPath()
             .projection(projection);

위 코드에서 projection은 앞에서 정의한 좌표 변환 함수입니다.

경로를 그리기 위해서는 먼저 TopoJSON 데이터를 선택해야 합니다.

svg.selectAll("path")
   .data(topojson.feature(data, data.objects.layer).features)
   .enter()
   .append("path")
   .attr("d", path)

위 코드에서 data는 TopoJSON 데이터를 나타내는 변수입니다. layer는 TopoJSON 파일 내의 레이어를 나타내는 이름입니다. 경로를 그리기 위해서는 path 속성에 path 변수를 지정해야 합니다.

마치며

D3.js를 사용하여 지리적 데이터를 시각화하는 방법을 알아보았습니다. TopoJSON 파일을 불러오고 지도를 그리는 과정을 단계별로 설명해드렸는데요. 이를 기반으로 자신의 프로젝트에 적용해보세요. 더 자세한 내용은 D3.js 공식 문서를 참고하시기 바랍니다.