d3js-plugins-rails 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/d3js-plugins-rails/version.rb +2 -2
- data/vendor/assets/javascripts/d3/plugins/Makefile +1 -0
- data/vendor/assets/javascripts/d3/plugins/geo/projection/README.md +63 -63
- data/vendor/assets/javascripts/d3/plugins/geo/projection/gringorten.js +87 -49
- data/vendor/assets/javascripts/d3/plugins/geo/projection/guyou.js +5 -11
- data/vendor/assets/javascripts/d3/plugins/geo/projection/healpix.js +23 -6
- data/vendor/assets/javascripts/d3/plugins/geo/projection/peirce-quincuncial.js +3 -47
- data/vendor/assets/javascripts/d3/plugins/geo/projection/quincuncial.js +71 -0
- data/vendor/assets/javascripts/d3/plugins/geo/projection/test/gringorten-test.js +24 -0
- data/vendor/assets/javascripts/d3/plugins/geo/projection/test/healpix-test.js +24 -0
- data/vendor/assets/javascripts/d3/plugins/geo/projection/test/van-der-grinten4-test.js +3 -1
- data/vendor/assets/javascripts/d3/plugins/geo/projection/van-der-grinten4.js +1 -1
- data/vendor/assets/javascripts/d3/plugins/jsonp/jsonp.js +1 -1
- metadata +5 -2
|
@@ -2,76 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
Projections:
|
|
4
4
|
|
|
5
|
-
* d3.geo.aitoff - [Aitoff](http://bl.ocks.org/3682698)
|
|
6
|
-
* d3.geo.albers - [Albers equal-area conic](http://bl.ocks.org/3734308)
|
|
7
|
-
* d3.geo.armadillo - [Armadillo](http://bl.ocks.org/4463127)
|
|
8
|
-
* d3.geo.august - [August conformal](http://bl.ocks.org/3797581)
|
|
9
|
-
* d3.geo.azimuthalEqualArea - [Lambert azimuthal equal-area](http://bl.ocks.org/3757101)
|
|
10
|
-
* d3.geo.azimuthalEquidistant - [azimuthal equidistant](http://bl.ocks.org/3757110)
|
|
11
|
-
* d3.geo.baker - [Baker Dinomic](http://bl.ocks.org/4476279)
|
|
12
|
-
* d3.geo.berghaus - [Berghaus Star](http://bl.ocks.org/4463049)
|
|
13
|
-
* d3.geo.boggs - [Boggs eumorphic](http://bl.ocks.org/4481220)
|
|
14
|
-
* d3.geo.bonne - [Bonne](http://bl.ocks.org/3734313)
|
|
15
|
-
* d3.geo.bromley - [Bromley](http://bl.ocks.org/4487695)
|
|
16
|
-
* d3.geo.collignon - [Collignon](http://bl.ocks.org/3734316)
|
|
17
|
-
* d3.geo.conicConformal - [Lambert conformal conic](http://bl.ocks.org/3734321)
|
|
18
|
-
* d3.geo.conicEquidistant - [conic equidistant](http://bl.ocks.org/3734317)
|
|
19
|
-
* d3.geo.craig - [Craig retroazimuthal](http://bl.ocks.org/4459466)
|
|
20
|
-
* d3.geo.craster - [Craster parabolic](http://bl.ocks.org/4465118)
|
|
21
|
-
* d3.geo.cylindricalEqualArea - [cylindrical equal-area](http://bl.ocks.org/3712408), [Gall–Peters](http://bl.ocks.org/3946824), [Hobo–Dyer](http://bl.ocks.org/4476487), [Tobler world-in-a-square](http://bl.ocks.org/4476496)
|
|
22
|
-
* d3.geo.eckert1 - [Eckert I](http://bl.ocks.org/3734322)
|
|
23
|
-
* d3.geo.eckert2 - [Eckert II](http://bl.ocks.org/3734324)
|
|
24
|
-
* d3.geo.eckert3 - [Eckert III](http://bl.ocks.org/3734325)
|
|
25
|
-
* d3.geo.eckert4 - [Eckert IV](http://bl.ocks.org/3734327)
|
|
26
|
-
* d3.geo.eckert5 - [Eckert V](http://bl.ocks.org/3734328)
|
|
27
|
-
* d3.geo.eckert6 - [Eckert VI](http://bl.ocks.org/3734329)
|
|
28
|
-
* d3.geo.eisenlohr - [Eisenlohr conformal](http://bl.ocks.org/3797585)
|
|
29
|
-
* d3.geo.equirectangular - [Equirectangular (Plate Carrée)](http://bl.ocks.org/3757119)
|
|
30
|
-
* d3.geo.fahey - [Fahey](http://bl.ocks.org/4731228)
|
|
31
|
-
* d3.geo.gnomonic - [gnomonic](http://bl.ocks.org/3757349)
|
|
32
|
-
* d3.geo.gringorten - [Gringorten](http://bl.ocks.org/
|
|
33
|
-
* d3.geo.guyou - [Guyou hemisphere-in-a-square](http://bl.ocks.org/3763867)
|
|
34
|
-
* d3.geo.hammer - [Hammer](http://bl.ocks.org/3712397), [Eckert–Greifendorff](http://bl.ocks.org/4496212), [quartic authalic](http://bl.ocks.org/4463175), [Briesemeister](http://bl.ocks.org/4519926)
|
|
35
|
-
* d3.geo.hammerRetroazimuthal - [Hammer retroazimuthal](http://bl.ocks.org/4459130)
|
|
36
|
-
* d3.geo.healpix - [HEALPix](http://bl.ocks.org/4463237)
|
|
37
|
-
* d3.geo.hill - [Hill eucyclic](http://bl.ocks.org/4479513), [Maurer No. 73](http://bl.ocks.org/4479547)
|
|
38
|
-
* d3.geo.homolosine - [Goode homolosine](http://bl.ocks.org/3734330)
|
|
39
|
-
* d3.geo.kavrayskiy7 - [Kavrayskiy VII](http://bl.ocks.org/3710082)
|
|
40
|
-
* d3.geo.lagrange - [Lagrange conformal](http://bl.ocks.org/3797591)
|
|
41
|
-
* d3.geo.larrivee - [Larrivée](http://bl.ocks.org/3719042)
|
|
42
|
-
* d3.geo.laskowski - [Laskowski tri-optimal](http://bl.ocks.org/4489342)
|
|
43
|
-
* d3.geo.littrow - [Littrow](http://bl.ocks.org/4459071)
|
|
44
|
-
* d3.geo.loximuthal - [loximuthal](http://bl.ocks.org/3867220)
|
|
45
|
-
* d3.geo.mercator - [Mercator](http://bl.ocks.org/3757132)
|
|
46
|
-
* d3.geo.miller - [Miller](http://bl.ocks.org/3734333)
|
|
5
|
+
* d3.geo.aitoff - [Aitoff](http://bl.ocks.org/mbostock/3682698)
|
|
6
|
+
* d3.geo.albers - [Albers equal-area conic](http://bl.ocks.org/mbostock/3734308)
|
|
7
|
+
* d3.geo.armadillo - [Armadillo](http://bl.ocks.org/mbostock/4463127)
|
|
8
|
+
* d3.geo.august - [August conformal](http://bl.ocks.org/mbostock/3797581)
|
|
9
|
+
* d3.geo.azimuthalEqualArea - [Lambert azimuthal equal-area](http://bl.ocks.org/mbostock/3757101)
|
|
10
|
+
* d3.geo.azimuthalEquidistant - [azimuthal equidistant](http://bl.ocks.org/mbostock/3757110)
|
|
11
|
+
* d3.geo.baker - [Baker Dinomic](http://bl.ocks.org/mbostock/4476279)
|
|
12
|
+
* d3.geo.berghaus - [Berghaus Star](http://bl.ocks.org/mbostock/4463049)
|
|
13
|
+
* d3.geo.boggs - [Boggs eumorphic](http://bl.ocks.org/mbostock/4481220)
|
|
14
|
+
* d3.geo.bonne - [Bonne](http://bl.ocks.org/mbostock/3734313)
|
|
15
|
+
* d3.geo.bromley - [Bromley](http://bl.ocks.org/mbostock/4487695)
|
|
16
|
+
* d3.geo.collignon - [Collignon](http://bl.ocks.org/mbostock/3734316)
|
|
17
|
+
* d3.geo.conicConformal - [Lambert conformal conic](http://bl.ocks.org/mbostock/3734321)
|
|
18
|
+
* d3.geo.conicEquidistant - [conic equidistant](http://bl.ocks.org/mbostock/3734317)
|
|
19
|
+
* d3.geo.craig - [Craig retroazimuthal](http://bl.ocks.org/mbostock/4459466)
|
|
20
|
+
* d3.geo.craster - [Craster parabolic](http://bl.ocks.org/mbostock/4465118)
|
|
21
|
+
* d3.geo.cylindricalEqualArea - [cylindrical equal-area](http://bl.ocks.org/mbostock/3712408), [Gall–Peters](http://bl.ocks.org/mbostock/3946824), [Hobo–Dyer](http://bl.ocks.org/mbostock/4476487), [Tobler world-in-a-square](http://bl.ocks.org/mbostock/4476496)
|
|
22
|
+
* d3.geo.eckert1 - [Eckert I](http://bl.ocks.org/mbostock/3734322)
|
|
23
|
+
* d3.geo.eckert2 - [Eckert II](http://bl.ocks.org/mbostock/3734324)
|
|
24
|
+
* d3.geo.eckert3 - [Eckert III](http://bl.ocks.org/mbostock/3734325)
|
|
25
|
+
* d3.geo.eckert4 - [Eckert IV](http://bl.ocks.org/mbostock/3734327)
|
|
26
|
+
* d3.geo.eckert5 - [Eckert V](http://bl.ocks.org/mbostock/3734328)
|
|
27
|
+
* d3.geo.eckert6 - [Eckert VI](http://bl.ocks.org/mbostock/3734329)
|
|
28
|
+
* d3.geo.eisenlohr - [Eisenlohr conformal](http://bl.ocks.org/mbostock/3797585)
|
|
29
|
+
* d3.geo.equirectangular - [Equirectangular (Plate Carrée)](http://bl.ocks.org/mbostock/3757119)
|
|
30
|
+
* d3.geo.fahey - [Fahey](http://bl.ocks.org/mbostock/4731228)
|
|
31
|
+
* d3.geo.gnomonic - [gnomonic](http://bl.ocks.org/mbostock/3757349)
|
|
32
|
+
* d3.geo.gringorten - [Gringorten](http://bl.ocks.org/mbostock/4362031)
|
|
33
|
+
* d3.geo.guyou - [Guyou hemisphere-in-a-square](http://bl.ocks.org/mbostock/3763867)
|
|
34
|
+
* d3.geo.hammer - [Hammer](http://bl.ocks.org/mbostock/3712397), [Eckert–Greifendorff](http://bl.ocks.org/mbostock/4496212), [quartic authalic](http://bl.ocks.org/mbostock/4463175), [Briesemeister](http://bl.ocks.org/mbostock/4519926)
|
|
35
|
+
* d3.geo.hammerRetroazimuthal - [Hammer retroazimuthal](http://bl.ocks.org/mbostock/4459130)
|
|
36
|
+
* d3.geo.healpix - [HEALPix](http://bl.ocks.org/mbostock/4463237)
|
|
37
|
+
* d3.geo.hill - [Hill eucyclic](http://bl.ocks.org/mbostock/4479513), [Maurer No. 73](http://bl.ocks.org/mbostock/4479547)
|
|
38
|
+
* d3.geo.homolosine - [Goode homolosine](http://bl.ocks.org/mbostock/3734330)
|
|
39
|
+
* d3.geo.kavrayskiy7 - [Kavrayskiy VII](http://bl.ocks.org/mbostock/3710082)
|
|
40
|
+
* d3.geo.lagrange - [Lagrange conformal](http://bl.ocks.org/mbostock/3797591)
|
|
41
|
+
* d3.geo.larrivee - [Larrivée](http://bl.ocks.org/mbostock/3719042)
|
|
42
|
+
* d3.geo.laskowski - [Laskowski tri-optimal](http://bl.ocks.org/mbostock/4489342)
|
|
43
|
+
* d3.geo.littrow - [Littrow](http://bl.ocks.org/mbostock/4459071)
|
|
44
|
+
* d3.geo.loximuthal - [loximuthal](http://bl.ocks.org/mbostock/3867220)
|
|
45
|
+
* d3.geo.mercator - [Mercator](http://bl.ocks.org/mbostock/3757132)
|
|
46
|
+
* d3.geo.miller - [Miller](http://bl.ocks.org/mbostock/3734333)
|
|
47
47
|
* d3.geo.modifiedStereographic - Modified Stereographic
|
|
48
|
-
* d3.geo.mollweide - [Mollweide](http://bl.ocks.org/3734336), [Atlantis](http://bl.ocks.org/4519975)
|
|
49
|
-
* d3.geo.mtFlatPolarParabolic - [McBryde–Thomas flat-polar parabolic](http://bl.ocks.org/4465130)
|
|
50
|
-
* d3.geo.mtFlatPolarQuartic - [McBryde–Thomas flat-polar quartic](http://bl.ocks.org/4465137)
|
|
51
|
-
* d3.geo.mtFlatPolarSinusoidal - [McBryde–Thomas flat-polar sinusoidal](http://bl.ocks.org/4465140)
|
|
52
|
-
* d3.geo.naturalEarth - [Natural Earth](http://bl.ocks.org/4479477)
|
|
53
|
-
* d3.geo.nellHammer - [Nell–Hammer](http://bl.ocks.org/3734342)
|
|
54
|
-
* d3.geo.orthographic - [orthographic](http://bl.ocks.org/3757125)
|
|
55
|
-
* d3.geo.peirceQuincuncial - [Pierce quincuncial](http://bl.ocks.org/4310087)
|
|
56
|
-
* d3.geo.polyconic - [Polyconic](http://bl.ocks.org/3734343)
|
|
48
|
+
* d3.geo.mollweide - [Mollweide](http://bl.ocks.org/mbostock/3734336), [Atlantis](http://bl.ocks.org/mbostock/4519975)
|
|
49
|
+
* d3.geo.mtFlatPolarParabolic - [McBryde–Thomas flat-polar parabolic](http://bl.ocks.org/mbostock/4465130)
|
|
50
|
+
* d3.geo.mtFlatPolarQuartic - [McBryde–Thomas flat-polar quartic](http://bl.ocks.org/mbostock/4465137)
|
|
51
|
+
* d3.geo.mtFlatPolarSinusoidal - [McBryde–Thomas flat-polar sinusoidal](http://bl.ocks.org/mbostock/4465140)
|
|
52
|
+
* d3.geo.naturalEarth - [Natural Earth](http://bl.ocks.org/mbostock/4479477)
|
|
53
|
+
* d3.geo.nellHammer - [Nell–Hammer](http://bl.ocks.org/mbostock/3734342)
|
|
54
|
+
* d3.geo.orthographic - [orthographic](http://bl.ocks.org/mbostock/3757125)
|
|
55
|
+
* d3.geo.peirceQuincuncial - [Pierce quincuncial](http://bl.ocks.org/mbostock/4310087)
|
|
56
|
+
* d3.geo.polyconic - [Polyconic](http://bl.ocks.org/mbostock/3734343)
|
|
57
57
|
* d3.geo.rectangularPolyconic - Rectangular Polyconic
|
|
58
|
-
* d3.geo.robinson - [Robinson](http://bl.ocks.org/3710566)
|
|
59
|
-
* d3.geo.satellite - [satellite (tilted perpsective)](http://bl.ocks.org/3790444)
|
|
60
|
-
* d3.geo.sinusoidal - [sinusoidal](http://bl.ocks.org/3712399)
|
|
61
|
-
* d3.geo.sinuMollweide - [Sinu-Mollweide](http://bl.ocks.org/4319903)
|
|
62
|
-
* d3.geo.stereographic - [stereographic](http://bl.ocks.org/3757137)
|
|
58
|
+
* d3.geo.robinson - [Robinson](http://bl.ocks.org/mbostock/3710566)
|
|
59
|
+
* d3.geo.satellite - [satellite (tilted perpsective)](http://bl.ocks.org/mbostock/3790444)
|
|
60
|
+
* d3.geo.sinusoidal - [sinusoidal](http://bl.ocks.org/mbostock/3712399)
|
|
61
|
+
* d3.geo.sinuMollweide - [Sinu-Mollweide](http://bl.ocks.org/mbostock/4319903)
|
|
62
|
+
* d3.geo.stereographic - [stereographic](http://bl.ocks.org/mbostock/3757137)
|
|
63
63
|
* d3.geo.times - Times
|
|
64
64
|
* d3.geo.twoPointAzimuthal - Two-Point Azimuthal
|
|
65
65
|
* d3.geo.twoPointEquidistant - Two-Point Equidistant
|
|
66
|
-
* d3.geo.vanDerGrinten - [Van der Grinten](http://bl.ocks.org/3796831)
|
|
66
|
+
* d3.geo.vanDerGrinten - [Van der Grinten](http://bl.ocks.org/mbostock/3796831)
|
|
67
67
|
* d3.geo.vanDerGrinten2 - Van der Grinten II
|
|
68
68
|
* d3.geo.vanDerGrinten3 - Van der Grinten III
|
|
69
|
-
* d3.geo.vanDerGrinten4 - [Van der Grinten IV](http://bl.ocks.org/4489365)
|
|
70
|
-
* d3.geo.wagner4 - [Wagner IV, Putniṇš P2´](http://bl.ocks.org/4487674)
|
|
71
|
-
* d3.geo.wagner6 - [Wagner VI](http://bl.ocks.org/3710148)
|
|
72
|
-
* d3.geo.wagner7 - [Wagner VII](http://bl.ocks.org/4465109)
|
|
73
|
-
* d3.geo.wiechel - [Wiechel](http://bl.ocks.org/4463155)
|
|
74
|
-
* d3.geo.winkel3 - [Winkel Tripel](http://bl.ocks.org/3682676)
|
|
69
|
+
* d3.geo.vanDerGrinten4 - [Van der Grinten IV](http://bl.ocks.org/mbostock/4489365)
|
|
70
|
+
* d3.geo.wagner4 - [Wagner IV, Putniṇš P2´](http://bl.ocks.org/mbostock/4487674)
|
|
71
|
+
* d3.geo.wagner6 - [Wagner VI](http://bl.ocks.org/mbostock/3710148)
|
|
72
|
+
* d3.geo.wagner7 - [Wagner VII](http://bl.ocks.org/mbostock/4465109)
|
|
73
|
+
* d3.geo.wiechel - [Wiechel](http://bl.ocks.org/mbostock/4463155)
|
|
74
|
+
* d3.geo.winkel3 - [Winkel Tripel](http://bl.ocks.org/mbostock/3682676)
|
|
75
75
|
|
|
76
76
|
This plugin also provides d3.geo.interrupt, which can be used to create arbitrary interrupted projections from a given raw projection. For example, see [Philbrick’s interrupted Sinu-Mollweide](http://bl.ocks.org/4481520).
|
|
77
77
|
|
|
@@ -1,47 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
var quincuncial = false,
|
|
3
|
-
m = projectionMutator(gringorten),
|
|
4
|
-
p = m(quincuncial);
|
|
1
|
+
// @import quincuncial
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
function gringorten(λ, φ) {
|
|
4
|
+
var sλ = sgn(λ),
|
|
5
|
+
sφ = sgn(φ),
|
|
6
|
+
cosφ = Math.cos(φ),
|
|
7
|
+
x = Math.cos(λ) * cosφ,
|
|
8
|
+
y = Math.sin(λ) * cosφ,
|
|
9
|
+
z = Math.sin(sφ * φ);
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
λ = Math.abs(Math.atan2(y, z));
|
|
12
|
+
φ = asin(x);
|
|
13
|
+
|
|
14
|
+
if (Math.abs(λ - π / 2) > ε) λ %= π / 2;
|
|
15
|
+
var point = gringortenHexadecant(λ > π / 4 ? π / 2 - λ : λ, φ);
|
|
16
|
+
|
|
17
|
+
if (λ > π / 4) z = point[0], point[0] = -point[1], point[1] = -z;
|
|
18
|
+
|
|
19
|
+
return (point[0] *= sλ, point[1] *= -sφ, point);
|
|
12
20
|
}
|
|
13
21
|
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
λ =
|
|
22
|
-
φ =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
x = point[0],
|
|
33
|
-
y = point[1],
|
|
34
|
-
t;
|
|
35
|
-
if (quincuncial && nφ) y = -2 - y;
|
|
36
|
-
if (df > 3) x = -x, y = -y;
|
|
37
|
-
switch (df % 4) {
|
|
38
|
-
case 1: x = -x; // fall through
|
|
39
|
-
case 2: t = x; x = -y; y = t; break;
|
|
40
|
-
case 3: y = -y; break;
|
|
41
|
-
}
|
|
42
|
-
if (!quincuncial && nφ) x = 2 - x;
|
|
43
|
-
return quincuncial ? [(x - y) / Math.SQRT2, (x + y) / Math.SQRT2] : [x, y];
|
|
44
|
-
};
|
|
22
|
+
gringorten.invert = function(x, y) {
|
|
23
|
+
var sx = sgn(x),
|
|
24
|
+
sy = sgn(y),
|
|
25
|
+
x0 = -sx * x,
|
|
26
|
+
y0 = -sy * y,
|
|
27
|
+
t = y0 / x0 < 1,
|
|
28
|
+
p = gringortenHexadecantInvert(t ? y0 : x0, t ? x0 : y0),
|
|
29
|
+
λ = p[0],
|
|
30
|
+
φ = p[1];
|
|
31
|
+
|
|
32
|
+
if (t) λ = -π / 2 - λ;
|
|
33
|
+
|
|
34
|
+
var cosφ = Math.cos(φ),
|
|
35
|
+
x = Math.cos(λ) * cosφ,
|
|
36
|
+
y = Math.sin(λ) * cosφ,
|
|
37
|
+
z = Math.sin(φ);
|
|
38
|
+
|
|
39
|
+
return [sx * (Math.atan2(y, -z) + π), sy * asin(x)];
|
|
45
40
|
}
|
|
46
41
|
|
|
47
42
|
function gringortenHexadecant(λ, φ) {
|
|
@@ -82,7 +77,7 @@ function gringortenHexadecant(λ, φ) {
|
|
|
82
77
|
|
|
83
78
|
var x1 = x,
|
|
84
79
|
x0 = .5 * x,
|
|
85
|
-
i =
|
|
80
|
+
i = 50;
|
|
86
81
|
x = .5 * (x0 + x1);
|
|
87
82
|
do {
|
|
88
83
|
var g = Math.sqrt(a2 - x * x),
|
|
@@ -91,21 +86,64 @@ function gringortenHexadecant(λ, φ) {
|
|
|
91
86
|
if (f < 0) x0 = x;
|
|
92
87
|
else x1 = x;
|
|
93
88
|
x = .5 * (x0 + x1);
|
|
94
|
-
} while (
|
|
89
|
+
} while (Math.abs(x1 - x0) > ε && --i > 0);
|
|
95
90
|
} else {
|
|
96
91
|
// Newton-Raphson.
|
|
97
|
-
|
|
92
|
+
var x = ε, i = 25, δ;
|
|
93
|
+
do {
|
|
98
94
|
var x2 = x * x,
|
|
99
95
|
g = asqrt(a2 - x2),
|
|
100
96
|
ζμg = ζ + μ * g,
|
|
101
97
|
f = x * ζμg + ν * asin(x / a) - Λ,
|
|
102
|
-
df = ζμg + (ν - μ * x2) / g
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (Math.abs(dx) < ε) break;
|
|
106
|
-
}
|
|
98
|
+
df = ζμg + (ν - μ * x2) / g;
|
|
99
|
+
x -= δ = g ? f / df : 0;
|
|
100
|
+
} while (Math.abs(δ) > ε && --i > 0);
|
|
107
101
|
}
|
|
108
102
|
return [x, -h - r * asqrt(a2 - x * x)];
|
|
109
103
|
}
|
|
110
104
|
|
|
111
|
-
(
|
|
105
|
+
function gringortenHexadecantInvert(x, y) {
|
|
106
|
+
var x0 = 0,
|
|
107
|
+
x1 = 1,
|
|
108
|
+
r = .5,
|
|
109
|
+
i = 50;
|
|
110
|
+
|
|
111
|
+
while (true) {
|
|
112
|
+
var r2 = r * r,
|
|
113
|
+
sinφ = Math.sqrt(r),
|
|
114
|
+
z = Math.asin(1 / Math.sqrt(1 + r2)),
|
|
115
|
+
v = (1 - r2) + r * (1 + r2) * z,
|
|
116
|
+
p2 = (1 - sinφ) / v,
|
|
117
|
+
p = Math.sqrt(p2),
|
|
118
|
+
a2 = p2 * (1 + r2),
|
|
119
|
+
h = p * (1 - r2),
|
|
120
|
+
g2 = a2 - x * x,
|
|
121
|
+
g = Math.sqrt(g2),
|
|
122
|
+
y0 = y + h + r * g;
|
|
123
|
+
|
|
124
|
+
if (Math.abs(x1 - x0) < ε2 || --i === 0 || y0 === 0) break;
|
|
125
|
+
|
|
126
|
+
if (y0 > 0) x0 = r;
|
|
127
|
+
else x1 = r;
|
|
128
|
+
|
|
129
|
+
r = .5 * (x0 + x1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (!i) return null;
|
|
133
|
+
|
|
134
|
+
var φ = Math.asin(sinφ),
|
|
135
|
+
cosφ = Math.cos(φ),
|
|
136
|
+
secφ = 1 / cosφ,
|
|
137
|
+
drdφ = 2 * sinφ * cosφ,
|
|
138
|
+
dvdφ = (-3 * r + z * (1 + 3 * r2)) * drdφ,
|
|
139
|
+
dp2dφ = (-v * cosφ - (1 - sinφ) * dvdφ) / (v * v),
|
|
140
|
+
dpdφ = .5 * dp2dφ / p,
|
|
141
|
+
dhdφ = (1 - r2) * dpdφ - 2 * r * p * drdφ,
|
|
142
|
+
ζ = -2 * secφ * dhdφ,
|
|
143
|
+
μ = -secφ * drdφ,
|
|
144
|
+
ν = -secφ * (r * (1 + r2) * dp2dφ + p2 * (1 + 3 * r2) * drdφ);
|
|
145
|
+
|
|
146
|
+
return [π / 4 * (x * (ζ + μ * g) + ν * Math.asin(x / Math.sqrt(a2))), φ];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
d3.geo.gringorten = quincuncialProjection(gringorten);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @import elliptic
|
|
2
|
+
// @import quincuncial
|
|
2
3
|
|
|
3
4
|
// √k' tn(½K - w) = exp(-ζ).
|
|
4
5
|
function guyou(λ, φ) {
|
|
@@ -8,15 +9,12 @@ function guyou(λ, φ) {
|
|
|
8
9
|
K = ellipticF(π / 2, k * k),
|
|
9
10
|
f = -1;
|
|
10
11
|
|
|
11
|
-
var s = λ > 0 ? -1 : 1;
|
|
12
|
-
λ += s * π / 2;
|
|
13
|
-
|
|
14
12
|
var ψ = Math.log(Math.tan(π / 4 + Math.abs(φ) / 2)),
|
|
15
13
|
r = Math.exp(f * ψ) / Math.sqrt(k_),
|
|
16
14
|
at = guyouComplexAtan(r * Math.cos(f * λ), r * Math.sin(f * λ)),
|
|
17
15
|
t = ellipticFi(at[0], at[1], k * k);
|
|
18
16
|
|
|
19
|
-
return [-
|
|
17
|
+
return [-t[1], sgn(φ) * (.5 * K - t[0])];
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
function guyouComplexAtan(x, y) {
|
|
@@ -43,13 +41,9 @@ guyou.invert = function(x, y) {
|
|
|
43
41
|
K = ellipticF(π / 2, k * k),
|
|
44
42
|
f = -1;
|
|
45
43
|
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
var j = ellipticJi(.5 * K - y, -s * .5 * K - x, k * k),
|
|
44
|
+
var j = ellipticJi(.5 * K - y, -x, k * k),
|
|
49
45
|
tn = guyouComplexDivide(j[0], j[1]),
|
|
50
|
-
λ = Math.atan2(tn[1], tn[0]) / f
|
|
51
|
-
if (λ < -π) λ += 2 * π;
|
|
52
|
-
else if (λ > π) λ -= 2 * π;
|
|
46
|
+
λ = Math.atan2(tn[1], tn[0]) / f;
|
|
53
47
|
|
|
54
48
|
return [
|
|
55
49
|
λ,
|
|
@@ -57,4 +51,4 @@ guyou.invert = function(x, y) {
|
|
|
57
51
|
];
|
|
58
52
|
};
|
|
59
53
|
|
|
60
|
-
|
|
54
|
+
d3.geo.guyou = quincuncialProjection(guyou);
|
|
@@ -3,19 +3,20 @@ var healpixParallel = 41 + 48 / 36 + 37 / 3600; // TODO automate
|
|
|
3
3
|
function healpix(h) {
|
|
4
4
|
var lambert = d3.geo.cylindricalEqualArea.raw(0),
|
|
5
5
|
φ0 = healpixParallel * π / 180,
|
|
6
|
-
dx0 =
|
|
6
|
+
dx0 = 2 * π,
|
|
7
7
|
dx1 = d3.geo.collignon.raw(π, φ0)[0] - d3.geo.collignon.raw(-π, φ0)[0],
|
|
8
8
|
y0 = lambert(0, φ0)[1],
|
|
9
9
|
y1 = d3.geo.collignon.raw(0, φ0)[1],
|
|
10
10
|
dy1 = d3.geo.collignon.raw(0, π / 2)[1] - y1,
|
|
11
11
|
k = 2 * π / h;
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
var point
|
|
15
|
-
|
|
13
|
+
function forward(λ, φ) {
|
|
14
|
+
var point,
|
|
15
|
+
φ2 = Math.abs(φ);
|
|
16
|
+
if (φ2 > φ0) {
|
|
16
17
|
var i = Math.min(h - 1, Math.max(0, Math.floor((λ + π) / k)));
|
|
17
|
-
λ
|
|
18
|
-
point = d3.geo.collignon.raw(λ,
|
|
18
|
+
λ += π * (h - 1) / h - i * k;
|
|
19
|
+
point = d3.geo.collignon.raw(λ, φ2);
|
|
19
20
|
point[0] = point[0] * dx0 / dx1 - dx0 * (h - 1) / (2 * h) + i * dx0 / h;
|
|
20
21
|
point[1] = y0 + (point[1] - y1) * 4 * dy1 / dx0;
|
|
21
22
|
if (φ < 0) point[1] = -point[1];
|
|
@@ -24,7 +25,23 @@ function healpix(h) {
|
|
|
24
25
|
}
|
|
25
26
|
point[0] /= 2;
|
|
26
27
|
return point;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
forward.invert = function(x, y) {
|
|
31
|
+
x *= 2;
|
|
32
|
+
var y2 = Math.abs(y);
|
|
33
|
+
if (y2 > y0) {
|
|
34
|
+
var i = Math.min(h - 1, Math.max(0, Math.floor((x + π) / k)));
|
|
35
|
+
x = (x + π * (h - 1) / h - i * k) * dx1 / dx0;
|
|
36
|
+
var point = d3.geo.collignon.raw.invert(x, .25 * (y2 - y0) * dx0 / dy1 + y1);
|
|
37
|
+
point[0] -= π * (h - 1) / h - i * k;
|
|
38
|
+
if (y < 0) point[1] = -point[1];
|
|
39
|
+
return point;
|
|
40
|
+
}
|
|
41
|
+
return lambert.invert(x, y);
|
|
27
42
|
};
|
|
43
|
+
|
|
44
|
+
return forward;
|
|
28
45
|
}
|
|
29
46
|
|
|
30
47
|
function healpixProjection() {
|
|
@@ -1,50 +1,6 @@
|
|
|
1
1
|
// @import guyou
|
|
2
|
+
// @import quincuncial
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
var k_ = (Math.SQRT2 - 1) / (Math.SQRT2 + 1),
|
|
5
|
-
k = Math.sqrt(1 - k_ * k_),
|
|
6
|
-
K = ellipticF(π / 2, k * k);
|
|
4
|
+
var peirceQuincuncialProjection = quincuncialProjection(guyou);
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
p = guyou(λ + (λ < -π / 2 ? 1.5 : -.5) * π, φ);
|
|
10
|
-
|
|
11
|
-
p[0] += (t ? .5 : -.5) * K;
|
|
12
|
-
|
|
13
|
-
var x = (p[0] - p[1]) * Math.SQRT1_2,
|
|
14
|
-
y = (p[0] + p[1]) * Math.SQRT1_2;
|
|
15
|
-
|
|
16
|
-
if (t) return [x, y];
|
|
17
|
-
|
|
18
|
-
var d = K * Math.SQRT1_2,
|
|
19
|
-
s = x > 0 ^ y > 0 ? -1 : 1;
|
|
20
|
-
|
|
21
|
-
return [s * x - sgn(y) * d, s * y - sgn(x) * d];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
peirceQuincuncial.invert = function(x0, y0) {
|
|
25
|
-
var k_ = (Math.SQRT2 - 1) / (Math.SQRT2 + 1),
|
|
26
|
-
k = Math.sqrt(1 - k_ * k_),
|
|
27
|
-
K = ellipticF(π / 2, k * k);
|
|
28
|
-
|
|
29
|
-
var x = (x0 + y0) * Math.SQRT1_2,
|
|
30
|
-
y = (y0 - x0) * Math.SQRT1_2;
|
|
31
|
-
|
|
32
|
-
var t = Math.abs(x) < .5 * K && Math.abs(y) < .5 * K;
|
|
33
|
-
|
|
34
|
-
if (!t) {
|
|
35
|
-
var d = K * Math.SQRT1_2,
|
|
36
|
-
s = x > 0 ^ y > 0 ? -1 : 1,
|
|
37
|
-
x1 = -s * (x0 + (y > 0 ? 1 : -1) * d),
|
|
38
|
-
y1 = -s * (y0 + (x > 0 ? 1 : -1) * d);
|
|
39
|
-
x = (-x1 - y1) * Math.SQRT1_2;
|
|
40
|
-
y = (x1 - y1) * Math.SQRT1_2;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
x -= (t ? .5 : -.5) * K;
|
|
44
|
-
|
|
45
|
-
var p = guyou.invert(x, y);
|
|
46
|
-
p[0] += .5 * π;
|
|
47
|
-
return p;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
(d3.geo.peirceQuincuncial = function() { return projection(peirceQuincuncial).rotate([-90, -90, 45]).clipAngle(180 - 1e-6); }).raw = peirceQuincuncial;
|
|
6
|
+
(d3.geo.peirceQuincuncial = function() { return peirceQuincuncialProjection().quincuncial(true).rotate([-90, -90, 45]).clipAngle(180 - 1e-6); }).raw = peirceQuincuncialProjection.raw;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
function quincuncialProjection(projectHemisphere) {
|
|
2
|
+
var dx = projectHemisphere(π / 2, 0)[0] - projectHemisphere(-π / 2, 0)[0];
|
|
3
|
+
|
|
4
|
+
function projection() {
|
|
5
|
+
var quincuncial = false,
|
|
6
|
+
m = projectionMutator(projectAt),
|
|
7
|
+
p = m(quincuncial);
|
|
8
|
+
|
|
9
|
+
p.quincuncial = function(_) {
|
|
10
|
+
if (!arguments.length) return quincuncial;
|
|
11
|
+
return m(quincuncial = !!_);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return p;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function projectAt(quincuncial) {
|
|
18
|
+
var forward = quincuncial ? function(λ, φ) {
|
|
19
|
+
var t = Math.abs(λ) < π / 2,
|
|
20
|
+
p = projectHemisphere(t ? λ : λ > 0 ? λ - π : λ + π, φ);
|
|
21
|
+
|
|
22
|
+
var x = (p[0] - p[1]) * Math.SQRT1_2,
|
|
23
|
+
y = (p[0] + p[1]) * Math.SQRT1_2;
|
|
24
|
+
|
|
25
|
+
if (t) return [x, y];
|
|
26
|
+
|
|
27
|
+
var d = dx * Math.SQRT1_2,
|
|
28
|
+
s = x > 0 ^ y > 0 ? -1 : 1;
|
|
29
|
+
|
|
30
|
+
return [s * x - sgn(y) * d, s * y - sgn(x) * d];
|
|
31
|
+
} : function(λ, φ) {
|
|
32
|
+
var s = λ > 0 ? -.5 : .5,
|
|
33
|
+
point = projectHemisphere(λ + s * π, φ);
|
|
34
|
+
point[0] -= s * dx;
|
|
35
|
+
return point;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (projectHemisphere.invert) forward.invert = quincuncial ? function(x0, y0) {
|
|
39
|
+
var x = (x0 + y0) * Math.SQRT1_2,
|
|
40
|
+
y = (y0 - x0) * Math.SQRT1_2,
|
|
41
|
+
t = Math.abs(x) < .5 * dx && Math.abs(y) < .5 * dx;
|
|
42
|
+
|
|
43
|
+
if (!t) {
|
|
44
|
+
var d = dx * Math.SQRT1_2,
|
|
45
|
+
s = x > 0 ^ y > 0 ? -1 : 1,
|
|
46
|
+
x1 = -s * (x0 + (y > 0 ? 1 : -1) * d),
|
|
47
|
+
y1 = -s * (y0 + (x > 0 ? 1 : -1) * d);
|
|
48
|
+
x = (-x1 - y1) * Math.SQRT1_2;
|
|
49
|
+
y = (x1 - y1) * Math.SQRT1_2;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var p = projectHemisphere.invert(x, y);
|
|
53
|
+
if (!t) p[0] += x > 0 ? π : -π;
|
|
54
|
+
return p;
|
|
55
|
+
} : function(x, y) {
|
|
56
|
+
var s = x > 0 ? -.5 : .5,
|
|
57
|
+
location = projectHemisphere.invert(x + s * dx, y),
|
|
58
|
+
λ = location[0] - s * π;
|
|
59
|
+
if (λ < -π) λ += 2 * π;
|
|
60
|
+
else if (λ > π) λ -= 2 * π;
|
|
61
|
+
location[0] = λ;
|
|
62
|
+
return location;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return forward;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
projection.raw = projectAt;
|
|
69
|
+
|
|
70
|
+
return projection;
|
|
71
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require("./env");
|
|
2
|
+
|
|
3
|
+
var vows = require("vows"),
|
|
4
|
+
assert = require("assert");
|
|
5
|
+
|
|
6
|
+
var suite = vows.describe("d3.geo.gringorten");
|
|
7
|
+
|
|
8
|
+
suite.addBatch({
|
|
9
|
+
"gringorten": {
|
|
10
|
+
topic: d3.geo.gringorten,
|
|
11
|
+
"projections and inverse projections": function(gringorten) {
|
|
12
|
+
assert.equalInverse(gringorten, [120, 30], [687.902966, 184.525491], 1e-5);
|
|
13
|
+
assert.equalInverse(gringorten, [ 90, 80], [630, 112.748374]);
|
|
14
|
+
assert.equalInverse(gringorten, [ 0, 0], [480, 250], 1e-3);
|
|
15
|
+
assert.equalInverse(gringorten, [-80, 15], [350.494657, 218.619874]);
|
|
16
|
+
assert.equalInverse(gringorten, [ 0, -45], [480, 399.999928], 1e-3);
|
|
17
|
+
assert.equalInverse(gringorten, [ 0, 45], [480, 100.000071], 1e-3);
|
|
18
|
+
assert.equalInverse(gringorten, [ 15, 45], [499.360376, 117.149092], 1e-4);
|
|
19
|
+
assert.equalInverse(gringorten, [ 1, 1], [481.304784, 246.646234]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
suite.export(module);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require("./env");
|
|
2
|
+
|
|
3
|
+
var vows = require("vows"),
|
|
4
|
+
assert = require("assert");
|
|
5
|
+
|
|
6
|
+
var suite = vows.describe("d3.geo.healpix");
|
|
7
|
+
|
|
8
|
+
suite.addBatch({
|
|
9
|
+
"healpix": {
|
|
10
|
+
topic: d3.geo.healpix,
|
|
11
|
+
"projections and inverse projections": function(healpix) {
|
|
12
|
+
assert.equalInverse(healpix, [ 0, 0], [480, 250]);
|
|
13
|
+
assert.equalInverse(healpix, [ 1, -45], [487.454782, 356.202278]);
|
|
14
|
+
assert.equalInverse(healpix, [ 1, 45], [487.454782, 143.797721]);
|
|
15
|
+
assert.equalInverse(healpix, [-90, 0], [362.190275, 250]);
|
|
16
|
+
assert.equalInverse(healpix, [ 90, 0], [597.809724, 250]);
|
|
17
|
+
assert.equalInverse(healpix, [-80, 15], [375.280244, 211.177143]);
|
|
18
|
+
assert.equalInverse(healpix, [ 1, 1], [481.308996, 247.382139]);
|
|
19
|
+
assert.equalInverse(healpix, [ 15, 45], [504.813987, 143.797721]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
suite.export(module);
|
|
@@ -8,8 +8,10 @@ var suite = vows.describe("d3.geo.vanDerGrinten4");
|
|
|
8
8
|
suite.addBatch({
|
|
9
9
|
"vanDerGrinten4": {
|
|
10
10
|
topic: d3.geo.vanDerGrinten4,
|
|
11
|
-
"doesn't generate
|
|
11
|
+
"doesn't generate NaNs": function(vanDerGrinten4) {
|
|
12
12
|
assert.inDelta(vanDerGrinten4([20, 1e-7]), [532.359877, 250], 1e-6);
|
|
13
|
+
assert.inDelta(vanDerGrinten4([180.0000000000001, -90.00000000000003]), [480, 485.619449], 1e-6);
|
|
14
|
+
assert.inDelta(vanDerGrinten4([-180, -90.00000000000003]), [480, 485.619449], 1e-6);
|
|
13
15
|
},
|
|
14
16
|
"projections and inverse projections": function(vanDerGrinten4) {
|
|
15
17
|
assert.equalInverse(vanDerGrinten4, [ 0, 0], [480, 250]);
|
|
@@ -14,7 +14,7 @@ function vanDerGrinten4(λ, φ) {
|
|
|
14
14
|
D = sgn(Math.abs(λ) - π / 2) * Math.sqrt(λ1 * λ1 - 4),
|
|
15
15
|
D2 = D * D,
|
|
16
16
|
F = B_C2 * (B2 + C2 * D2 - 1) + (1 - B2) * (B2 * (B_3C * B_3C + 4 * C2) + 12 * BC * C2 + 4 * C2 * C2),
|
|
17
|
-
x1 = (D * (B_C2 + C2 - 1) + 2 *
|
|
17
|
+
x1 = (D * (B_C2 + C2 - 1) + 2 * asqrt(F)) / (4 * B_C2 + D2);
|
|
18
18
|
return [
|
|
19
19
|
sgn(λ) * π * x1 / 2,
|
|
20
20
|
sgn(φ) * π / 2 * asqrt(1 + D * Math.abs(x1) - x1 * x1)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: d3js-plugins-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-03-11 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: railties
|
|
@@ -118,6 +118,7 @@ files:
|
|
|
118
118
|
- vendor/assets/javascripts/d3/plugins/geo/projection/peirce-quincuncial.js
|
|
119
119
|
- vendor/assets/javascripts/d3/plugins/geo/projection/polyconic.js
|
|
120
120
|
- vendor/assets/javascripts/d3/plugins/geo/projection/projection.js
|
|
121
|
+
- vendor/assets/javascripts/d3/plugins/geo/projection/quincuncial.js
|
|
121
122
|
- vendor/assets/javascripts/d3/plugins/geo/projection/rectangular-polyconic.js
|
|
122
123
|
- vendor/assets/javascripts/d3/plugins/geo/projection/robinson.js
|
|
123
124
|
- vendor/assets/javascripts/d3/plugins/geo/projection/satellite.js
|
|
@@ -137,10 +138,12 @@ files:
|
|
|
137
138
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/env.js
|
|
138
139
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/equirectangular-test.js
|
|
139
140
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/fahey-test.js
|
|
141
|
+
- vendor/assets/javascripts/d3/plugins/geo/projection/test/gringorten-test.js
|
|
140
142
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/guyou-test.js
|
|
141
143
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/hammer-retroazimuthal-test.js
|
|
142
144
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/hammer-test.js
|
|
143
145
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/hatano-test.js
|
|
146
|
+
- vendor/assets/javascripts/d3/plugins/geo/projection/test/healpix-test.js
|
|
144
147
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/hill-test.js
|
|
145
148
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/lagrange-test.js
|
|
146
149
|
- vendor/assets/javascripts/d3/plugins/geo/projection/test/larrivee-test.js
|