d3_rails 3.1.6 → 3.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/MIT_LICENSE +28 -0
- data/README.md +1 -5
- data/lib/d3_rails/version.rb +1 -1
- data/vendor/assets/javascripts/d3.js +289 -141
- data/vendor/assets/javascripts/d3.min.js +5 -5
- metadata +57 -73
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MzM3NDZhNmI3NmIzNTU2OTBjYWQ4ZGRlZjkwZTA2NDE0ZTUxNWVjZQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmE4ZTc2MTIyNjcyZmEyNWIwNDM3ZGI4MGY5MWY3NWQzMDg1OWU0Ng==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmE5MjU3MTU5NjVmNWE3NWIyZmQ4NTAxZTBhMWJlOGEzOTkyOTEzMGI5MWNl
|
10
|
+
M2YyZWExMjA3OTMyOWQ1NzY1YzQ1ZmVjMDQ5NzUyMDZmODA3NzhhYWM5YjQw
|
11
|
+
YmE4ZTA2MTg4Yzk0OTU2MmU2MDc4NzY5YjQ2MGI2MTVjZjAyNGE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZTZjZGUzMGUzNDEzZTg2N2ZmZGIzMDBjMmJkNDEwM2Y0NmEwZjAzMDk0MWRi
|
14
|
+
NzIzOTYyODE1MGIxZWJkZDE2YjQ5NjFjNDc4NzMwODRjZjYzM2RhZTc3ZTNi
|
15
|
+
ZGQ3YTg0YzY4NDgxYzg5ZDNlOWI1NDZmNjI5YTlkNjRlNDI2ODE=
|
data/MIT_LICENSE
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
d3_rails License
|
2
|
+
(note that this license only really covers the ruby part
|
3
|
+
of the code, d3 has it's own license which is also included
|
4
|
+
in this gem, thank you Michael Bostocks for sharing
|
5
|
+
your framework).
|
6
|
+
---------------------------
|
7
|
+
|
8
|
+
The MIT License (MIT)
|
9
|
+
|
10
|
+
Copyright (c) 2011-2013, Han Kang
|
11
|
+
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
14
|
+
in the Software without restriction, including without limitation the rights
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
17
|
+
furnished to do so, subject to the following conditions:
|
18
|
+
|
19
|
+
The above copyright notice and this permission notice shall be included in
|
20
|
+
all copies or substantial portions of the Software.
|
21
|
+
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
28
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# D3_Rails
|
2
|
+
## Version 3.1.9 (of d3 in most current gem)
|
2
3
|
|
3
4
|
**D3_Rails** is a small, lightweight gem which allows you to include any
|
4
5
|
and all of D3 Javascripts into your 3.1 Rails application, merely by
|
@@ -12,11 +13,6 @@ handle interactivity, and incorporate smooth transitions and staged animations
|
|
12
13
|
into your pages. You can use D3 as a visualization framework (like Protovis),
|
13
14
|
or you can use it to build dynamic pages (like jQuery).
|
14
15
|
|
15
|
-
# D3 Version
|
16
|
-
|
17
|
-
The current release of this gem is using **D3 v=3.1.6**
|
18
|
-
**Last Updated 5-9-2013**
|
19
|
-
|
20
16
|
# Included Javascripts
|
21
17
|
|
22
18
|
d3.js
|
data/lib/d3_rails/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
d3 = function() {
|
2
2
|
var d3 = {
|
3
|
-
version: "3.1.
|
3
|
+
version: "3.1.9"
|
4
4
|
};
|
5
5
|
if (!Date.now) Date.now = function() {
|
6
6
|
return +new Date();
|
@@ -2076,7 +2076,7 @@ d3 = function() {
|
|
2076
2076
|
d3.geo.stream(object, d3_geo_area);
|
2077
2077
|
return d3_geo_areaSum;
|
2078
2078
|
};
|
2079
|
-
var d3_geo_areaSum,
|
2079
|
+
var d3_geo_areaSum, d3_geo_areaRingSum;
|
2080
2080
|
var d3_geo_area = {
|
2081
2081
|
sphere: function() {
|
2082
2082
|
d3_geo_areaSum += 4 * π;
|
@@ -2085,11 +2085,11 @@ d3 = function() {
|
|
2085
2085
|
lineStart: d3_noop,
|
2086
2086
|
lineEnd: d3_noop,
|
2087
2087
|
polygonStart: function() {
|
2088
|
-
|
2088
|
+
d3_geo_areaRingSum = 0;
|
2089
2089
|
d3_geo_area.lineStart = d3_geo_areaRingStart;
|
2090
2090
|
},
|
2091
2091
|
polygonEnd: function() {
|
2092
|
-
var area = 2 *
|
2092
|
+
var area = 2 * d3_geo_areaRingSum;
|
2093
2093
|
d3_geo_areaSum += area < 0 ? 4 * π + area : area;
|
2094
2094
|
d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
|
2095
2095
|
}
|
@@ -2104,44 +2104,169 @@ d3 = function() {
|
|
2104
2104
|
function nextPoint(λ, φ) {
|
2105
2105
|
λ *= d3_radians;
|
2106
2106
|
φ = φ * d3_radians / 2 + π / 4;
|
2107
|
-
var dλ = λ - λ0, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ,
|
2108
|
-
|
2109
|
-
d3_geo_areaRingV = v0 * u + u0 * v;
|
2107
|
+
var dλ = λ - λ0, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(dλ), v = k * Math.sin(dλ);
|
2108
|
+
d3_geo_areaRingSum += Math.atan2(v, u);
|
2110
2109
|
λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
|
2111
2110
|
}
|
2112
2111
|
d3_geo_area.lineEnd = function() {
|
2113
2112
|
nextPoint(λ00, φ00);
|
2114
2113
|
};
|
2115
2114
|
}
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2115
|
+
function d3_geo_cartesian(spherical) {
|
2116
|
+
var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
|
2117
|
+
return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
|
2118
|
+
}
|
2119
|
+
function d3_geo_cartesianDot(a, b) {
|
2120
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
2121
|
+
}
|
2122
|
+
function d3_geo_cartesianCross(a, b) {
|
2123
|
+
return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
|
2124
|
+
}
|
2125
|
+
function d3_geo_cartesianAdd(a, b) {
|
2126
|
+
a[0] += b[0];
|
2127
|
+
a[1] += b[1];
|
2128
|
+
a[2] += b[2];
|
2129
|
+
}
|
2130
|
+
function d3_geo_cartesianScale(vector, k) {
|
2131
|
+
return [ vector[0] * k, vector[1] * k, vector[2] * k ];
|
2132
|
+
}
|
2133
|
+
function d3_geo_cartesianNormalize(d) {
|
2134
|
+
var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
|
2135
|
+
d[0] /= l;
|
2136
|
+
d[1] /= l;
|
2137
|
+
d[2] /= l;
|
2138
|
+
}
|
2139
|
+
function d3_geo_spherical(cartesian) {
|
2140
|
+
return [ Math.atan2(cartesian[1], cartesian[0]), Math.asin(Math.max(-1, Math.min(1, cartesian[2]))) ];
|
2141
|
+
}
|
2142
|
+
function d3_geo_sphericalEqual(a, b) {
|
2143
|
+
return Math.abs(a[0] - b[0]) < ε && Math.abs(a[1] - b[1]) < ε;
|
2144
|
+
}
|
2145
|
+
d3.geo.bounds = function() {
|
2146
|
+
var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
|
2119
2147
|
var bound = {
|
2120
|
-
point:
|
2121
|
-
lineStart:
|
2122
|
-
lineEnd:
|
2148
|
+
point: point,
|
2149
|
+
lineStart: lineStart,
|
2150
|
+
lineEnd: lineEnd,
|
2123
2151
|
polygonStart: function() {
|
2124
|
-
bound.
|
2152
|
+
bound.point = ringPoint;
|
2153
|
+
bound.lineStart = ringStart;
|
2154
|
+
bound.lineEnd = ringEnd;
|
2155
|
+
dλSum = 0;
|
2156
|
+
d3_geo_area.polygonStart();
|
2125
2157
|
},
|
2126
2158
|
polygonEnd: function() {
|
2127
|
-
|
2159
|
+
d3_geo_area.polygonEnd();
|
2160
|
+
bound.point = point;
|
2161
|
+
bound.lineStart = lineStart;
|
2162
|
+
bound.lineEnd = lineEnd;
|
2163
|
+
if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
|
2164
|
+
range[0] = λ0, range[1] = λ1;
|
2165
|
+
}
|
2166
|
+
};
|
2167
|
+
function point(λ, φ) {
|
2168
|
+
ranges.push(range = [ λ0 = λ, λ1 = λ ]);
|
2169
|
+
if (φ < φ0) φ0 = φ;
|
2170
|
+
if (φ > φ1) φ1 = φ;
|
2171
|
+
}
|
2172
|
+
function linePoint(λ, φ) {
|
2173
|
+
var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);
|
2174
|
+
if (p0) {
|
2175
|
+
var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);
|
2176
|
+
d3_geo_cartesianNormalize(inflection);
|
2177
|
+
inflection = d3_geo_spherical(inflection);
|
2178
|
+
var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = Math.abs(dλ) > 180;
|
2179
|
+
if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
|
2180
|
+
var φi = inflection[1] * d3_degrees;
|
2181
|
+
if (φi > φ1) φ1 = φi;
|
2182
|
+
} else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
|
2183
|
+
var φi = -inflection[1] * d3_degrees;
|
2184
|
+
if (φi < φ0) φ0 = φi;
|
2185
|
+
} else {
|
2186
|
+
if (φ < φ0) φ0 = φ;
|
2187
|
+
if (φ > φ1) φ1 = φ;
|
2188
|
+
}
|
2189
|
+
if (antimeridian) {
|
2190
|
+
if (λ < λ_) {
|
2191
|
+
if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
|
2192
|
+
} else {
|
2193
|
+
if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
|
2194
|
+
}
|
2195
|
+
} else {
|
2196
|
+
if (λ1 >= λ0) {
|
2197
|
+
if (λ < λ0) λ0 = λ;
|
2198
|
+
if (λ > λ1) λ1 = λ;
|
2199
|
+
} else {
|
2200
|
+
if (λ > λ_) {
|
2201
|
+
if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
|
2202
|
+
} else {
|
2203
|
+
if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
|
2204
|
+
}
|
2205
|
+
}
|
2206
|
+
}
|
2207
|
+
} else {
|
2208
|
+
point(λ, φ);
|
2128
2209
|
}
|
2129
|
-
|
2130
|
-
|
2131
|
-
|
2132
|
-
|
2133
|
-
if (y < y0) y0 = y;
|
2134
|
-
if (y > y1) y1 = y;
|
2210
|
+
p0 = p, λ_ = λ;
|
2211
|
+
}
|
2212
|
+
function lineStart() {
|
2213
|
+
bound.point = linePoint;
|
2135
2214
|
}
|
2136
|
-
function
|
2137
|
-
|
2215
|
+
function lineEnd() {
|
2216
|
+
range[0] = λ0, range[1] = λ1;
|
2217
|
+
bound.point = point;
|
2218
|
+
p0 = null;
|
2219
|
+
}
|
2220
|
+
function ringPoint(λ, φ) {
|
2221
|
+
if (p0) {
|
2222
|
+
var dλ = λ - λ_;
|
2223
|
+
dλSum += Math.abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
|
2224
|
+
} else λ__ = λ, φ__ = φ;
|
2225
|
+
d3_geo_area.point(λ, φ);
|
2226
|
+
linePoint(λ, φ);
|
2227
|
+
}
|
2228
|
+
function ringStart() {
|
2229
|
+
d3_geo_area.lineStart();
|
2230
|
+
}
|
2231
|
+
function ringEnd() {
|
2232
|
+
ringPoint(λ__, φ__);
|
2233
|
+
d3_geo_area.lineEnd();
|
2234
|
+
if (Math.abs(dλSum) > ε) λ0 = -(λ1 = 180);
|
2235
|
+
range[0] = λ0, range[1] = λ1;
|
2236
|
+
p0 = null;
|
2237
|
+
}
|
2238
|
+
function angle(λ0, λ1) {
|
2239
|
+
return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
|
2240
|
+
}
|
2241
|
+
function compareRanges(a, b) {
|
2242
|
+
return a[0] - b[0];
|
2243
|
+
}
|
2244
|
+
function withinRange(x, range) {
|
2245
|
+
return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
|
2138
2246
|
}
|
2139
2247
|
return function(feature) {
|
2140
|
-
|
2141
|
-
|
2142
|
-
|
2248
|
+
φ1 = λ1 = -(λ0 = φ0 = Infinity);
|
2249
|
+
ranges = [];
|
2250
|
+
d3.geo.stream(feature, bound);
|
2251
|
+
ranges.sort(compareRanges);
|
2252
|
+
for (var i = 1, n = ranges.length, a = ranges[0], b, merged = [ a ]; i < n; ++i) {
|
2253
|
+
b = ranges[i];
|
2254
|
+
if (withinRange(b[0], a) || withinRange(b[1], a)) {
|
2255
|
+
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
|
2256
|
+
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
|
2257
|
+
} else {
|
2258
|
+
merged.push(a = b);
|
2259
|
+
}
|
2260
|
+
}
|
2261
|
+
var best = -Infinity, dλ;
|
2262
|
+
for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
|
2263
|
+
b = merged[i];
|
2264
|
+
if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
|
2265
|
+
}
|
2266
|
+
ranges = range = null;
|
2267
|
+
return [ [ λ0, φ0 ], [ λ1, φ1 ] ];
|
2143
2268
|
};
|
2144
|
-
}
|
2269
|
+
}();
|
2145
2270
|
d3.geo.centroid = function(object) {
|
2146
2271
|
d3_geo_centroidDimension = d3_geo_centroidW = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
|
2147
2272
|
d3.geo.stream(object, d3_geo_centroid);
|
@@ -2223,39 +2348,9 @@ d3 = function() {
|
|
2223
2348
|
function d3_geo_centroidLineEnd() {
|
2224
2349
|
d3_geo_centroid.point = d3_geo_centroidPoint;
|
2225
2350
|
}
|
2226
|
-
function d3_geo_cartesian(spherical) {
|
2227
|
-
var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
|
2228
|
-
return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
|
2229
|
-
}
|
2230
|
-
function d3_geo_cartesianDot(a, b) {
|
2231
|
-
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
2232
|
-
}
|
2233
|
-
function d3_geo_cartesianCross(a, b) {
|
2234
|
-
return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
|
2235
|
-
}
|
2236
|
-
function d3_geo_cartesianAdd(a, b) {
|
2237
|
-
a[0] += b[0];
|
2238
|
-
a[1] += b[1];
|
2239
|
-
a[2] += b[2];
|
2240
|
-
}
|
2241
|
-
function d3_geo_cartesianScale(vector, k) {
|
2242
|
-
return [ vector[0] * k, vector[1] * k, vector[2] * k ];
|
2243
|
-
}
|
2244
|
-
function d3_geo_cartesianNormalize(d) {
|
2245
|
-
var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
|
2246
|
-
d[0] /= l;
|
2247
|
-
d[1] /= l;
|
2248
|
-
d[2] /= l;
|
2249
|
-
}
|
2250
2351
|
function d3_true() {
|
2251
2352
|
return true;
|
2252
2353
|
}
|
2253
|
-
function d3_geo_spherical(cartesian) {
|
2254
|
-
return [ Math.atan2(cartesian[1], cartesian[0]), Math.asin(Math.max(-1, Math.min(1, cartesian[2]))) ];
|
2255
|
-
}
|
2256
|
-
function d3_geo_sphericalEqual(a, b) {
|
2257
|
-
return Math.abs(a[0] - b[0]) < ε && Math.abs(a[1] - b[1]) < ε;
|
2258
|
-
}
|
2259
2354
|
function d3_geo_clipPolygon(segments, compare, inside, interpolate, listener) {
|
2260
2355
|
var subject = [], clip = [];
|
2261
2356
|
segments.forEach(function(segment) {
|
@@ -2752,7 +2847,7 @@ d3 = function() {
|
|
2752
2847
|
}
|
2753
2848
|
listener.point(b[0], b[1]);
|
2754
2849
|
if (!v) listener.lineEnd();
|
2755
|
-
} else {
|
2850
|
+
} else if (v) {
|
2756
2851
|
listener.lineStart();
|
2757
2852
|
listener.point(x, y);
|
2758
2853
|
}
|
@@ -3257,63 +3352,94 @@ d3 = function() {
|
|
3257
3352
|
}
|
3258
3353
|
forward.invert = function(x, y) {
|
3259
3354
|
var ρ0_y = ρ0 - y;
|
3260
|
-
return [ Math.atan2(x, ρ0_y) / n,
|
3355
|
+
return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
|
3261
3356
|
};
|
3262
3357
|
return forward;
|
3263
3358
|
}
|
3264
3359
|
(d3.geo.conicEqualArea = function() {
|
3265
3360
|
return d3_geo_conic(d3_geo_conicEqualArea);
|
3266
3361
|
}).raw = d3_geo_conicEqualArea;
|
3362
|
+
d3.geo.albers = function() {
|
3363
|
+
return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);
|
3364
|
+
};
|
3267
3365
|
d3.geo.albersUsa = function() {
|
3268
|
-
var lower48 = d3.geo.
|
3269
|
-
var alaska = d3.geo.conicEqualArea().rotate([
|
3270
|
-
var hawaii = d3.geo.conicEqualArea().rotate([
|
3271
|
-
var
|
3272
|
-
|
3366
|
+
var lower48 = d3.geo.albers();
|
3367
|
+
var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);
|
3368
|
+
var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);
|
3369
|
+
var point, pointStream = {
|
3370
|
+
point: function(x, y) {
|
3371
|
+
point = [ x, y ];
|
3372
|
+
}
|
3373
|
+
}, lower48Point, alaskaPoint, hawaiiPoint;
|
3273
3374
|
function albersUsa(coordinates) {
|
3274
|
-
|
3275
|
-
|
3276
|
-
|
3277
|
-
|
3278
|
-
return lat > 50 ? alaska : lon < -140 ? hawaii : lat < 21 ? puertoRico : lower48;
|
3375
|
+
var x = coordinates[0], y = coordinates[1];
|
3376
|
+
point = null;
|
3377
|
+
(lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
|
3378
|
+
return point;
|
3279
3379
|
}
|
3280
3380
|
albersUsa.invert = function(coordinates) {
|
3281
|
-
|
3381
|
+
var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
|
3382
|
+
return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
|
3282
3383
|
};
|
3283
|
-
albersUsa.
|
3384
|
+
albersUsa.stream = function(stream) {
|
3385
|
+
var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
|
3386
|
+
return {
|
3387
|
+
point: function(x, y) {
|
3388
|
+
lower48Stream.point(x, y);
|
3389
|
+
alaskaStream.point(x, y);
|
3390
|
+
hawaiiStream.point(x, y);
|
3391
|
+
},
|
3392
|
+
sphere: function() {
|
3393
|
+
lower48Stream.sphere();
|
3394
|
+
alaskaStream.sphere();
|
3395
|
+
hawaiiStream.sphere();
|
3396
|
+
},
|
3397
|
+
lineStart: function() {
|
3398
|
+
lower48Stream.lineStart();
|
3399
|
+
alaskaStream.lineStart();
|
3400
|
+
hawaiiStream.lineStart();
|
3401
|
+
},
|
3402
|
+
lineEnd: function() {
|
3403
|
+
lower48Stream.lineEnd();
|
3404
|
+
alaskaStream.lineEnd();
|
3405
|
+
hawaiiStream.lineEnd();
|
3406
|
+
},
|
3407
|
+
polygonStart: function() {
|
3408
|
+
lower48Stream.polygonStart();
|
3409
|
+
alaskaStream.polygonStart();
|
3410
|
+
hawaiiStream.polygonStart();
|
3411
|
+
},
|
3412
|
+
polygonEnd: function() {
|
3413
|
+
lower48Stream.polygonEnd();
|
3414
|
+
alaskaStream.polygonEnd();
|
3415
|
+
hawaiiStream.polygonEnd();
|
3416
|
+
}
|
3417
|
+
};
|
3418
|
+
};
|
3419
|
+
albersUsa.precision = function(_) {
|
3420
|
+
if (!arguments.length) return lower48.precision();
|
3421
|
+
lower48.precision(_);
|
3422
|
+
alaska.precision(_);
|
3423
|
+
hawaii.precision(_);
|
3424
|
+
return albersUsa;
|
3425
|
+
};
|
3426
|
+
albersUsa.scale = function(_) {
|
3284
3427
|
if (!arguments.length) return lower48.scale();
|
3285
|
-
lower48.scale(
|
3286
|
-
alaska.scale(
|
3287
|
-
hawaii.scale(
|
3288
|
-
puertoRico.scale(x * 1.5);
|
3428
|
+
lower48.scale(_);
|
3429
|
+
alaska.scale(_ * .35);
|
3430
|
+
hawaii.scale(_);
|
3289
3431
|
return albersUsa.translate(lower48.translate());
|
3290
3432
|
};
|
3291
|
-
albersUsa.translate = function(
|
3433
|
+
albersUsa.translate = function(_) {
|
3292
3434
|
if (!arguments.length) return lower48.translate();
|
3293
|
-
var
|
3294
|
-
lower48.translate(x);
|
3295
|
-
alaska.translate([
|
3296
|
-
hawaii.translate([
|
3297
|
-
puertoRico.translate([ dx + .58 * dz, dy + .43 * dz ]);
|
3298
|
-
alaskaInvert = d3_geo_albersUsaInvert(alaska, [ [ -180, 50 ], [ -130, 72 ] ]);
|
3299
|
-
hawaiiInvert = d3_geo_albersUsaInvert(hawaii, [ [ -164, 18 ], [ -154, 24 ] ]);
|
3300
|
-
puertoRicoInvert = d3_geo_albersUsaInvert(puertoRico, [ [ -67.5, 17.5 ], [ -65, 19 ] ]);
|
3435
|
+
var k = lower48.scale(), x = +_[0], y = +_[1];
|
3436
|
+
lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;
|
3437
|
+
alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
|
3438
|
+
hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
|
3301
3439
|
return albersUsa;
|
3302
3440
|
};
|
3303
|
-
return albersUsa.scale(
|
3441
|
+
return albersUsa.scale(1070);
|
3304
3442
|
};
|
3305
|
-
function d3_geo_albersUsaInvert(projection, extent) {
|
3306
|
-
var a = projection(extent[0]), b = projection([ .5 * (extent[0][0] + extent[1][0]), extent[0][1] ]), c = projection([ extent[1][0], extent[0][1] ]), d = projection(extent[1]);
|
3307
|
-
var dya = b[1] - a[1], dxa = b[0] - a[0], dyb = c[1] - b[1], dxb = c[0] - b[0];
|
3308
|
-
var ma = dya / dxa, mb = dyb / dxb;
|
3309
|
-
var cx = .5 * (ma * mb * (a[1] - c[1]) + mb * (a[0] + b[0]) - ma * (b[0] + c[0])) / (mb - ma), cy = (.5 * (a[0] + b[0]) - cx) / ma + .5 * (a[1] + b[1]);
|
3310
|
-
var dx0 = d[0] - cx, dy0 = d[1] - cy, dx1 = a[0] - cx, dy1 = a[1] - cy, r0 = dx0 * dx0 + dy0 * dy0, r1 = dx1 * dx1 + dy1 * dy1;
|
3311
|
-
var a0 = Math.atan2(dy0, dx0), a1 = Math.atan2(dy1, dx1);
|
3312
|
-
return function(coordinates) {
|
3313
|
-
var dx = coordinates[0] - cx, dy = coordinates[1] - cy, r = dx * dx + dy * dy, a = Math.atan2(dy, dx);
|
3314
|
-
if (r0 < r && r < r1 && a0 < a && a < a1) return projection.invert(coordinates);
|
3315
|
-
};
|
3316
|
-
}
|
3317
3443
|
var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
|
3318
3444
|
point: d3_noop,
|
3319
3445
|
lineStart: d3_noop,
|
@@ -3341,8 +3467,22 @@ d3 = function() {
|
|
3341
3467
|
nextPoint(x00, y00);
|
3342
3468
|
};
|
3343
3469
|
}
|
3470
|
+
var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
|
3471
|
+
var d3_geo_pathBounds = {
|
3472
|
+
point: d3_geo_pathBoundsPoint,
|
3473
|
+
lineStart: d3_noop,
|
3474
|
+
lineEnd: d3_noop,
|
3475
|
+
polygonStart: d3_noop,
|
3476
|
+
polygonEnd: d3_noop
|
3477
|
+
};
|
3478
|
+
function d3_geo_pathBoundsPoint(x, y) {
|
3479
|
+
if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
|
3480
|
+
if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
|
3481
|
+
if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
|
3482
|
+
if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
|
3483
|
+
}
|
3344
3484
|
function d3_geo_pathBuffer() {
|
3345
|
-
var pointCircle =
|
3485
|
+
var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
|
3346
3486
|
var stream = {
|
3347
3487
|
point: point,
|
3348
3488
|
lineStart: function() {
|
@@ -3357,7 +3497,7 @@ d3 = function() {
|
|
3357
3497
|
stream.point = point;
|
3358
3498
|
},
|
3359
3499
|
pointRadius: function(_) {
|
3360
|
-
pointCircle =
|
3500
|
+
pointCircle = d3_geo_pathBufferCircle(_);
|
3361
3501
|
return stream;
|
3362
3502
|
},
|
3363
3503
|
result: function() {
|
@@ -3386,6 +3526,9 @@ d3 = function() {
|
|
3386
3526
|
}
|
3387
3527
|
return stream;
|
3388
3528
|
}
|
3529
|
+
function d3_geo_pathBufferCircle(radius) {
|
3530
|
+
return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
|
3531
|
+
}
|
3389
3532
|
var d3_geo_pathCentroid = {
|
3390
3533
|
point: d3_geo_pathCentroidPoint,
|
3391
3534
|
lineStart: d3_geo_pathCentroidLineStart,
|
@@ -3506,7 +3649,9 @@ d3 = function() {
|
|
3506
3649
|
return d3_geo_centroidZ ? [ d3_geo_centroidX / d3_geo_centroidZ, d3_geo_centroidY / d3_geo_centroidZ ] : undefined;
|
3507
3650
|
};
|
3508
3651
|
path.bounds = function(object) {
|
3509
|
-
|
3652
|
+
d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
|
3653
|
+
d3.geo.stream(object, projectStream(d3_geo_pathBounds));
|
3654
|
+
return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];
|
3510
3655
|
};
|
3511
3656
|
path.projection = function(_) {
|
3512
3657
|
if (!arguments.length) return projection;
|
@@ -3525,9 +3670,6 @@ d3 = function() {
|
|
3525
3670
|
};
|
3526
3671
|
return path.projection(d3.geo.albersUsa()).context(null);
|
3527
3672
|
};
|
3528
|
-
function d3_geo_pathCircle(radius) {
|
3529
|
-
return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z";
|
3530
|
-
}
|
3531
3673
|
function d3_geo_pathProjectStream(project) {
|
3532
3674
|
var resample = d3_geo_resample(function(λ, φ) {
|
3533
3675
|
return project([ λ * d3_degrees, φ * d3_degrees ]);
|
@@ -3556,9 +3698,6 @@ d3 = function() {
|
|
3556
3698
|
};
|
3557
3699
|
};
|
3558
3700
|
}
|
3559
|
-
d3.geo.albers = function() {
|
3560
|
-
return d3.geo.conicEqualArea().parallels([ 29.5, 45.5 ]).rotate([ 98, 0 ]).center([ 0, 38 ]).scale(1e3);
|
3561
|
-
};
|
3562
3701
|
function d3_geo_azimuthal(scale, angle) {
|
3563
3702
|
function azimuthal(λ, φ) {
|
3564
3703
|
var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
|
@@ -4633,8 +4772,10 @@ d3 = function() {
|
|
4633
4772
|
d3.transform = function(string) {
|
4634
4773
|
var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
|
4635
4774
|
return (d3.transform = function(string) {
|
4636
|
-
|
4637
|
-
|
4775
|
+
if (string != null) {
|
4776
|
+
g.setAttribute("transform", string);
|
4777
|
+
var t = g.transform.baseVal.consolidate();
|
4778
|
+
}
|
4638
4779
|
return new d3_transform(t ? t.matrix : d3_transformIdentity);
|
4639
4780
|
})(string);
|
4640
4781
|
};
|
@@ -4813,7 +4954,9 @@ d3 = function() {
|
|
4813
4954
|
n--;
|
4814
4955
|
}
|
4815
4956
|
if (s.length === 1) {
|
4816
|
-
return s[0] == null ? q[0].x
|
4957
|
+
return s[0] == null ? (o = q[0].x, function(t) {
|
4958
|
+
return o(t) + "";
|
4959
|
+
}) : function() {
|
4817
4960
|
return b;
|
4818
4961
|
};
|
4819
4962
|
}
|
@@ -4834,7 +4977,7 @@ d3 = function() {
|
|
4834
4977
|
}
|
4835
4978
|
d3.interpolators = [ function(a, b) {
|
4836
4979
|
var t = typeof b;
|
4837
|
-
return (t === "string"
|
4980
|
+
return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_Color ? d3_interpolateRgb : t === "object" ? Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject : d3_interpolateNumber)(a, b);
|
4838
4981
|
} ];
|
4839
4982
|
d3.interpolateArray = d3_interpolateArray;
|
4840
4983
|
function d3_interpolateArray(a, b) {
|
@@ -6476,9 +6619,9 @@ d3 = function() {
|
|
6476
6619
|
}) : ",." + precision + "f");
|
6477
6620
|
}
|
6478
6621
|
d3.scale.log = function() {
|
6479
|
-
return d3_scale_log(d3.scale.linear().domain([ 0, Math.LN10 ]), 10, d3_scale_logp, d3_scale_powp);
|
6622
|
+
return d3_scale_log(d3.scale.linear().domain([ 0, Math.LN10 ]), 10, d3_scale_logp, d3_scale_powp, [ 1, 10 ]);
|
6480
6623
|
};
|
6481
|
-
function d3_scale_log(linear, base, log, pow) {
|
6624
|
+
function d3_scale_log(linear, base, log, pow, domain) {
|
6482
6625
|
function scale(x) {
|
6483
6626
|
return linear(log(x));
|
6484
6627
|
}
|
@@ -6486,10 +6629,10 @@ d3 = function() {
|
|
6486
6629
|
return pow(linear.invert(x));
|
6487
6630
|
};
|
6488
6631
|
scale.domain = function(x) {
|
6489
|
-
if (!arguments.length) return
|
6632
|
+
if (!arguments.length) return domain;
|
6490
6633
|
if (x[0] < 0) log = d3_scale_logn, pow = d3_scale_pown; else log = d3_scale_logp,
|
6491
6634
|
pow = d3_scale_powp;
|
6492
|
-
linear.domain(x.map(log));
|
6635
|
+
linear.domain((domain = x.map(Number)).map(log));
|
6493
6636
|
return scale;
|
6494
6637
|
};
|
6495
6638
|
scale.base = function(_) {
|
@@ -6498,7 +6641,7 @@ d3 = function() {
|
|
6498
6641
|
return scale;
|
6499
6642
|
};
|
6500
6643
|
scale.nice = function() {
|
6501
|
-
linear.domain(d3_scale_nice(
|
6644
|
+
linear.domain(d3_scale_nice(domain, nice).map(log));
|
6502
6645
|
return scale;
|
6503
6646
|
};
|
6504
6647
|
scale.ticks = function() {
|
@@ -6528,8 +6671,27 @@ d3 = function() {
|
|
6528
6671
|
};
|
6529
6672
|
};
|
6530
6673
|
scale.copy = function() {
|
6531
|
-
return d3_scale_log(linear.copy(), base, log, pow);
|
6532
|
-
};
|
6674
|
+
return d3_scale_log(linear.copy(), base, log, pow, domain);
|
6675
|
+
};
|
6676
|
+
function nice() {
|
6677
|
+
return log === d3_scale_logp ? {
|
6678
|
+
floor: floor,
|
6679
|
+
ceil: ceil
|
6680
|
+
} : {
|
6681
|
+
floor: function(x) {
|
6682
|
+
return -ceil(-x);
|
6683
|
+
},
|
6684
|
+
ceil: function(x) {
|
6685
|
+
return -floor(-x);
|
6686
|
+
}
|
6687
|
+
};
|
6688
|
+
}
|
6689
|
+
function floor(x) {
|
6690
|
+
return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));
|
6691
|
+
}
|
6692
|
+
function ceil(x) {
|
6693
|
+
return Math.pow(base, Math.ceil(Math.log(x) / Math.log(base)));
|
6694
|
+
}
|
6533
6695
|
return d3_scale_linearRebind(scale, linear);
|
6534
6696
|
}
|
6535
6697
|
var d3_scale_logFormat = d3.format(".0e");
|
@@ -6545,24 +6707,10 @@ d3 = function() {
|
|
6545
6707
|
function d3_scale_pown(x) {
|
6546
6708
|
return -Math.exp(-x);
|
6547
6709
|
}
|
6548
|
-
function d3_scale_logNice(base) {
|
6549
|
-
base = Math.log(base);
|
6550
|
-
var nice = {
|
6551
|
-
floor: function(x) {
|
6552
|
-
return Math.floor(x / base) * base;
|
6553
|
-
},
|
6554
|
-
ceil: function(x) {
|
6555
|
-
return Math.ceil(x / base) * base;
|
6556
|
-
}
|
6557
|
-
};
|
6558
|
-
return function() {
|
6559
|
-
return nice;
|
6560
|
-
};
|
6561
|
-
}
|
6562
6710
|
d3.scale.pow = function() {
|
6563
|
-
return d3_scale_pow(d3.scale.linear(), 1);
|
6711
|
+
return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);
|
6564
6712
|
};
|
6565
|
-
function d3_scale_pow(linear, exponent) {
|
6713
|
+
function d3_scale_pow(linear, exponent, domain) {
|
6566
6714
|
var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
|
6567
6715
|
function scale(x) {
|
6568
6716
|
return linear(powp(x));
|
@@ -6571,28 +6719,28 @@ d3 = function() {
|
|
6571
6719
|
return powb(linear.invert(x));
|
6572
6720
|
};
|
6573
6721
|
scale.domain = function(x) {
|
6574
|
-
if (!arguments.length) return
|
6575
|
-
linear.domain(x.map(powp));
|
6722
|
+
if (!arguments.length) return domain;
|
6723
|
+
linear.domain((domain = x.map(Number)).map(powp));
|
6576
6724
|
return scale;
|
6577
6725
|
};
|
6578
6726
|
scale.ticks = function(m) {
|
6579
|
-
return d3_scale_linearTicks(
|
6727
|
+
return d3_scale_linearTicks(domain, m);
|
6580
6728
|
};
|
6581
6729
|
scale.tickFormat = function(m, format) {
|
6582
|
-
return d3_scale_linearTickFormat(
|
6730
|
+
return d3_scale_linearTickFormat(domain, m, format);
|
6583
6731
|
};
|
6584
6732
|
scale.nice = function() {
|
6585
|
-
return scale.domain(d3_scale_nice(
|
6733
|
+
return scale.domain(d3_scale_nice(domain, d3_scale_linearNice));
|
6586
6734
|
};
|
6587
6735
|
scale.exponent = function(x) {
|
6588
6736
|
if (!arguments.length) return exponent;
|
6589
|
-
var domain = scale.domain();
|
6590
6737
|
powp = d3_scale_powPow(exponent = x);
|
6591
6738
|
powb = d3_scale_powPow(1 / exponent);
|
6592
|
-
|
6739
|
+
linear.domain(domain.map(powp));
|
6740
|
+
return scale;
|
6593
6741
|
};
|
6594
6742
|
scale.copy = function() {
|
6595
|
-
return d3_scale_pow(linear.copy(), exponent);
|
6743
|
+
return d3_scale_pow(linear.copy(), exponent, domain);
|
6596
6744
|
};
|
6597
6745
|
return d3_scale_linearRebind(scale, linear);
|
6598
6746
|
}
|