Skip to content

Instantly share code, notes, and snippets.

@enjalot
Created August 10, 2013 07:57
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 enjalot/6199528 to your computer and use it in GitHub Desktop.
Save enjalot/6199528 to your computer and use it in GitHub Desktop.
bart ridership particles
<div>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="694.36px" height="552.46px" viewBox="0 0 694.36 552.46" enable-background="new 0 0 694.36 552.46" xml:space="preserve">
<g id="water">
<path id="path4193" sodipodi:nodetypes="ccsczzsszzzzzzzzzzzzzzzzzzzzzzsszzzzsszzzzzzzzzzzzzsszzzzzzzzzzzcczzzzzzzzzzzzzzzzcccczzzzczzzzzzzzzsszzzczzss" inkscape:export-ydpi="90" inkscape:export-xdpi="90" fill="#EBF9F6" stroke="#AFE9DD" stroke-width="0.7247" d="
M505.215,560.656h1.703c8.211-0.051,7.418,3.578,7.418,6.727s0.168,6.727-7.418,6.727H411.02c-4.379,0-8.936-2.363-12.031-5.725
l-12.145-13.186c-3.068-3.332-4.902-8.383-4.902-13.096v-0.332c0-3.676-3.84-7.752-7.225-7.752h-13.846
c-4.322,0-8.842-2.273-11.898-5.59l-60.931-66.156c-3.032-3.291-4.799-8.303-4.799-12.959v-26.43
c-0.005-3.664-4.071-7.395-7.431-7.395h-2.162c-3.269,0-7.161-3.725-7.161-7.275v-1.906c0-3.615,3.965-7.41,7.296-7.41h13.646
c3.512,0,7.404-4.326,7.404-8.139v-1.467c0-4.672-2.12-9.544-5.164-12.848l-13.24-14.376c-3.058-3.319-5.061-8.274-5.061-12.97
v-74.176c0-4.627-1.958-9.517-4.972-12.789l-48.62-52.788c-3.228-3.504-8.075-5.722-12.639-5.722h-60.691
c-4.247,0-8.888-1.704-11.891-4.964l-2.293-2.489c-3.08-3.343-7.733-5.383-12.088-5.383h-11.369c-3.038,0-6.54,3.592-6.54,6.89
v4.564c0,5-2.475,10.111-5.731,13.646l-4.585,4.979c-3.145,3.415-7.93,5.412-12.377,5.412H54.531c-4.329,0-8.948,2.045-12.01,5.369
l-7.337,7.966c-3.083,3.348-5.187,8.305-5.187,13.039v487.713v42.32H-91.217V-36.824L96.672,167.173
c3.27,3.55,8.123,5.942,12.747,5.942h14.332c4.32,0,8.978-1.913,12.033-5.229l4.132-4.486c3.026-3.286,7.562-5.386,11.842-5.386
h11.188c3.107,0,6.379-4.006,6.379-7.38v-0.617c0-4.395-1.803-9.064-4.665-12.171l-4.14-4.494
c-2.361-2.563-2.629-8.283-0.291-10.871l0.524-0.58c2.146-2.375,7.025-2.279,9.191,0.073l14.126,15.337
c3.227,3.504,8.118,5.601,12.682,5.601h13.2c2.264,0,4.663-1.111,6.263-2.849l23.673-23.988c1.642-1.664,3.894-2.979,6.134-2.979
h22.493c3.69,0,7.838-4.48,7.838-8.487v-15.71c0-4.807-2.021-9.892-5.151-13.291l-3.814-4.142
c-3.047-3.309-4.944-8.291-4.944-12.97V10.921c0-4.648,1.798-9.636,4.826-12.923l4.099-4.45c2.998-3.254,7.46-5.413,11.699-5.413
h62.422c4.662,0,9.501,2.542,12.796,6.12l8.885,9.646c3.238,3.517,7.557,6.997,12.139,6.997h377.885v13.789h-378.42
c-4.324,0-8.723,2.576-11.779,5.895L325.018,76.16c-3.193,3.468-4.885,8.819-4.885,13.724v52.147c0,3.395,3.476,7.236,6.603,7.236
h0.649c3.174,0,6.658,3.946,6.658,7.393v102.216c0,4.906,2.333,9.97,5.528,13.439l52.886,57.42c1.41,1.531-0.414,5.95-2.408,5.95
h-7.117c-3.371,0-6.98,4.282-6.98,7.942v1.994c0,4.613,1.912,9.508,4.918,12.771l3.902,4.237c3.096,3.36,7.729,5.525,12.105,5.525
h14.855c4.342,0,8.969,2.062,12.039,5.396l0.76,0.825c3.232,3.509,5.518,8.669,5.518,13.632v90.807
c0,4.764,1.988,9.811,5.092,13.18l58.086,63.066C496.303,558.4,500.866,560.656,505.215,560.656z"/>
</g>
<g id="lines">
<g>
<path id="red" fill="none" stroke="#D40000" stroke-width="6" d="M226.268,494.363
l-68.682-68.682c-6.028-6.027-9.962-15.029-9.962-23.555v-10.774c0-11.491,5.132-23.696,13.258-31.821l10.865-10.865
c4.809-4.808,8.002-11.965,8.002-18.764v-12.568c0-11.479,5.236-23.626,13.353-31.743l41.627-41.627
c8.027-8.027,20.165-12.903,31.517-12.903h126.1c6.273,0,13.428-6.916,13.428-13.19V113.155c0-6.105-6.607-13.187-12.715-13.187
h-54.208"/>
<path id="orange" fill="none" stroke="#FF7F2A" stroke-width="6" d="M338.892,93.968
h53.455c8.992,0,19.316,9.838,19.316,18.83v159.524c0,6.988,2.959,14.479,7.9,19.42l244.646,244.646"/>
<path id="yellow" fill="none" stroke="#FFCC00" stroke-width="6" d="
M264.31,468.792h-43.9c-6.922,0-14.285-3.068-19.179-7.963l-39.585-39.586c-4.831-4.83-8.011-12.033-8.011-18.863v-10.404
c0-10.197,4.478-21.061,11.688-28.271l10.92-10.921c5.9-5.899,9.561-14.79,9.561-23.135v-12.493
c0-9.861,4.399-20.339,11.372-27.312l41.717-41.716c6.987-6.986,17.598-11.116,27.479-11.116h138.652
c5.988,0,12.689-6.725,12.689-12.712v-45.474c0-6.225,6.836-13.348,13.061-13.348h29.25c6.863,0,14.172-3.016,19.025-7.868
L595.018,41.639"/>
<path id="blue" fill="none" stroke="#006680" stroke-width="6" d="M645.465,396.32
h-92.941c-6.994,0-14.463-3.023-19.41-7.969L397.477,252.713c-6.023-6.024-15.131-9.685-23.65-9.685H266.372
c-8.349,0-17.336,3.434-23.24,9.337l-41.627,41.628c-5.989,5.988-9.616,15.049-9.616,23.52v12.136
c0,9.985-4.433,20.604-11.494,27.665l-10.642,10.642c-5.985,5.985-10.085,14.842-10.085,23.308v33.592
c0,6.92,3.106,14.264,7.999,19.156l53.391,53.391"/>
<path id="green" fill="none" stroke="#225500" stroke-width="6" d="M671.17,534.73
L392.936,256.496c-4.807-4.808-12.057-7.781-18.855-7.781H266.499c-6.934,0-14.342,2.995-19.245,7.898l-41.564,41.564
c-4.966,4.967-7.946,12.49-7.946,19.514v11.958c0,11.423-5.014,23.592-13.091,31.669l-10.768,10.768
c-4.925,4.926-8.303,12.211-8.303,19.178v7.143"/>
</g>
</g>
</svg>
<canvas id=canvas></canvas>
</div>
{"description":"bart ridership particles","endpoint":"","display":"div","public":true,"require":[{"name":"crossfilter","url":"http://square.github.io/crossfilter/crossfilter.v1.min.js"}],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"bart.svg":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"seglist.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"bart.html":{"default":true,"vim":false,"emacs":false,"fontSize":12},"style.css":{"default":true,"vim":false,"emacs":false,"fontSize":12},"stations.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"ridership.json":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"play":true,"loop":true,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"thumbnail":"http://i.imgur.com/RoDpg2w.png"}
var r = 10; //max offset from subway line
var pAlpha = 0.31;
var speed = 5
var startStations = []//["MA", "EM"];
var endStations = []//["CC", "RM"];
tributary.duration = 20000;
var lineCardinal = {
"blue": {x: 1, y: -1 },
"green": {x: -1, y: 1 },
"red": {x:1, y: -1},
"yellow": {x: -1, y: 1},
"orange": {x: -1, y: 1}
}
//june 2013 average daily ridership
var ridership = tributary.ridership;
tributary.ppl = [];
var svg = d3.select("svg");
var display = d3.select("#display");
tributary.canvas = d3.select("#canvas").classed("tributary_canvas",true).node();
tributary.ctx = tributary.canvas.getContext('2d');
var ctx = tributary.ctx;
var canvas = tributary.canvas;
tributary.canvas.width = tributary.sw;
tributary.canvas.height = tributary.sh;
ctx.globalCompositeOperation = 'source-over';
ctx.globalAlpha = 0.65;
function clear() {
if(!tributary.canvas) return;
tributary.ctx.fillStyle = 'rgba(255,255,255,0.081)'
tributary.ctx.fillRect(0, 0, tributary.sw, tributary.sh);
}
var stationMap = {};
tributary.stations.forEach(function(station) {
stationMap[station.code] = station;
})
var lineMap = {};
d3.selectAll("#lines").selectAll("path").each(function() {
lineMap[d3.select(this).attr("id")] = this;
})
//each trip has a start and stop station;
var allTrips = [];
var len = ridership.data.length -1;
for(var i = 0; i < len; i++) {
var entry = ridership.cols[i];
var start = stationMap[entry];
for(var j = 0; j < len; j++) {
if(i == j) continue;
var exit = ridership.rows[j]
var end = stationMap[exit];
var lines = matchLines(start, end);
if(entry == "EM" && exit == "CC") console.log("WTF")
lines.forEach(function(line) {
var trip = {
start: { l: start.offsets[line], code: entry , color:"#fff" },
end: { l: end.offsets[line], code: exit, color: "#000" },
line: line,
path: lineMap[line],
n: ridership.data[j][i]/lines.length,
diff: 0,
count: 0
}
allTrips.push(trip);
})
}
}
console.log("len", len*len);
//var trips = allTrips.slice(550,750);
var xf = crossfilter(allTrips);
var startdim = xf.dimension(function(d) { return d.start.code })
var enddim = xf.dimension(function(d) { return d.end.code })
if(startdim.length) {
startdim.filter(function(d) {
return ~startStations.indexOf(d);
})
}
if(enddim.length) {
enddim.filter(function(d) {
return ~endStations.indexOf(d)
})
}
var trips = startdim.top(Infinity)
console.log(trips)
//console.log(trips)
console.log("# trips:", allTrips.length, trips.length)
function generate(trip, t) {
var path = trip.path;
var len = path.getTotalLength();
var extent = [trip.start.l/len, trip.end.l/len];
var v = Math.abs(extent[1] - extent[0]);
if(isNaN(v)) return;
//var dt = 1/tributary.duration;
var dt = 1/10000;
var n = 1;//Math.round(0.01 * trip.n);
//d3.range(n).forEach(function() {
var scale = d3.scale.linear()
.domain([0, 1])
.range(extent);
var offset = function(tt) {
var ts = (tt - t) * speed
//var ts = scale((tt-t) * speed)
//if(ts > 1) ts = 1;
//console.log("tt",ts);
return scale(ts)
}
var rand = Math.random();
var freq = 5.2 * Math.random() * Math.PI
tributary.ppl.push({
len: len,
path: path,
color: d3.rgb(d3.select(path).attr("stroke")),
pos: function(ta) {
//return the point for this
//var l0 = d3.min(extent)*len;
//var lv = offset(ta) * v*len;
return path.getPointAtLength(offset(ta) * len);
},
perp: function(ta) {
//return the offset vector
//TODO Make perpendicular
var tt = offset(ta);
//console.log(tt, v, extent)
var nx = this.pos(ta).y - this.pos(ta - dt).y;
var ny = this.pos(ta).x - this.pos(ta - dt).x;
var l = Math.sqrt(nx*nx + ny*ny);
nx = nx/l * lineCardinal[trip.line].x;
ny = ny/l * lineCardinal[trip.line].y;
if(!l) nx = 0;
if(!l) ny = 0;
var amp = ( 5 + trip.count*3)
this.r = r + amp * Math.sin(tt * Math.PI * 8 * rand) - amp/2;
return {x: nx, y: ny}
},
w: 2,
h: 2,
r: r,
done: function(tt) {
var ts = offset(tt)
if(ts >= d3.max(extent) || ts <= d3.min(extent)) return true;
//if( ts > 1) return true;
}
})
//})
}
tributary.run = function(g,t) {
var display = d3.select("#display");
var ctx = tributary.ctx;
clear();
if(t < 0.001) {
//reset
console.log("reset")
tributary.ppl = [];
tributary.ctx.clearRect(0, 0, tributary.sw, tributary.sh);
trips.forEach(function(d) {
d.count = 0;
generate(d, t, d.count);
})
}
trips.forEach(function(d) {
d.diff += d.n/40000;
if(Math.floor(d.diff)) {
d.count++;
generate(d, t, d.count);
d.diff = 0;
}
});
//console.log(tributary.ppl.length);
tributary.ppl.forEach(function(d,i) {
//var o = (Math.sin(2 *Math.PI * (d.start + t/10)) + 1)/2;
//var p = d.node.getPointAtLength(t*d.len);
var p = d.pos(t);
var pp = d.perp(t);
if(d.done(t)) {
tributary.ppl.splice(tributary.ppl.indexOf(d),1);
return;
}
var rr = d.r + 4;
var x = p.x + pp.x * rr;
var y = p.y + pp.y * rr;
ctx.fillStyle = 'rgba(' + d.color.r + ',' + d.color.g + ',' + d.color.b + ',' + pAlpha + ')';
//ctx.fillRect(x - d.w/2, y-d.h, d.w, d.h);
ctx.beginPath();
ctx.arc(x,y,d.w,0,2*Math.PI);
ctx.fill();
})
}
function matchLines(a,b) {
var matches = [];
for(var i = 0; i < a.routes.length; i++) {
if(~b.routes.indexOf(a.routes[i])) {
matches.push(a.routes[i]);
}
}
return matches;
}
tributary.loop_type = "period";
{
"rows":["RM","EN","EP","NB","BK","AS","MA",19,12,"LM","FV","CL","SL","BF","HY","SH","UC","FM","CN","PH","WC","LF","OR","RR","OW","EM","MT","PL","CC",16,24,"GP","BP","DC","CM","CV","ED","NC","WP","SS","SB","SO","MB","WD","Entries"],
"cols":["RM","EN","EP","NB","BK","AS","MA",19,12,"LM","FV","CL","SL","BF","HY","SH","UC","FM","CN","PH","WC","LF","OR","RR","OW","EM","MT","PL","CC",16,24,"GP","BP","DC","CM","CV","ED","NC","WP","SS","SB","SO","MB","WD","Exits"],
"data":[[11.45,139.2,109.15,102.95,408.7,119.75,164.4,140.2,195.75,44.55,102,98.15,50.75,39.65,35.7,24.65,17.55,31.4,29.6,16.15,23.95,15.4,10.45,20.6,34.85,283.45,281.55,400.15,276.45,133.05,133.4,35.15,52.9,33.85,13.2,7.8,20.75,7.1,50.95,7.95,23.95,37.95,31.2,4.2,3821.9499999999994],
[151.7,15.9,108.75,111.55,901.25,165.2,303.3,503.2,656.75,115.8,168.4,189.15,70.1,62.5,74.35,37.9,45,94.1,42.5,21.45,49.85,16.65,13.85,39.2,54.3,902.35,978.25,926.4,725.3,206.3,182.25,54.65,79.9,78,30.6,12.4,41.5,8.65,44.2,29.35,43.35,85.35,52.45,19.45,8513.400000000001],
[113,90.25,11,68.8,647.5,95.75,149.6,257.45,304.55,68.35,63.95,86.15,26.8,19,24.15,10.5,15.3,44.8,24.7,17.5,31.85,11.2,10.2,34.9,19.7,556.85,623.7,428.2,363.5,111.75,56.3,30.4,28.65,28.75,5.6,8.4,23.4,5,13.45,7.95,7.7,61.45,28,11.6,4647.599999999998],
[103.35,104.95,72.55,12.8,183.15,71.05,101,231.3,257.05,61.65,78.7,92.5,29.4,24.15,30.9,12.3,17.7,31.7,22.65,19.35,34.75,11.8,10.85,23.45,22.5,730.6,752.7,480.9,466.85,156.35,102.8,35.85,30.85,25.3,8.45,7.8,17.1,3.5,15.95,4.5,13,89,37.25,5.75,4646.050000000002],
[437.7,935.75,664.15,197.8,35.85,383.75,470.2,545.3,607.7,226.8,323.9,274.5,181.75,153.4,154.6,106.5,153.9,337.1,146.35,160.75,159.85,97.75,67.05,63.8,112,1233.05,1061.55,1125.8,799.75,401.3,304.2,142.95,117.25,125.95,34.35,61.2,165.1,61,126.35,34.9,43.05,199.45,170.65,73.55,13279.6],
[118.15,144.4,92.65,74,322.7,16.2,117.2,256.75,258.65,76.05,126.95,114.1,47.45,43.15,49,24.65,32.95,69.25,27.6,21.4,32.5,14.6,9.35,18,41,665.5,710.25,478.75,474.9,245.45,140.05,38.35,35.9,30.5,9.85,13.55,26.65,8,36,6.6,15.15,61.3,33.45,10.4,5189.3],
[175.2,304.2,140.15,103.1,420.45,115.9,20.25,189.95,262.4,71.85,204.8,237,127.95,134.85,128.6,68.95,87.1,142.5,150.45,133.3,152.15,62,49.8,70.8,78.5,1017.85,1103.35,912.1,839.1,398.15,239.9,79.65,90.25,71.5,30.25,35.5,72.65,52.15,230.75,24.5,36.3,109.95,69.35,25.95,9071.4],
[157.25,518.8,259.05,237,517.2,253.9,178.6,19.7,55.5,45.1,175.5,219.9,221.5,211.2,203.8,157.3,202.7,379.45,295.4,338.5,280.25,157.5,100.5,184.2,75.25,1045.15,1068.05,836,815.7,367.25,275.7,140.4,110.6,134.25,68.65,83.05,195.6,175.2,262.25,69,50.6,65.9,104.75,91.85,11405.000000000002],
[210.35,640.9,298.35,267.55,534.3,264.25,250,49.1,29.25,48.9,237.4,364.6,338.1,337,326.7,184.55,249.9,407.25,310.5,329,288.45,170.55,119.2,198.8,102.1,1119.1,1103.95,981.7,870.3,320.65,291.05,165.9,154.55,161.5,107.15,110.65,245.85,170.4,300,79.4,80.4,116.3,143.85,121.65,13201.399999999996],
[42.55,108.65,67.9,61.65,213.1,71.1,76,42.6,47.7,12.65,171.4,249.2,271.7,251.65,175.15,107.1,126.35,182.85,40.8,28.45,36.9,13.95,10.35,34.3,46.25,776.4,779.65,666.2,514.1,205,134.1,54.2,80.5,67.25,10.95,121.45,184.45,14.2,49,10.65,10.55,32.55,20.15,81.4,6303.049999999999],
[110.65,154.3,71.4,77.8,319.15,132.9,204.8,187.35,250.3,156.8,22.55,318.4,241.9,275.75,263.5,111,99.4,166.3,57.3,35.85,60.6,23.7,32.95,58.8,134.4,855.05,857.1,889.55,733.3,262.45,200.95,62.9,97.75,64.2,16,76.45,141.9,15.75,67.15,12.4,29.2,65.35,29.1,67.25,8111.649999999999],
[102.05,185.9,85.9,95.35,290.25,124.5,244.2,258.85,391.85,226,322.35,19.4,173.75,254.4,239.4,119.65,138.7,260.7,101.15,100.8,121.15,57.15,44.2,78.65,121.65,644.7,530.25,594.85,461.1,138.35,127.05,55.9,64.3,74.05,18.95,107.1,348.05,53.6,141.3,21.85,28.1,64.85,37.35,138.95,7808.600000000003],
[50.95,75.05,30.2,30.35,182.35,52.6,143,235.5,350.7,276.7,255.85,178.35,14.1,134.1,188.75,84.5,79.75,142.45,43.4,22.05,27.8,12.15,8.5,23.5,41.25,725.1,669.8,557,450,105.25,85.2,41.7,52.15,46.3,10.05,56.9,96.15,10.1,47.35,9.7,11.95,39.6,19.7,45.3,5763.2],
[36.15,63.75,19.2,26.55,159.15,41.85,129.05,234.15,358.4,257.7,285.8,249.85,130.05,15,203.7,122.1,144.95,244.5,30.5,14.15,21.65,6.1,8.25,16.55,49.5,663.2,599.65,536.35,378.7,99.5,73.05,23.1,40.3,42.7,12.3,71.85,218.15,6.4,26.9,10.3,16.25,28.4,12,118.75,5846.45],
[40.95,77.05,29.15,30.35,143.7,47.8,127,205.85,309.35,164.65,269.75,239.15,183.2,220.25,11.45,129.55,204.65,335.65,33.1,27.85,25.4,9,6,16.6,40.65,448.75,424.35,340.95,274.2,79.5,54.25,27.55,32.15,31.6,7.85,32.2,87.9,10.7,54.75,9.95,10.55,22.15,7.25,43.55,4928.25],
[25.6,33.9,10.55,13.75,93.4,26.3,62.95,150,170.2,103.8,113.6,108.8,87.6,120.45,117.4,11.25,82,169.65,19.35,13.85,11.2,2.15,5.4,10.55,17,407.85,332.4,253.05,207.4,64.1,43.35,11.15,20.35,27.2,7.65,28.25,49.3,5.75,17.75,9.1,7.95,13.2,6.85,29.6,3122.95],
[17.85,45.2,19.25,21.1,150.75,40.15,88.3,203.4,245,123.8,105.35,145.3,86.4,155.1,217.8,91.3,19.95,199.6,18.9,16.15,16.65,4.15,6.1,13.05,14.35,851.5,658,394.6,250.15,66.3,30.05,15.05,24.4,32.55,7.2,23.05,72.85,6.65,21.6,5.9,6.55,25.1,6.2,33.2,4595.85],
[36.65,98.7,47.55,35.05,350.7,77.3,136.5,370.6,394,187.9,167.4,258.25,148.35,279.45,354.65,190.55,199,41.45,34.75,36.15,35.55,13.95,13.35,34.6,26.2,1710.05,1314.05,652.65,408.55,105.5,51.7,30.05,39.75,55,11,38.9,103.15,10.7,39.8,7.1,8.35,60.65,10.45,35.25,8261.25],
[31.05,42.05,23.7,23.45,142.9,31.25,151.25,295.3,321.45,38.15,57,96.15,44.95,30.55,35.3,19.1,17.85,33.2,15.9,125.5,342.7,115.4,46.95,94.75,22.25,884.5,855.25,525.85,423.3,94.6,79.85,37.75,45.6,57.85,24.2,8.25,13.95,64.05,384.45,19.95,29.2,102.2,27.1,7.35,5883.350000000002],
[17.3,22.5,18.8,17.8,155.75,23.15,126.85,325.35,316.6,26.35,36.2,94.15,21.6,13.1,27.7,15.3,15.65,34.3,121.1,19.65,141.2,50.1,28.95,114,16.65,1561.35,1411.25,602.45,456.75,109.95,60.25,68.8,33.95,56.5,20.15,3.55,8.5,33.8,135.3,19.75,29.95,153,26.4,5.55,6597.299999999999],
[24.35,51.35,31.75,37.65,159.8,38.3,159.75,291.55,301.1,34,54.75,120.35,27.6,23.3,24.3,16.35,16.3,33,371.55,148.65,21.65,66.4,45.1,184.3,23.8,1370.55,1191.95,562.4,390.1,91.55,64.4,47.85,38.4,60.7,24.75,8.7,8.05,89.45,270,24.55,23.45,166.45,30.55,4.55,6775.4],
[17.2,18.5,13.05,12.4,93.4,15.25,62.6,157.05,165.65,14.65,22.3,56.4,12.7,4.15,9.85,2.35,4.6,13.45,134.55,68.5,69.95,12.75,17.7,86.1,4.55,965.05,851.3,310.75,232.55,46.2,28.1,21.6,14,21.6,4.75,3.1,2.15,15.1,45.2,3.15,8.65,88.9,13.65,1.9,3767.35],
[11,17.95,10.45,11.25,69.15,12,53.3,97.4,120.85,11,31.3,41.85,8.25,8.05,6.25,3.9,6.4,11.65,49.3,35.05,47.25,22.9,13.85,70.75,6.05,802.75,679.05,229.1,206.45,42.3,30.05,22.55,18.1,17.05,4.3,1.85,3.25,7.75,23.9,5.8,5.95,72.2,11.5,3.55,2964.6000000000004],
[20.55,34.15,33.25,24,73.7,19.55,74.2,199.75,231.9,35.65,63.65,82.9,25.1,18.95,16.6,9.7,12.15,35.95,95.15,117,170.35,88.15,67.3,19.75,37.3,1254.95,1272,665.3,591.8,213.6,114.95,62.55,29.25,29,7.25,6.3,14.3,28.75,53.05,5.4,15.3,136,24.85,5.25,6136.550000000001],
[32.6,49.8,18.55,19.75,101.5,41.05,75.85,75,111.6,34.05,133.3,121.25,43,52.5,43,19.25,13.8,25.35,20.85,16.3,21.1,4.4,5.3,33.9,13.15,1524.25,1205.35,872.25,624.9,262.75,157.45,42.35,57.75,33.15,10.2,8.05,26.2,7.9,41.9,12.05,18.8,61.25,26.45,7.2,6126.399999999998],
[331.75,962.15,635.05,800.65,1489.6,829.25,1198,1337.2,1445.75,903.8,995.15,692.25,873.6,747.3,561.1,495.7,968.5,1936.1,1055.4,1924.75,1615.25,1056.85,854.8,1293.75,1735.75,189.15,126.3,574.85,543.95,1138.15,1808,1294.65,1591.4,1329.65,810,604.75,2029.2,612.15,819.8,650.55,604.75,578.85,1164.8,876.9,44087.30000000001],
[315.25,933.6,631,662.65,1054.2,744.65,1106.55,1081.5,1130.2,799.5,887.45,527.3,682.2,619.35,469.95,368.75,711.65,1371.2,881.95,1400.95,1121.55,768.9,619.15,1092.35,1281.35,146.7,131,200.4,490.55,1406.75,2322.5,1741.35,2593.9,1652.95,969.5,490.75,1310.25,476.3,700.35,776.15,648.5,549.6,1362.4,573.3,39806.350000000006],
[331.65,672.65,338.4,388.95,978.45,427.3,753.65,757.65,883.55,546.55,736.95,545.15,430.25,421.05,282.5,212.6,321.05,554.8,422.3,468.75,459.15,240.6,185.3,491.3,806.85,806.95,316.9,145.35,411.2,1594.25,1993.95,1277.2,2366.85,1273.1,645.4,220.7,630.45,234.45,428.15,446.4,425.7,1525.05,756.25,260.7,28416.4],
[239.15,574.85,315.95,370.15,639.9,429,702.15,656.7,658.55,425,654.85,402.7,376.05,335.6,254.5,194.8,240.95,375.65,357.4,392.15,305,207.3,166.8,472.95,604.7,531.2,463.2,359.7,79.4,741.85,1131.2,762,1383.35,704.55,476.7,195.25,466.9,192.05,425.3,359.35,312.7,583.15,486.95,178.85,20186.450000000004],
[122.45,162.35,96.85,148.25,389.75,233.8,369.2,347.55,309.2,187.4,237.7,138.65,94.35,89.85,78.9,66.05,63.95,105.1,89.3,102.45,82.45,43.3,40.95,186.05,256.75,1167.6,1370.65,1859.9,851.8,39.6,314,396.8,714.75,291.1,163.8,48.9,125.05,48,129.65,113.9,140.9,231.15,266.6,46.1,12362.849999999997],
[113.3,156.65,56.25,93.35,280.1,141.55,228.7,259.9,278.8,114.65,195.95,124.25,77.55,74.1,50.3,42.1,28.1,51.15,68.9,54,55.95,27.9,28.45,110,159.35,1522.95,1861.55,2293.05,1209.65,313.2,46.75,308.05,660.65,281.15,166.35,26.1,76.6,31.7,103.75,92.85,151.1,208.65,246.1,34.5,12506.000000000002],
[35.1,47.9,27.35,34.85,131.6,39.4,78.95,130.8,152.2,44.7,53.85,57.6,37.65,22,27.2,11.45,12.9,23.5,32.7,41.95,44.2,16.9,13.5,49.7,46.3,1152,1374.7,1465,697.65,376.1,312.65,28.6,128.15,78.25,65.7,15.05,51.65,10.15,44.75,35.8,72.85,113.1,142.15,17.3,7395.849999999999],
[51.5,78.4,25.55,30.4,103.95,38.9,79.1,99.75,130.1,77.25,90.5,63.4,45.8,36.2,30.95,21.7,22.9,34,41.8,31.4,34.65,12.3,14.7,27.35,63.4,1378.1,1649.65,2907.2,1253.6,633.3,631.85,127,55.1,122,122.85,12.65,53.65,17.95,60.15,73.55,130.5,104.5,141.25,18.75,10779.55],
[30.45,74,30.45,25.95,121.15,29.85,65.05,131.7,158.25,65.1,72.8,77.15,43.35,44.1,30.2,31.4,31.1,53.9,57.75,55.2,56.35,21.9,16.15,29.05,34.85,1271.9,1453.55,1505.8,729.35,301.85,287.2,84.9,136.7,26.85,51.1,16.2,92.3,22.9,47.9,60.7,143.1,178.65,218.9,28.6,8045.650000000001],
[13.35,28.4,6.3,6.35,33.6,10.3,27.85,71.4,102.85,13.55,13.2,20.2,10.15,12.45,7.85,6.4,8.4,10.35,23.15,18.05,24.15,6.55,5.15,6.85,14.25,787,862.85,757.75,465.1,161.85,165.1,68.3,124.4,42.65,14.2,2.95,22.7,8.7,24.25,17.1,65.45,89.6,107.1,3.05,4291.2],
[10.7,11.2,8.8,8.15,55.4,15.3,35.8,84.55,106.45,124.1,71.65,100.9,57.95,78.05,32.5,30.35,25.9,37.7,6.85,3.1,8.25,2.65,2.25,6.65,9,521.45,466.8,277.4,223.2,51.5,27.15,16.7,10.4,16.05,2.2,7.3,117.9,1.85,5,2.3,6.95,22.25,3.7,87.25,2801.5499999999997],
[24.45,44.85,22.8,19.25,160.05,26.2,69.35,194.85,236.45,181.1,147.95,345.7,97.4,215.35,94.4,46.05,75.6,101.25,10.7,8.45,8.35,3.75,3.25,14.7,25.3,1731.1,1314.9,702.9,513.45,133.8,77.7,52,60.15,93.05,23.15,128.85,24.35,2,12.85,21.25,19.05,135.7,20.1,34.5,7278.4],
[7.7,9.25,3.65,3.75,56.8,8.35,55.85,166.45,160.65,12.6,14,50.7,10.55,7.3,11.05,5.45,6.6,9.75,59.9,43,79.4,15.15,6.2,33.4,6,520.1,454.55,263.6,216.05,52.5,31.45,12.45,17.8,22.05,9.35,1.1,2.55,7.65,65.75,9.15,9.3,51.55,14.2,1.9,2606.5500000000006],
[47.45,52.3,13.45,15.35,121.7,34.8,238.95,257.85,305.2,42.25,66.5,142.95,43.8,31.9,49.8,17.4,21.55,39.65,379.7,153.75,262.6,45.4,27.8,62,41.6,676.75,637.35,537.3,505.75,138.8,108.1,53.1,67.7,49.1,29.25,5.35,11.55,73.7,17.65,26.8,43.5,121.3,27.4,6.1,5652.250000000002],
[8.8,26.3,7.15,4.95,34.85,6,25.5,63.3,74.55,10.05,13.3,22.05,8.95,8.4,10.6,9.6,6.75,6.9,21.95,18.1,24.6,3.3,6.05,7.05,9.6,624.05,688.3,511.35,351.95,109.55,99.75,36.85,79.95,54.45,15.8,4.1,23.1,10,24.75,10.7,46.5,40,58.05,4.9,3232.7499999999995],
[22.65,46.5,8.9,12.75,47.5,16.55,33.1,49.5,75.65,11.95,31.95,31.05,14.2,18.5,11.85,6.45,7.45,7.8,27.95,28.5,25.35,8.5,7.15,15.3,23.95,581.85,608.55,497.9,338.6,139.2,162.75,76.75,146.15,150.9,72.25,5.2,17.6,9.35,42.7,44.75,11.25,59,78.7,4.15,3638.599999999999],
[41.95,90.1,64.9,96.7,185.8,68.05,124.55,89.5,118.2,35.9,56.9,56.65,38.1,26.3,22.6,12.3,21.85,54.15,113.35,165.1,177.85,99.75,83.95,149.8,86.2,578.3,546.8,1315.05,545,235.9,226,119.15,113.5,177.55,100.9,22.75,137.1,59.4,127.1,41.95,59.7,53.55,384,39.85,6964.049999999999],
[35.95,52.95,27.2,35.85,165.5,32.75,66.8,99.3,134.2,20.1,33.05,36.45,22.45,11.05,7.05,5.25,5.15,9.35,24.25,26.35,30.1,11.45,11,22.1,25.3,1082.7,1226.35,792.35,473.9,251.75,246,143.4,168.35,240.1,119.6,3.9,22.05,13.4,26.9,60.45,72.25,347.45,33.45,9,6284.299999999999],
[4.45,20.2,11.65,7.05,76.35,11.25,25.25,90.75,120.65,88.85,64.9,145.85,52.15,126.45,44.45,34.75,36.15,41.1,7,7.15,4.35,1.7,3.8,6.25,7.9,799.3,591.8,302,204.9,48.1,35.5,19,19.5,31.1,2.95,99.8,32.65,1.9,8.4,5.5,4.05,42.3,8.5,12.7,3310.3500000000004],
[3883.6499999999987,8017.75,4618.1,4479.150000000001,12796.099999999999,5424.050000000002,8954.499999999998,11492.849999999999,13295.700000000003,6167.300000000002,8032.749999999999,7636.749999999999,5630.549999999999,5806.950000000002,5040.35,3298.7999999999993,4620.1,8290.999999999998,5919.699999999999,6826.5,6644.250000000001,3654.000000000001,2847.9000000000005,5620.5,6393.6,39069.05000000001,37460.50000000001,32492.15,22340.249999999996,12195.15,13088.000000000004,7966.599999999999,11828.300000000001,8042.9000000000015,4366.7,2847.95,7434.500000000001,2705.25,5614.449999999999,3300.95,3542.3499999999995,6993.9,6501.1,3231.3999999999996,396414.29999999993]]
}
[
{
"code": "RM",
"name": "Richmond",
"x": 337.2519027299527,
"y": 97.24952566866301,
"nameX": -53,
"nameY": -17,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 670.6939608764649,
"orange": 0
}
},
{
"code": "EN",
"name": "El Cerrito Del Norte",
"x": 378.7681505397055,
"y": 96.61348564588465,
"nameX": -2,
"nameY": -16,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 637.0583560180663,
"orange": 30.488238525390628
}
},
{
"code": "EP",
"name": "El Cerrito Plaza",
"x": 406.7192649880145,
"y": 109.35490167293699,
"nameX": -99,
"nameY": 7,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 608.8044479370118,
"orange": 73.1717724609375
}
},
{
"code": "NB",
"name": "North Berkeley",
"x": 409.03110342553816,
"y": 129.85777184832375,
"nameX": -96,
"nameY": 4,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 589.4639751434325,
"orange": 91.46471557617187
}
},
{
"code": "BK",
"name": "Berkeley",
"x": 409.4475327723846,
"y": 147.93217596529985,
"nameX": -59,
"nameY": 2,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 569.7871463012696,
"orange": 109.75765869140625
}
},
{
"code": "AS",
"name": "Ashby",
"x": 407.04815876570535,
"y": 169.29698920819445,
"nameX": -51,
"nameY": 3,
"routes": [
"orange",
"red"
],
"offsets": {
"red": 550.1103174591065,
"orange": 134.14824951171875
}
},
{
"code": "MA",
"name": "MacArthur",
"x": 407.35532210963777,
"y": 191.98105409529992,
"nameX": -70,
"nameY": 2,
"routes": [
"orange",
"red",
"yellow"
],
"offsets": {
"red": 527.7426402282715,
"orange": 158.53884033203124
}
},
{
"code": "19",
"name": "19th Street Oakland",
"x": 406.4762217817083,
"y": 211.281455807928,
"nameX": 10,
"nameY": 3,
"routes": [
"orange",
"red",
"yellow"
],
"offsets": {
"red": 507.8976333618164,
"orange": 176.83178344726562
}
},
{
"code": "12",
"name": "12th Street / Oakland City Center",
"x": 406.72745221162216,
"y": 231.4813762536133,
"nameX": 10,
"nameY": 4,
"routes": [
"orange",
"red",
"yellow"
],
"offsets": {
"red": 488.5571605682373,
"orange": 195.1247265625,
"yellow": 507.9115513305664
}
},
{
"code": "LM",
"name": "Lake Merritt",
"x": 420.1784636294283,
"y": 284.6640022135573,
"nameX": 15,
"nameY": 5,
"routes": [
"orange",
"green",
"blue"
],
"offsets": {
"orange": 250.0035559082031,
"blue": 272.0680917666626,
"green": 357.25103759765625
}
},
{
"code": "FV",
"name": "Fruitvale",
"x": 448.22722799262965,
"y": 306.6533642988233,
"nameX": 18,
"nameY": 3,
"routes": [
"orange",
"green",
"blue"
],
"offsets": {
"orange": 292.68708984375,
"blue": 241.6294870063782,
"green": 321.52593383789065
}
},
{
"code": "CL",
"name": "Coliseum / Oakland Airport",
"x": 471.8996493296977,
"y": 335.59136392283256,
"nameX": 12,
"nameY": -5,
"routes": [
"orange",
"green",
"blue"
],
"offsets": {
"orange": 335.3706237792969,
"blue": 202.8743235684204,
"green": 285.800830078125
}
},
{
"code": "SL",
"name": "San Leandro",
"x": 495.4028909328207,
"y": 358.8716192563297,
"nameX": 16,
"nameY": 1,
"routes": [
"orange",
"green",
"blue"
],
"offsets": {
"orange": 359.76121459960933,
"blue": 166.78045890731812,
"green": 256.1489939575195
}
},
{
"code": "BF",
"name": "Bayfair",
"x": 514.6943613496702,
"y": 379.86474627215415,
"nameX": 19,
"nameY": 0,
"routes": [
"orange",
"green",
"blue"
],
"offsets": {
"orange": 390.249453125,
"blue": 134.5944208984375,
"green": 228.6406640625
}
},
{
"code": "HY",
"name": "Hayward",
"x": 541.1807193209604,
"y": 412.7951991516957,
"nameX": -63,
"nameY": 8,
"routes": [
"orange",
"green"
],
"offsets": {
"orange": 426.8353393554687,
"green": 184.52016091918944
}
},
{
"code": "SH",
"name": "South Hayward",
"x": 577.610563062653,
"y": 445.74010956377725,
"nameX": -102,
"nameY": 13,
"routes": [
"orange",
"green"
],
"offsets": {
"orange": 475.61652099609375,
"green": 128.61037353515624
}
},
{
"code": "UC",
"name": "Union City",
"x": 632.3352013461757,
"y": 499.1954842959484,
"nameX": -75,
"nameY": 10,
"routes": [
"orange",
"green"
],
"offsets": {
"orange": 560.9835888671876,
"green": 50.01514526367188
}
},
{
"code": "FM",
"name": "Fremont",
"x": 670.2401071316656,
"y": 538.0354696054292,
"nameX": 20,
"nameY": 4,
"routes": [
"orange",
"green"
],
"offsets": {
"orange": 609.7647705078125,
"green": 0
}
},
{
"code": "CN",
"name": "Concord",
"x": 557.924535712367,
"y": 79.22608115762478,
"nameX": 16,
"nameY": 7,
"routes": [
"yellow"
],
"offsets": {
"yellow": 746.3555411682129
}
},
{
"code": "PH",
"name": "Pleasant Hill",
"x": 535.3732558397669,
"y": 98.47572374612093,
"nameX": 16,
"nameY": 3,
"routes": [
"yellow"
],
"offsets": {
"yellow": 719.9059576416016
}
},
{
"code": "WC",
"name": "Walnut Creek",
"x": 517.3768656339869,
"y": 115.95939369412139,
"nameX": 14,
"nameY": 7,
"routes": [
"yellow"
],
"offsets": {
"yellow": 696.8371479492188
}
},
{
"code": "LF",
"name": "Lafayette",
"x": 495.41654099955224,
"y": 140.1603028003825,
"nameX": 13,
"nameY": 6,
"routes": [
"yellow"
],
"offsets": {
"yellow": 663.6260167541504
}
},
{
"code": "OR",
"name": "Orinda",
"x": 475.8728397351224,
"y": 159.32197172119288,
"nameX": 13,
"nameY": 12,
"routes": [
"yellow"
],
"offsets": {
"yellow": 633.7956593933105
}
},
{
"code": "RR",
"name": "Rockridge",
"x": 445.36074513683093,
"y": 165.3618431656249,
"nameX": -20,
"nameY": -18,
"routes": [
"yellow"
],
"offsets": {
"yellow": 600.5845281982422
}
},
{
"code": "OW",
"name": "West Oakland",
"x": 350.1908433724288,
"y": 239.84746471214112,
"nameX": -70,
"nameY": -13,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 440.79460166931153,
"yellow": 451.432741394043,
"blue": 358.0613084938049,
"green": 435.8462658691406
}
},
{
"code": "EM",
"name": "Embarcadero",
"x": 242.86626160625372,
"y": 248.8465810839366,
"nameX": -79,
"nameY": -8,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 314.4929054260254,
"yellow": 338.6739905700684,
"blue": 471.6655000308228,
"green": 543.0215771484375
}
},
{
"code": "MT",
"name": "Montgomery Street",
"x": 222.53345882618805,
"y": 268.8065262252371,
"nameX": -117,
"nameY": -6,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 292.2934062194824,
"yellow": 308.8436332092285,
"blue": 499.2764748406983,
"green": 571.60166015625
}
},
{
"code": "PL",
"name": "Powell Street",
"x": 205.01421027183534,
"y": 285.4042817873834,
"nameX": -91,
"nameY": 2,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 267.0667025756836,
"yellow": 282.39404968261715,
"blue": 521.7311832704162,
"green": 593.0367224121094
}
},
{
"code": "CC",
"name": "Civic Center",
"x": 191.4310487190727,
"y": 305.76649480127264,
"nameX": -85,
"nameY": 4,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 238.8127944946289,
"yellow": 259.1263709411621,
"blue": 535.3187194824219,
"green": 614.4717846679688
}
},
{
"code": "16",
"name": "16th Street Mission",
"x": 188.67462086226791,
"y": 327.0067256691307,
"nameX": -119,
"nameY": 4,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 210.8952424621582,
"yellow": 236.0575612487793,
"blue": 568.8029053860473,
"green": 635.9068469238281
}
},
{
"code": "24",
"name": "24th Street Mission",
"x": 184.64212326612324,
"y": 347.66754772265904,
"nameX": -120,
"nameY": 4,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 191.38659164428708,
"yellow": 212.78988250732422,
"blue": 588.850591430664,
"green": 664.4869299316407
}
},
{
"code": "GP",
"name": "Glen Park",
"x": 169.1385176723171,
"y": 363.5643937920547,
"nameX": 13,
"nameY": 8,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 177.25963760375978,
"yellow": 196.28375143432618,
"blue": 610.3856987744141,
"green": 685.9219921875
}
},
{
"code": "BP",
"name": "Balboa Park",
"x": 158.79430814798923,
"y": 379.53695317035545,
"nameX": -82,
"nameY": -6,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 151.86475593566894,
"yellow": 173.0160726928711,
"blue": 627.0876428222656,
"green": 700.2120336914062
}
},
{
"code": "DC",
"name": "Daly City",
"x": 156.3311665538605,
"y": 397.1604901606404,
"nameX": -62,
"nameY": 4,
"routes": [
"red",
"yellow",
"blue",
"green"
],
"offsets": {
"red": 132.52428314208984,
"yellow": 150.74273919677734,
"blue": 646.4795634355163,
"green": 714.5020751953125
}
},
{
"code": "CM",
"name": "Colma",
"x": 160.98419984665702,
"y": 425.4218602246791,
"nameX": 16,
"nameY": 2,
"routes": [
"red",
"yellow",
"blue"
],
"offsets": {
"red": 101.41134864807128,
"yellow": 125.88410806274415,
"blue": 672.9721044921876
}
},
{
"code": "CV",
"name": "Castro Valley",
"x": 577.5645999231376,
"y": 395.7569965145458,
"nameX": 4,
"nameY": -14,
"routes": [
"blue"
],
"offsets": {
"blue": 73.415138671875
}
},
{
"code": "ED",
"name": "Dublin / Pleasanton",
"x": 644.9518940068036,
"y": 397.96949249867816,
"nameX": 14,
"nameY": 3,
"routes": [
"blue"
],
"offsets": {
"blue": 0
}
},
{
"code": "NC",
"name": "North Concord / Martinez",
"x": 576.5643980837334,
"y": 61.740233782883735,
"nameX": 16,
"nameY": 3,
"routes": [
"yellow"
],
"offsets": {
"yellow": 776.1858985290528
}
},
{
"code": "WP",
"name": "Pittsburg / Baypoint",
"x": 596.3787407822348,
"y": 40.58420126937335,
"nameX": 17,
"nameY": 3,
"routes": [
"yellow"
],
"offsets": {
"yellow": 792.890898651123
}
},
{
"code": "SS",
"name": "South San Francisco",
"x": 177.56221861569213,
"y": 446.7829217383964,
"nameX": 16,
"nameY": 3,
"routes": [
"red",
"yellow",
"blue"
],
"offsets": {
"red": 73.49379661560059,
"yellow": 92.87184591674806,
"blue": 703.5617456054688
}
},
{
"code": "SB",
"name": "San Bruno",
"x": 202.6848707394954,
"y": 469.8093068131293,
"nameX": -72,
"nameY": 13,
"routes": [
"red",
"yellow",
"blue"
],
"offsets": {
"red": 26.572127838134765,
"yellow": 62.84261950683594,
"blue": 726.5039764404297
}
},
{
"code": "MB",
"name": "Millbrae",
"x": 221.54718851863413,
"y": 496.68394520164,
"nameX": -57,
"nameY": 14,
"routes": [
"red",
"yellow",
"blue"
],
"offsets": {
"red": 5.718052825927735,
"blue": 757.0936175537109
}
},
{
"code": "SO",
"name": "San Francisco International Airport",
"x": 263.39984044084326,
"y": 469.4198474137625,
"nameX": 0,
"nameY": 24,
"routes": [
"red",
"yellow",
"blue"
],
"offsets": {
"yellow": 6.562678619384766
}
},
{
"code": "WD",
"name": "West Dublin / Pleasanton",
"x": 614.27280872887,
"y": 398.3866290775128,
"nameX": 2,
"nameY": 22,
"routes": [
"blue"
],
"offsets": {
"blue": 35.17808728027344
}
}
]
#canvas {
position: absolute;
top: 70px;
left: 0;
}
#lines {
opacity: 0.02;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment