index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "//www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Zoom/pan map example</title>
<script type="text/javascript" src="https://raw.github.com/mbostock/d3/master/d3.v2.min.js"></script>
<style type="text/css">
#uk {
fill: #E5F5F9;
stroke: #2CA25F;
stroke-width: 0.5;
}
#axes {
stroke: #BDBDBD;
stroke-width: 0.5;
}
</style>
</head>
<body>
<div id="vis"></div>
<script type="text/javascript">
var w = 960;
var h = 500;
var proj = d3.geo.mercator();
var path = d3.geo.path().projection(proj);
var t = proj.translate();
var s = proj.scale()
var map = d3.select("#vis").append("svg:svg")
.attr("width", w)
.attr("height", h)
.call(d3.behavior.zoom().on("zoom", redraw));
var axes = map.append("svg:g").attr("id", "axes");
var xAxis = axes.append("svg:line")
.attr("x1", t[0])
.attr("y1", 0)
.attr("x2", t[0])
.attr("y2", h);
var yAxis = axes.append("svg:line")
.attr("x1", 0)
.attr("y1", t[1])
.attr("x2", w)
.attr("y2", t[1]);
var uk = map.append("svg:g").attr("id", "uk");
d3.json("uk.json", function (json) {
uk.selectAll("path")
.data(json.features)
.enter().append("svg:path")
.attr("d", path);
});
function redraw() {
var tx = t[0] * d3.event.scale + d3.event.translate[0];
var ty = t[1] * d3.event.scale + d3.event.translate[1];
proj.translate([tx, ty]);
proj.scale(s * d3.event.scale);
uk.selectAll("path").attr("d", path);
xAxis.attr("x1", tx).attr("x2", tx);
yAxis.attr("y1", ty).attr("y2", ty);
}
</script>
</body>
</html>