chart = {
const width = 960,
height = 900;
const svg = d3.create("svg")
.attr("viewBox", [50, 50, width-140, height-105]);
var projection = d3
.geoMercator()
.fitSize([width - 50, height - 50], bbox);
var path0 = d3.geoPath().projection(projection);
var path1 = d3.geoPath().projection(projection);
var path2 = d3.geoPath().projection(projection);
var path3 = d3.geoPath().projection(projection);
var path4 = d3.geoPath().projection(projection);
var path5 = d3.geoPath().projection(projection);
var g = svg.append("g").attr("id", "paths");
g.selectAll("path0")
.data(bbox.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path0)
.style("fill", "rgb(181,222,225)")
.style("fill-opacity", ".3")
.style('stroke-opacity','.4')
.style("stroke-width", '.0')
.style("stroke", "rgb(0,0,0)")
g.selectAll("path1")
.data(land.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path1)
.style("fill", "rgb(255,255,255)")
.style("fill-opacity", "1")
.style('stroke-opacity','.4')
.style("stroke-width", '.5')
.style("stroke", "rgb(0,0,0)")
g.selectAll("path2")
.data(park.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path2)
.style("fill", "rgb(200,212,186)")
.style("fill-opacity", ".5")
.style('stroke-opacity','.4')
.style("stroke-width", '.0')
.style("stroke", "rgb(0,0,0)")
g.selectAll("path3")
.data(SubLns.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path3)
.style("fill", "none")
.style('stroke-opacity','1')
.style("stroke-width", '1')
.style("stroke", "rgb(89,135,149)")
g.selectAll("path4")
.data(Block.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path4)
.style("fill", "rgb(240,240,240)")
.style("fill-opacity", ".5")
.style('stroke-opacity','.4')
.style("stroke-width", '.5')
.style("stroke", "rgb(0,0,0)")
g.selectAll("path5")
.data(rt.features)
.enter()
.append("path")
.attr('class','outlines')
.attr("d", path5)
.style("fill", "none")
.style('stroke-opacity','1')
.style("stroke-width", '2')
.style("stroke", "rgb(0,0,0)")
.attr('stroke-dasharray','5 5')
svg
.append("text")
.attr('class','title')
.attr('x','71')
.attr('y','73')
.attr('font-family','helvetica')
.attr('font-size','lem')
.attr('font-weight','bold')
.style("fill", "rgb(0,0,0)")
.text('Drone Map for Lower Manhattan')
svg
.append("text")
.attr('class','title')
.attr('x','550')
.attr('y','500')
.attr('font-family','helvetica')
.attr('font-size','.9em')
.attr('font-weight','20')
.style("fill", "rgb(0,0,0)")
.text('Drone Routine')
svg
.append("line")
.attr('x1','545')
.attr('y1','495')
.attr('x2','510')
.attr('y2','495')
.attr('stroke-width','1.5')
.attr('stroke','rgb(0,0,0)')
var c = svg.selectAll("circle")
.data(sub_stat.features)
.enter()
.append("circle")
.attr("cx", function(d) {return path1.centroid(d)[0]})
.attr("cy", function(d) {return path1.centroid(d)[1]})
.attr('r',3)
.attr('fill','rgb(89,135,149)')
.attr('stroke-width','2')
.attr('stroke','rgb(0,0,0)')
.style('fill-opacity','1')
var t = svg.selectAll("text")
.data(sub_stat.features)
.enter()
.append("text")
.attr("x", function(d) {return path1.centroid(d)[0]})
.attr("y", function(d) {return path1.centroid(d)[1]-10})
.attr('font-family','helvetica')
.attr('font-size','.5em')
.attr('font-weight','bold')
.style("fill", "rgb(0,0,0)")
.style('fill-opacity','.7')
.attr('text-anchor','end')
.text(function(d) {return d.properties.name})
scaleBar
.projection(projection)
.size([width , height]);
svg.append("g")
.call(scaleBar);
return svg.node();
}