Skip to content

Instantly share code, notes, and snippets.

@danbjoseph
Last active July 9, 2016 21:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danbjoseph/8397d08dd41e40a4274248505653760b to your computer and use it in GitHub Desktop.
Save danbjoseph/8397d08dd41e40a4274248505653760b to your computer and use it in GitHub Desktop.
Metro warp

This transformation shows the difference between the Washington, DC Metro map and the actual lines at geographic scale. The map version has been kept proportional and geo-referenced so that Metro Center, Gallery Place, and L'Enfant Plaza are approximately correct. In both versions where multiple lines run the same tracks an artificial offset has been added to improve visibility of all colors in a manner similar to the official map.

Data for the visualization is derived from the WMATA Metro map and datasets available from the District of Columbia Open Data Catalog.

// originally from Nick Rabinowitz https://gist.github.com/1756257
// box should be something like: [[0,0],[w, h]]
function fitProjection(projection, data, box, center) {
// get the bounding box for the data - might be more efficient approaches
var left = Infinity,
bottom = -Infinity,
right = -Infinity,
top = Infinity;
// reset projection
projection
.scale(1)
.translate([0, 0]);
data.forEach(function(feature) {
d3.geoBounds(feature).forEach(function(coords) {
coords = projection(coords);
var x = coords[0],
y = coords[1];
if (x < left) left = x;
if (x > right) right = x;
if (y > bottom) bottom = y;
if (y < top) top = y;
});
});
// project the bounding box, find aspect ratio
function width(bb) {
return (bb[1][0] - bb[0][0])
}
function height(bb) {
return (bb[1][1] - bb[0][1]);
}
function aspect(bb) {
return width(bb) / height(bb);
}
var startbox = [[left, top], [right, bottom]],
a1 = aspect(startbox),
a2 = aspect(box),
widthDetermined = a1 > a2,
scale = widthDetermined ?
// scale determined by width
width(box) / width(startbox) :
// scale determined by height
height(box) / height(startbox),
// set x translation
transX = box[0][0] - startbox[0][0] * scale,
// set y translation
transY = box[0][1] - startbox[0][1] * scale;
// center if requested
if (center) {
if (widthDetermined) {
transY = transY - (transY + startbox[1][1] * scale - box[1][1])/2;
} else {
transX = transX - (transX + startbox[1][0] * scale - box[1][0])/2;
}
}
return projection.scale(scale).translate([transX, transY])
}
<!DOCTYPE html>
<meta charset="utf-8">
<style>
html,
body {
margin: 0;
overflow: hidden;
}
.lines path {
fill: none;
stroke-width:3px;
}
.lines .yellow {
stroke: #ffd204;
}
.lines .yellow-rush-N, .lines .yellow-rush-S {
stroke: #ffd204;
stroke-dasharray: 2 2;
}
.lines .silver {
stroke: #a1a3a1;
}
.lines .red {
stroke: #e51937;
}
.lines .green {
stroke: #00a950;
}
.lines .blue {
stroke: #0077c0;
}
.lines .orange {
stroke: #f7941d;
}
.stations circle {
fill: white;
stroke-width: 1;
stroke: #000;
}
#state {
position: fixed;
top: 12px;
left: 12px;
}
#autoplay {
position: fixed;
top: 12px;
left: 43px;
}
.btn {
border: 1px solid #ccc;
border-radius: 2px;
background-color: #fff;
cursor: pointer;
}
.btn:hover {
background-color: #e6e6e6;
border-color: #adadad;
}
.sprite {
background-image: url(sprite.png);
}
@media (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx) {
.sprite {
background-image: url(sprite@2x.png);
background-size: 100px 25px;
}
}
.map {
width: 25px;
height: 25px;
background-position: 0 0;
}
.world {
width: 25px;
height: 25px;
background-position: -25px 0px;
}
.play {
width: 25px;
height: 25px;
background-position: -50px 0px;
}
.pause {
width: 25px;
height: 25px;
background-position: -75px 0px;
}
</style>
<body>
<div id="state" class="btn sprite map"></div>
<div id="autoplay" class="btn sprite pause"></div>
<svg></svg>
<script src="//d3js.org/d3.v4.min.js"></script>
<script src="fitProjection.js"></script>
<script>
var mapLines, worldLines, mapStations, worldStations,
playing = true;
projection = d3.geoMercator(),
path = d3.geoPath(),
margin = {"top": 20, "right": 20, "bottom": 20, "left": 20 },
width = window.innerWidth - margin.left - margin.right,
height = window.innerHeight - margin.top - margin.bottom;
var svg = d3.select("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom )
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.queue()
.defer(d3.json, "map-lines.json")
.defer(d3.json, "world-lines.json")
.defer(d3.json, "map-stations.json")
.defer(d3.json, "world-stations.json")
.await(ready);
function ready(error, mapLinesJson, worldLinesJson, mapStationsJson, worldStationsJson){
mapLines = mapLinesJson;
worldLines = worldLinesJson;
mapStations = mapStationsJson;
worldStations = worldStationsJson;
fitProjection(projection, worldLines.features, [[0,0],[width, height]]);
path.projection(projection);
lines = svg.append("g")
.attr("class", "lines")
.selectAll("path")
.data(mapLines.features, function(d) { return d.properties.name; })
.enter().append("path")
.attr("d", path)
.attr("class", function(d){ return d.properties.name; });
stations = svg.append("g")
.attr("class", "stations")
.selectAll("circle")
.data(mapStations.features, function(d) { return d.properties.name; })
.enter().append("circle")
.attr("cx", function (d) { return projection(d.geometry.coordinates)[0]; })
.attr("cy", function (d) { return projection(d.geometry.coordinates)[1]; })
.attr("r", function (d) {
if(d.properties.type === "lg") return 2.5;
if(d.properties.type === "sm") return 1;
})
warp();
}
function warp() {
if(d3.select("#state").classed("world")){
lines.data(mapLines.features, function(d) { return d.properties.name; })
.transition().attr("d", path).duration(4000);
stations.data(mapStations.features, function(d) { return d.properties.name; })
.transition()
.attr("cx", function (d) { return projection(d.geometry.coordinates)[0]; })
.attr("cy", function (d) { return projection(d.geometry.coordinates)[1]; })
.duration(4000);
d3.select("#state").classed("world", false).classed("map", true);
} else {
lines.data(worldLines.features, function(d) { return d.properties.name; })
.transition().attr("d", path).duration(4000);
stations.data(worldStations.features, function(d) { return d.properties.name; })
.transition()
.attr("cx", function (d) { return projection(d.geometry.coordinates)[0]; })
.attr("cy", function (d) { return projection(d.geometry.coordinates)[1]; })
.duration(4000);
d3.select("#state").classed("world", true).classed("map", false);
}
setTimeout(function () {
if(playing){
warp();
}
}, 5000)
}
d3.select("#state").on("click", warp);
d3.select("#autoplay").on("click", function(){
if(d3.select("#autoplay").classed("pause")){
d3.select("#autoplay").classed("pause", false)
.classed("play", true);
playing = false;
} else {
d3.select("#autoplay").classed("pause", true)
.classed("play", false);
playing = true;
warp();
}
});
d3.select(window).on("resize", throttle);
function throttle() {
window.setTimeout(function() {
width = window.innerWidth - margin.left - margin.right;
height = window.innerHeight - margin.top - margin.bottom;
svg.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom );
fitProjection(projection, worldLines.features, [[0,0],[width, height]]);
path.projection(projection);
lines.attr("d", path);
stations.attr("cx", function (d) { return projection(d.geometry.coordinates)[0]; })
.attr("cy", function (d) { return projection(d.geometry.coordinates)[1]; });
}, 600);
}
</script>
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "name": "College Park-U of Md", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.00753147256826, 38.928947772870998 ] } },
{ "type": "Feature", "properties": { "name": "Capitol Heights", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.985461971739184, 38.889151287548486 ] } },
{ "type": "Feature", "properties": { "name": "Morgan Boulevard", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.979275373124025, 38.889210774073632 ] } },
{ "type": "Feature", "properties": { "name": "Georgia Ave Petworth", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.02436615918451, 38.916990981316701 ] } },
{ "type": "Feature", "properties": { "name": "Takoma", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.025079997486259, 38.9275200962675 ] } },
{ "type": "Feature", "properties": { "name": "Glenmont", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.026507674089757, 38.946139378638122 ] } },
{ "type": "Feature", "properties": { "name": "Wheaton", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.026388701039465, 38.942748646704814 ] } },
{ "type": "Feature", "properties": { "name": "Forest Glen", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.026448187564611, 38.939357914771506 ] } },
{ "type": "Feature", "properties": { "name": "Silver Spring", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.026448187564611, 38.935669750212469 ] } },
{ "type": "Feature", "properties": { "name": "Brookland-CUA", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.009910933574091, 38.910685409651251 ] } },
{ "type": "Feature", "properties": { "name": "Fort Totten", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.016989830066436, 38.91925146927224 ] } },
{ "type": "Feature", "properties": { "name": "Prince George's Plaza", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.010089393149528, 38.926389852289731 ] } },
{ "type": "Feature", "properties": { "name": "West Hyattsville", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.012706800255941, 38.923891418233609 ] } },
{ "type": "Feature", "properties": { "name": "Benning Road", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.988555271046764, 38.889151287548486 ] } },
{ "type": "Feature", "properties": { "name": "Addison Road Seat Pleasant", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.982368672431605, 38.889270260598778 ] } },
{ "type": "Feature", "properties": { "name": "Deanwood", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.990458839851428, 38.895873264889957 ] } },
{ "type": "Feature", "properties": { "name": "New Carrollton", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.982904051157917, 38.903428053583468 ] } },
{ "type": "Feature", "properties": { "name": "Landover", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.985461971739184, 38.900929619527346 ] } },
{ "type": "Feature", "properties": { "name": "Cheverly", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.988019892320452, 38.898312212420933 ] } },
{ "type": "Feature", "properties": { "name": "Largo Town Center", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.9761225872913, 38.889270260598778 ] } },
{ "type": "Feature", "properties": { "name": "NoMa - Gallaudet U", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.009851447048945, 38.903309080533177 ] } },
{ "type": "Feature", "properties": { "name": "Rosslyn", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.052860204729328, 38.896944022342581 ] } },
{ "type": "Feature", "properties": { "name": "Arlington|Cemetery", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.045721821711837, 38.880942147078372 ] } },
{ "type": "Feature", "properties": { "name": "Dupont Circle", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.037393708191431, 38.909733625248919 ] } },
{ "type": "Feature", "properties": { "name": "Pentagon", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.039594709621824, 38.872435573982528 ] } },
{ "type": "Feature", "properties": { "name": "Crystal City", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.037195554688253, 38.862336720681022 ] } },
{ "type": "Feature", "properties": { "name": "Navy Yard - Ballpark", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.013229177288565, 38.874750319176357 ] } },
{ "type": "Feature", "properties": { "name": "McPherson Sq", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.032872732280353, 38.902952161382302 ] } },
{ "type": "Feature", "properties": { "name": "Shaw-Howard Univ", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.021094400301493, 38.906104947215027 ] } },
{ "type": "Feature", "properties": { "name": "Southern Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.001807764460565, 38.868385260985754 ] } },
{ "type": "Feature", "properties": { "name": "Greenbelt", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.005033038512138, 38.931624666502557 ] } },
{ "type": "Feature", "properties": { "name": "Tenleytown-AU", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.046733092639315, 38.916574575640681 ] } },
{ "type": "Feature", "properties": { "name": "West Falls Church VT\/UVA", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.075762516910444, 38.893553290409272 ] } },
{ "type": "Feature", "properties": { "name": "Dunn Loring Merrifield", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.079807600620356, 38.893493803884127 ] } },
{ "type": "Feature", "properties": { "name": "Vienna Fairfax-GMU", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.083971657380559, 38.893612776934418 ] } },
{ "type": "Feature", "properties": { "name": "Friendship Heights", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.048874607544562, 38.918240198344762 ] } },
{ "type": "Feature", "properties": { "name": "Shady Grove", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.070765648798201, 38.940071753073255 ] } },
{ "type": "Feature", "properties": { "name": "Rockville", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.067672349490621, 38.936978453765676 ] } },
{ "type": "Feature", "properties": { "name": "Twinbrook", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.064400590607605, 38.933706694882659 ] } },
{ "type": "Feature", "properties": { "name": "White Flint", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.061247804774879, 38.930553909049934 ] } },
{ "type": "Feature", "properties": { "name": "Grosvenor-Strathmore", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.058095018942154, 38.927341636692063 ] } },
{ "type": "Feature", "properties": { "name": "Medical Center", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.055001719634575, 38.924188850859338 ] } },
{ "type": "Feature", "properties": { "name": "Bethesda", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.051789447276704, 38.921095551551758 ] } },
{ "type": "Feature", "properties": { "name": "Foggy Bottom GWU", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.042271603253383, 38.902952161382302 ] } },
{ "type": "Feature", "properties": { "name": "Court House", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.057321694115259, 38.892542019481795 ] } },
{ "type": "Feature", "properties": { "name": "Clarendon", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.060355506897693, 38.892542019481795 ] } },
{ "type": "Feature", "properties": { "name": "East Falls Church", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.070408729647326, 38.89260150600694 ] } },
{ "type": "Feature", "properties": { "name": "Virginia Square-GMU", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.063448806205272, 38.892482532956649 ] } },
{ "type": "Feature", "properties": { "name": "Ballston-MU", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.06642313246256, 38.89260150600694 ] } },
{ "type": "Feature", "properties": { "name": "Farragut West", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.038880871320075, 38.902952161382302 ] } },
{ "type": "Feature", "properties": { "name": "Farragut North", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.035549625911912, 38.906997245092214 ] } },
{ "type": "Feature", "properties": { "name": "Woodley Park-Zoo Adams Morgan", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.039654196146969, 38.912113086254749 ] } },
{ "type": "Feature", "properties": { "name": "L'Enfant Plaza", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.021034913776347, 38.886117474766053 ] } },
{ "type": "Feature", "properties": { "name": "Smithsonian", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.029482000347045, 38.889686666274798 ] } },
{ "type": "Feature", "properties": { "name": "Pentagon City", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.039753475269521, 38.866976669642391 ] } },
{ "type": "Feature", "properties": { "name": "Federal Triangle", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.029541486872191, 38.892898938632669 ] } },
{ "type": "Feature", "properties": { "name": "Archives-Navy Mem'l", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.020975427251201, 38.892779965582378 ] } },
{ "type": "Feature", "properties": { "name": "Waterfront", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.016560422696742, 38.874690832651211 ] } },
{ "type": "Feature", "properties": { "name": "Ronald Reagan Washington National Airport", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.032674578777176, 38.859540853999164 ] } },
{ "type": "Feature", "properties": { "name": "Van Dorn Street", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.049628238443717, 38.847833905850486 ] } },
{ "type": "Feature", "properties": { "name": "Franconia-Springfield", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.054910641876674, 38.841052441983862 ] } },
{ "type": "Feature", "properties": { "name": "Federal Center SW", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.016097532189249, 38.886176961291198 ] } },
{ "type": "Feature", "properties": { "name": "Judiciary Sq", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.015562153462938, 38.897241454968309 ] } },
{ "type": "Feature", "properties": { "name": "Capitol South", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.011873988903901, 38.886117474766053 ] } },
{ "type": "Feature", "properties": { "name": "Metro Center", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.029422513821899, 38.897170071138135 ] } },
{ "type": "Feature", "properties": { "name": "Gallery Pl-Chinatown", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.020975427251201, 38.897241454968309 ] } },
{ "type": "Feature", "properties": { "name": "Mt Vernon Sq - 7th St Convention Center", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.020975427251201, 38.901821917404533 ] } },
{ "type": "Feature", "properties": { "name": "U St\/African-Amer Civil War Memorial\/Cardozo", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.02436615918451, 38.90985259829921 ] } },
{ "type": "Feature", "properties": { "name": "Union Station", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.009851447048945, 38.899680402499285 ] } },
{ "type": "Feature", "properties": { "name": "Congress Heights", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.004901063768159, 38.870288829790425 ] } },
{ "type": "Feature", "properties": { "name": "Naylor Road", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.997584221175217, 38.869158585812649 ] } },
{ "type": "Feature", "properties": { "name": "Suitland", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.995085787119095, 38.86648169218109 ] } },
{ "type": "Feature", "properties": { "name": "Branch Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.992408893487536, 38.863864285074676 ] } },
{ "type": "Feature", "properties": { "name": "Braddock Road", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.032555605726884, 38.855971662490418 ] } },
{ "type": "Feature", "properties": { "name": "King St - Old Town", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.032555605726884, 38.851450686579341 ] } },
{ "type": "Feature", "properties": { "name": "Eisenhower Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.03156812940945, 38.846120693926288 ] } },
{ "type": "Feature", "properties": { "name": "Huntington", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.031639513239625, 38.840981058153687 ] } },
{ "type": "Feature", "properties": { "name": "Anacostia", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.007102065198552, 38.872430344695672 ] } },
{ "type": "Feature", "properties": { "name": "Eastern Market", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.007828905193989, 38.886890799592948 ] } },
{ "type": "Feature", "properties": { "name": "Potomac Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.00556841723845, 38.889091801023341 ] } },
{ "type": "Feature", "properties": { "name": "Stadium Armory", "type": "lg" }, "geometry": { "type": "Point", "coordinates": [ -77.00080949522679, 38.89022204500111 ] } },
{ "type": "Feature", "properties": { "name": "Rhode Island Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.009910933574091, 38.907116218142505 ] } },
{ "type": "Feature", "properties": { "name": "Minnesota Ave", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -76.993016760432695, 38.893255857783544 ] } },
{ "type": "Feature", "properties": { "name": "Van Ness-UDC", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.043877739432318, 38.916217656489806 ] } },
{ "type": "Feature", "properties": { "name": "Cleveland Park", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.041914684102508, 38.914254601159996 ] } },
{ "type": "Feature", "properties": { "name": "Columbia Heights", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.027697404592672, 38.913719222433684 ] } },
{ "type": "Feature", "properties": { "name": "Spring Hill", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.081770655950166, 38.902119350030262 ] } },
{ "type": "Feature", "properties": { "name": "Greensboro", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.079926573670647, 38.900275267750743 ] } },
{ "type": "Feature", "properties": { "name": "Tysons Corner", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.077666085715109, 38.898133752845496 ] } },
{ "type": "Feature", "properties": { "name": "McLean", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.075584057335007, 38.895992237940249 ] } },
{ "type": "Feature", "properties": { "name": "Wiehle-Reston East", "type": "sm" }, "geometry": { "type": "Point", "coordinates": [ -77.08409063043085, 38.904201378410363 ] } }
]
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment