Built with blockbuilder.org
xxxxxxxxxx
<meta charset="utf-8">
<style>
#streets {
fill: none;
stroke: black;
stroke-width: 1.5px;
stroke-linejoin: round;
}
</style>
<svg width="960" height="500"></svg>
<script src="//d3js.org/d3.v4.min.js"></script>
<script src="//d3js.org/d3-tile.v0.0.min.js"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<script>
var pi = Math.PI,
tau = 2 * pi;
var svg = d3.select("svg"),
width = +svg.attr("width"),
height = +svg.attr("height");
var projection = d3.geoMercator()
.scale((1 << 18) / tau)
.translate([width / 2, height / 2])
.center([-83.15, 42.43]);
var path = d3.geoPath()
.projection(projection);
var url = "https://umbcvis.github.io/classes/class-03/us.json"
//var states =array of geojson states
d3.json(url, function(error, us) {
if (error) throw error;
var states = us.objects.us.geometries.map(function(d) { return topojson.feature(us, d); })
var ok = states.filter(function(d){return d.properties.name === "Oklahoma";});
console.log('HERE I AM', states.length, ok.length);
var extent = [[0,0],[width,height]];
projection = projection.fitExtent(extent, ok[0]);
console.log("HERE I AM AGAIN", projection.translate())
projection.translate([2225,-672])
var tiles = d3.tile()
.size([width, height])
.scale(projection.scale() * tau)
.translate(projection([0, 0]))
();
svg.selectAll("image")
.data(tiles)
.enter().append("image")
.attr("xlink:href", function(d) { return "https://" + "abc"[d[1] % 3] + ".tile.openstreetmap.org/" + d[2] + "/" + d[0] + "/" + d[1] + ".png"; })
.attr("x", function(d) { return (d[0] + tiles.translate[0]) * tiles.scale; })
.attr("y", function(d) { return (d[1] + tiles.translate[1]) * tiles.scale; })
.attr("width", tiles.scale)
.attr("height", tiles.scale);
svg.append("path")
.attr("id", "streets")
.datum(topojson.mesh(us, us.objects.us))
.attr("d", path);
});
</script>
https://d3js.org/d3.v4.min.js
https://d3js.org/d3-tile.v0.0.min.js
https://d3js.org/topojson.v1.min.js