Skip to content

Instantly share code, notes, and snippets.

@li01012
Last active March 31, 2017 02:20
Show Gist options
  • Save li01012/fc7bf9a4d12962822f1c385471c5e726 to your computer and use it in GitHub Desktop.
Save li01012/fc7bf9a4d12962822f1c385471c5e726 to your computer and use it in GitHub Desktop.
raster&vector 08
license: mit
<!DOCTYPE html>
<meta charset="utf-8">
<style>
#streets {
fill: none;
stroke: black;
stroke-width: 1.5px;
stroke-linejoin: round;
}
</style>
<svg width="931" 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://raw.githubusercontent.com/umbcvis/classes/master/class-03/us.json"
var usgs = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson";
d3.queue()
.defer(d3.json,url)
.defer(d3.json,usgs)
.await(ready)
function ready(error, us, json) {
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);
projection.translate ([2225,-672])
var extent =[[0,0], [width,height]];
ok = ok[0];
projection = projection.fitExtent(extent, ok)
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 "http://" + "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);
console.log('here i am before', json.features.legth)
var quakes = json.features.filter(function(d){ return d3.geoContains(ok, d.geometry.coordinates)})
console.log('here i am after', quakes.length)
svg.selectAll("path.quake")
.data(quakes)
.enter().append("path")
.attr("class", "quake")
.style("fill", "#008")
.attr("d", path)
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment