chart = {
const width = 1000;
const height = 1200;
const projection = d3.geoMercator().fitExtent([[0, -100], [width, height]], { "type": "LineString",
"coordinates": [ [167, -32], [177.5, -48] ]
});
const path = d3.geoPath()
.projection(projection);
const svg = d3.create('svg')
.attr('width', width)
.attr('height', height)
.attr('style', 'background: #f2f8f9')
svg.append('g').selectAll('path')
.data(landData.geometries)
.enter().append('path')
.attr('d', path)
.attr('fill', '#fff')
.attr('stroke', '#c9dfe5');
svg.append('g')
.selectAll('circle')
.data(placenameData)
.enter()
.append('circle')
.attr('data-name', d => d.name)
.attr("cx", (d) => projection([d.lon, d.lat])[0])
.attr("cy", (d) => projection([d.lon, d.lat])[1])
.attr("r", 7)
.style('fill-opacity', 0.85)
.attr('stroke', '#fff')
.attr('stroke-width', '2px')
.style("fill", (d) => colourMap[d.colour])
return svg.node();
}