This example belongs to the presentation made to the OSGeo local group in Barcelona Geoinquiets The example is an adaptation from Mike Bostock’s Symbol Map example
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.logo .verd1 {
fill: #1c390d;
}
.logo .verd2 {
fill: #738815;
}
@font-face {
font-family:book;
src: url("ANTQUAB.TTF"); /* TTF file for CSS3 browsers */
}
.logo text {
/*font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;*/
font-family: "book", serif;
font-weight: bold;
fill: #738815;
}
.foreground {
fill: #fcf1c9;
stroke: #333;
stroke-width: 1.5px;
}
.land {
fill: #ca5934;
stroke: #766951;
}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v0.min.js"></script>
<script>
var width = 500,
height = 500,
mapDiameter = 160;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ") rotate(-10, 0, 0)");
var gradient = svg.append("defs").append("radialGradient")
.attr("id", "gradient")
.attr("cx", "75%")
.attr("cy", "25%");
gradient.append("stop")
.attr("offset", "5%")
.attr("stop-color", "#142809");
gradient.append("stop")
.attr("offset", "100%")
.attr("stop-color", "#2a5614");
var gradient2 = svg.append("defs").append("radialGradient")
.attr("id", "gradient2")
.attr("cx", "75%")
.attr("cy", "25%");
gradient2.append("stop")
.attr("offset", "5%")
.attr("stop-color", "#fcf1c9");
gradient2.append("stop")
.attr("offset", "100%")
.attr("stop-color", "#d9d0ad");
var logo = svg.append("g")
.attr("class", "logo");
logo.append("path")
.style("fill", "url(#gradient)")
.attr("d", d3.svg.arc()
.startAngle(0)
.innerRadius(mapDiameter)
.outerRadius(240)
.endAngle(2*Math.PI));
logo.append("path")
.attr("class", "verd2")
.attr("d", d3.svg.arc()
.startAngle(0)
.innerRadius(223)
.outerRadius(230)
.endAngle(2*Math.PI));
logo.append("path")
.attr("class", "verd2")
.attr("d", d3.svg.arc()
.startAngle(0)
.innerRadius(mapDiameter)
.outerRadius(163)
.endAngle(2*Math.PI));
logo.append("path")
.attr("id", "anellaInterior")
.attr("d", d3.svg.arc()
.startAngle(0)
.innerRadius(175)
.outerRadius(175)
.endAngle(2*Math.PI));
logo.append("path")
.attr("id", "anellaExterior")
.attr("d", d3.svg.arc()
.startAngle(Math.PI/2)
.innerRadius(220)
.outerRadius(220)
.endAngle(3* Math.PI/2));
logo.append("text")
.style("font-size","46px")
.append("textPath")
.attr("xlink:href","#anellaInterior")
.attr("startOffset",360)
.text("GEOINQUIETS")
logo.append("text")
.style("font-size","25px")
.append("textPath")
.attr("xlink:href","#anellaExterior")
.attr("startOffset",950)
.text("amb l'ànima inquieta")
var velocity = .005,
then = Date.now();
var projection = d3.geo.orthographic()
.scale(mapDiameter)
.translate([0, 0])
.clipAngle(90);
var path = d3.geo.path()
.projection(projection);
var globe = {type: "Sphere"};
var map = svg.append("g")
.attr("class", "map");
map.append("path")
.datum(globe)
.style("fill", "url(#gradient2)")
.attr("d", path);
d3.json("/mbostock/raw/4090846/world-110m.json", function(error, world) {
var land = topojson.object(world, world.objects.land),
globe = {type: "Sphere"};
map.insert("path")
.datum(topojson.object(world, world.objects.land))
.attr("class", "land")
.attr("d", path);
d3.timer(function() {
var angle = velocity * (Date.now() - then);
projection.rotate([angle,0,0]);
map.selectAll("path")
.attr("d", path.projection(projection));
});
});
</script>