D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
altocumulus
Full window
Github gist
Geo circle
<!DOCTYPE html> <meta charset="utf-8"> <style> .stroke { fill: none; stroke: #000; stroke-width: 3px; } .fill { fill: #fff; } .graticule { fill: none; stroke: #777; stroke-width: 0.5px; stroke-opacity: 0.5; } .land { fill: #222; } .boundary { fill: none; stroke: #fff; stroke-width: 0.5px; } .circle { stroke: red; fill: red; fill-opacity: 0.2; } </style> <svg width="960" height="960"></svg> <script src="https://d3js.org/d3.v5.js"></script> <script src="https://unpkg.com/topojson-client@2"></script> <script> var svg = d3.select("svg"), width = +svg.attr("width"), height = +svg.attr("height"); var projection = d3.geoMercator() .scale((width - 3) / (2 * Math.PI)) .translate([width / 2, height / 2]); var path = d3.geoPath() .projection(projection); var graticule = d3.geoGraticule(); var EARTH_RADIUS = 3959; // mean radius in miles var radiusMi = 5000; // radius to be drawn in miles var radiusDeg = radiusMi / EARTH_RADIUS * 90; // radius in degrees for circle generator var circle = d3.geoCircle().radius(radiusDeg).center(d => d); svg.append("defs").append("path") .datum({type: "Sphere"}) .attr("id", "sphere") .attr("d", path); svg.append("use") .attr("class", "stroke") .attr("xlink:href", "#sphere"); svg.append("use") .attr("class", "fill") .attr("xlink:href", "#sphere"); svg.append("path") .datum(graticule) .attr("class", "graticule") .attr("d", path); svg.selectAll(".circle") .data([0, 10]) .enter().append("path") .datum(circle) .attr("class", "circle") .attr("d", path); d3.json("https://unpkg.com/world-atlas@1/world/50m.json") .then(function(world) { svg.insert("path", ".graticule") .datum(topojson.feature(world, world.objects.land)) .attr("class", "land") .attr("d", path); svg.insert("path", ".graticule") .datum(topojson.mesh(world, world.objects.countries, function(a, b) { return a !== b; })) .attr("class", "boundary") .attr("d", path); }); </script>
https://d3js.org/d3.v5.js
https://unpkg.com/topojson-client@2