{
const svg = d3
.create('svg')
.attr('width', renderData.width)
.attr('height', renderData.height);
const clippedWidth = renderData.width - renderData.margin * 2;
const clippedHeight = renderData.height - renderData.margin * 2;
const geoMercator = d3
.geoMercator()
.center([128, 36])
.fitSize([clippedWidth, clippedHeight], geoJson);
const pathGen = d3.geoPath(geoMercator);
const stage = svg
.append('g')
.attr('transform', `translate(${renderData.margin},${renderData.margin})`);
const textX = 10;
const textY = 10;
const infoText = stage
.append('g')
.attr('transform', `translate(${textX},${textY})`)
.append('text');
infoText.text('no data');
const onMouseHover = d => {
stage
.selectAll('.geopath')
.filter(td => td.properties.name === d.properties.name)
.attr('fill', 'red');
infoText.text(d.properties.name);
};
const onMouseLeave = d => {
stage
.selectAll('.geopath')
.filter(td => td.properties.name === d.properties.name)
.attr('fill', 'gray');
infoText.text('선택 안함');
};
const tEnter = enter =>
enter
.append('path')
.attr('d', pathGen)
.attr('stroke', 'black')
.attr('fill', 'gray')
.classed('geopath', true)
.on('mouseenter', onMouseHover)
.on('mouseleave', onMouseLeave);
const tUpdate = null;
const tExit = null;
stage
.selectAll('.geopath')
.data(geoJson.features)
.join(tEnter, tUpdate, tExit);
return svg.node();
}