d3js-plugins-rails 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/d3js-plugins-rails/version.rb +2 -2
  4. data/vendor/assets/javascripts/d3/plugins/Makefile +1 -3
  5. data/vendor/assets/javascripts/d3/plugins/box/box.js +2 -2
  6. data/vendor/assets/javascripts/d3/plugins/force_labels/force_labels.js +32 -31
  7. data/vendor/assets/javascripts/d3/plugins/geo/projection/README.md +11 -10
  8. data/vendor/assets/javascripts/d3/plugins/geo/projection/berghaus.js +2 -2
  9. data/vendor/assets/javascripts/d3/plugins/geo/projection/gall-stereographic.js +19 -0
  10. data/vendor/assets/javascripts/d3/plugins/geo/projection/gringorten.js +1 -1
  11. data/vendor/assets/javascripts/d3/plugins/geo/projection/index.js +1 -4
  12. data/vendor/assets/javascripts/d3/plugins/geo/projection/interrupt.js +1 -1
  13. data/vendor/assets/javascripts/d3/plugins/interpolate-zoom/README.md +2 -2
  14. data/vendor/assets/javascripts/d3/plugins/package.json +1 -1
  15. data/vendor/assets/javascripts/d3/plugins/simplify/README.md +1 -4
  16. data/vendor/assets/javascripts/d3/plugins/urlencode/urlencode-test.js +1 -1
  17. data.tar.gz.sig +0 -0
  18. metadata +3 -9
  19. metadata.gz.sig +0 -0
  20. data/vendor/assets/javascripts/d3/plugins/geo/projection/conic-conformal.js +0 -40
  21. data/vendor/assets/javascripts/d3/plugins/geo/projection/conic-equal-area.js +0 -29
  22. data/vendor/assets/javascripts/d3/plugins/geo/projection/conic-equidistant.js +0 -30
  23. data/vendor/assets/javascripts/d3/plugins/geo/projection/test/transverse-mercator-test.js +0 -29
  24. data/vendor/assets/javascripts/d3/plugins/geo/projection/transverse-mercator.js +0 -19
  25. data/vendor/assets/javascripts/d3/plugins/simplify/simplify-test.js +0 -193
  26. data/vendor/assets/javascripts/d3/plugins/simplify/simplify.js +0 -446
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d21d9eec5f27fbb276f57e53cdaf0fa10d61fa49
4
- data.tar.gz: 617d3178f43e5574b4ae0469c2a92ce781179e8b
3
+ metadata.gz: e01f5b6f83287492b9f81ae4857a2f30fffff20e
4
+ data.tar.gz: c5bd529307c3c163f761097655e900c2e6f1cb66
5
5
  SHA512:
6
- metadata.gz: 67f172fb7f739f52c76795e98cdf2496ff97efa0ef36b2e754827d18c873d929b75cd684e11ab75ab0b00919f56b5166b50b7d850953d19b4c679106b9cf1709
7
- data.tar.gz: d8e21bba6f71a6199c890cf4bdce955b9f229c42751bdfdffc4c988791b3e3e7a1a29f280f3ea0dde99a2070150416ec676fd2785d3297592bb9d41557e82cb7
6
+ metadata.gz: 8a7b3894a68fc08512e09a59671eb33bfb000e95c1b8ef14be165544f02b5d5b41756def0f3756e42ac6122166207bc0a6faca9a3aa04dfae442caf6e94889c0
7
+ data.tar.gz: 393da2cb39599c594090a70320ece141421fc25b9bdcd9d5347f7f913e55d0d828fc326d2830391058d578a9e6670aa308f888f4cc016307f9577375007670e9
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,8 +1,8 @@
1
1
  module D3js
2
2
  module Plugins
3
3
  module Rails
4
- VERSION = "0.0.5"
5
- D3_PLUGINS_VERSION = "639c06c61d02d35028749c12b61c3f6c84b17409"
4
+ VERSION = "0.0.6"
5
+ D3_PLUGINS_VERSION = "37388598a7fd9865f6ffddeefcad16a5d039b4bb"
6
6
  end
7
7
  end
8
8
  end
@@ -4,9 +4,7 @@ all: \
4
4
 
5
5
  d3.geo.projection.js: $(shell node_modules/.bin/smash --list geo/projection/index.js)
6
6
  @rm -f $@
7
- node_modules/.bin/smash geo/projection/index.js > $@.tmp
8
- node_modules/.bin/uglifyjs $@.tmp -b indent-level=2 -o $@
9
- @rm $@.tmp
7
+ node_modules/.bin/smash geo/projection/index.js | node_modules/.bin/uglifyjs - -b indent-level=2 -o $@
10
8
  @chmod a-w $@
11
9
 
12
10
  d3.geo.projection.min.js: d3.geo.projection.js
@@ -187,8 +187,8 @@ d3.box = function() {
187
187
  boxTick.enter().append("text")
188
188
  .attr("class", "box")
189
189
  .attr("dy", ".3em")
190
- .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
191
- .attr("x", function(d, i) { return i & 1 ? width : 0 })
190
+ .attr("dx", function(d, i) { return i & 1 ? 6 : -6; })
191
+ .attr("x", function(d, i) { return i & 1 ? width : 0; })
192
192
  .attr("y", x0)
193
193
  .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
194
194
  .text(format)
@@ -1,56 +1,57 @@
1
1
  (function() {
2
2
  d3.force_labels = function force_labels() {
3
- var labels = d3.layout.force()
3
+ var labels = d3.layout.force();
4
4
 
5
5
  // Update the position of the anchor based on the center of bounding box
6
6
  function updateAnchor() {
7
- if (!labels.selection) return
7
+ if (!labels.selection) return;
8
8
  labels.selection.each(function(d) {
9
9
  var bbox = this.getBBox(),
10
- x=bbox.x+bbox.width/2,
11
- y=bbox.y+bbox.height/2
10
+ x = bbox.x + bbox.width / 2,
11
+ y = bbox.y + bbox.height / 2;
12
12
 
13
- d.anchorPos.x=x
14
- d.anchorPos.y=y
13
+ d.anchorPos.x = x;
14
+ d.anchorPos.y = y;
15
15
 
16
16
  // If a label position does not exist, set it to be the anchor position
17
- if (d.labelPos.x==null) {
18
- d.labelPos.x=x
19
- d.labelPos.y=y
17
+ if (d.labelPos.x == null) {
18
+ d.labelPos.x = x;
19
+ d.labelPos.y = y;
20
20
  }
21
- })
21
+ });
22
22
  }
23
23
 
24
24
  //The anchor position should be updated on each tick
25
- labels.on("tick.labels",updateAnchor)
25
+ labels.on("tick.labels", updateAnchor);
26
26
 
27
27
  // This updates all nodes/links - retaining any previous labelPos on updated nodes
28
28
  labels.update = function(selection) {
29
- labels.selection = selection
30
- var nodes=[],links=[];
29
+ labels.selection = selection;
30
+ var nodes = [], links = [];
31
31
  selection[0].forEach(function(d) {
32
32
  if(d && d.__data__) {
33
- var data = d.__data__
33
+ var data = d.__data__;
34
34
 
35
- if (!d.labelPos) d.labelPos = {fixed:false}
36
- if (!d.anchorPos) d.anchorPos = {fixed:true}
35
+ if (!d.labelPos) d.labelPos = {fixed: false};
36
+ if (!d.anchorPos) d.anchorPos = {fixed: true};
37
37
 
38
38
  // Place position objects in __data__ to make them available through
39
39
  // d.labelPos/d.anchorPos for different elements
40
- data.labelPos = d.labelPos
41
- data.anchorPos = d.anchorPos
40
+ data.labelPos = d.labelPos;
41
+ data.anchorPos = d.anchorPos;
42
42
 
43
- links.push({target:d.anchorPos,source:d.labelPos})
44
- nodes.push(d.anchorPos)
45
- nodes.push(d.labelPos)
43
+ links.push({target: d.anchorPos, source: d.labelPos});
44
+ nodes.push(d.anchorPos);
45
+ nodes.push(d.labelPos);
46
46
  }
47
- })
48
- labels.stop()
49
- .nodes(nodes)
50
- .links(links)
51
- updateAnchor()
52
- labels.start()
53
- }
54
- return labels
55
- }
56
- })()
47
+ });
48
+ labels
49
+ .stop()
50
+ .nodes(nodes)
51
+ .links(links);
52
+ updateAnchor();
53
+ labels.start();
54
+ };
55
+ return labels;
56
+ };
57
+ })();
@@ -28,6 +28,7 @@ Projections:
28
28
  * d3.geo.eisenlohr - [Eisenlohr conformal](http://bl.ocks.org/mbostock/3797585)
29
29
  * d3.geo.equirectangular - [Equirectangular (Plate Carrée)](http://bl.ocks.org/mbostock/3757119)
30
30
  * d3.geo.fahey - [Fahey](http://bl.ocks.org/mbostock/4731228)
31
+ * d3.geo.gallStereographic - [Gall’s stereographic](http://bl.ocks.org/mbostock/5234763)
31
32
  * d3.geo.gnomonic - [gnomonic](http://bl.ocks.org/mbostock/3757349)
32
33
  * d3.geo.gringorten - [Gringorten](http://bl.ocks.org/mbostock/4362031)
33
34
  * d3.geo.guyou - [Guyou hemisphere-in-a-square](http://bl.ocks.org/mbostock/3763867)
@@ -44,7 +45,7 @@ Projections:
44
45
  * d3.geo.loximuthal - [loximuthal](http://bl.ocks.org/mbostock/3867220)
45
46
  * d3.geo.mercator - [Mercator](http://bl.ocks.org/mbostock/3757132)
46
47
  * d3.geo.miller - [Miller](http://bl.ocks.org/mbostock/3734333)
47
- * d3.geo.modifiedStereographic - Modified Stereographic
48
+ * d3.geo.modifiedStereographic - [modified stereographic](http://www.jasondavies.com/maps/modified-stereographic/)
48
49
  * d3.geo.mollweide - [Mollweide](http://bl.ocks.org/mbostock/3734336), [Atlantis](http://bl.ocks.org/mbostock/4519975)
49
50
  * d3.geo.mtFlatPolarParabolic - [McBryde–Thomas flat-polar parabolic](http://bl.ocks.org/mbostock/4465130)
50
51
  * d3.geo.mtFlatPolarQuartic - [McBryde–Thomas flat-polar quartic](http://bl.ocks.org/mbostock/4465137)
@@ -53,26 +54,26 @@ Projections:
53
54
  * d3.geo.nellHammer - [Nell–Hammer](http://bl.ocks.org/mbostock/3734342)
54
55
  * d3.geo.orthographic - [orthographic](http://bl.ocks.org/mbostock/3757125)
55
56
  * d3.geo.peirceQuincuncial - [Pierce quincuncial](http://bl.ocks.org/mbostock/4310087)
56
- * d3.geo.polyconic - [Polyconic](http://bl.ocks.org/mbostock/3734343)
57
- * d3.geo.rectangularPolyconic - Rectangular Polyconic
57
+ * d3.geo.polyconic - [polyconic](http://bl.ocks.org/mbostock/3734343)
58
+ * d3.geo.rectangularPolyconic - [rectangular polyconic](http://bl.ocks.org/mbostock/5230202)
58
59
  * d3.geo.robinson - [Robinson](http://bl.ocks.org/mbostock/3710566)
59
60
  * d3.geo.satellite - [satellite (tilted perpsective)](http://bl.ocks.org/mbostock/3790444)
60
61
  * d3.geo.sinusoidal - [sinusoidal](http://bl.ocks.org/mbostock/3712399)
61
62
  * d3.geo.sinuMollweide - [Sinu-Mollweide](http://bl.ocks.org/mbostock/4319903)
62
63
  * d3.geo.stereographic - [stereographic](http://bl.ocks.org/mbostock/3757137)
63
- * d3.geo.times - Times
64
- * d3.geo.transverseMercator - Transverse Mercator
65
- * d3.geo.twoPointAzimuthal - Two-Point Azimuthal
66
- * d3.geo.twoPointEquidistant - Two-Point Equidistant
64
+ * d3.geo.times - [Times](http://bl.ocks.org/mbostock/5230564)
65
+ * d3.geo.transverseMercator - [transverse Mercator](http://bl.ocks.org/mbostock/5126418)
66
+ * d3.geo.twoPointAzimuthal - [two-point azimuthal](https://www.jasondavies.com/maps/two-point-azimuthal/)
67
+ * d3.geo.twoPointEquidistant - [two-point equidistant](https://www.jasondavies.com/maps/two-point-equidistant/)
67
68
  * d3.geo.vanDerGrinten - [Van der Grinten](http://bl.ocks.org/mbostock/3796831)
68
- * d3.geo.vanDerGrinten2 - Van der Grinten II
69
- * d3.geo.vanDerGrinten3 - Van der Grinten III
69
+ * d3.geo.vanDerGrinten2 - [Van der Grinten II](http://bl.ocks.org/mbostock/5230571)
70
+ * d3.geo.vanDerGrinten3 - [Van der Grinten III](http://bl.ocks.org/mbostock/5230580)
70
71
  * d3.geo.vanDerGrinten4 - [Van der Grinten IV](http://bl.ocks.org/mbostock/4489365)
71
72
  * d3.geo.wagner4 - [Wagner IV, Putniṇš P2´](http://bl.ocks.org/mbostock/4487674)
72
73
  * d3.geo.wagner6 - [Wagner VI](http://bl.ocks.org/mbostock/3710148)
73
74
  * d3.geo.wagner7 - [Wagner VII](http://bl.ocks.org/mbostock/4465109)
74
75
  * d3.geo.wiechel - [Wiechel](http://bl.ocks.org/mbostock/4463155)
75
- * d3.geo.winkel3 - [Winkel Tripel](http://bl.ocks.org/mbostock/3682676)
76
+ * d3.geo.winkel3 - [Winkel tripel](http://bl.ocks.org/mbostock/3682676)
76
77
 
77
78
  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).
78
79
 
@@ -25,7 +25,7 @@ function berghaus(n) {
25
25
  var θ = Math.atan2(y, x),
26
26
  θ0 = k * Math.round((θ - π / 2) / k) + π / 2,
27
27
  s = θ > θ0 ? -1 : 1,
28
- A = r * Math.cos(θ0 - θ)
28
+ A = r * Math.cos(θ0 - θ),
29
29
  cotα = 1 / Math.tan(s * Math.acos((A - π) / Math.sqrt(π * (π - 2 * A) + r * r)));
30
30
  θ = θ0 + 2 * Math.atan((cotα + s * Math.sqrt(cotα * cotα - 3)) / 3);
31
31
  x = r * Math.cos(θ), y = r * Math.sin(θ);
@@ -54,7 +54,7 @@ function berghausProjection() {
54
54
  p.rotate(rotate);
55
55
  rotateStream.sphere = function() {
56
56
  sphereStream.polygonStart(), sphereStream.lineStart();
57
- var ε = 1e-4;
57
+ var ε = 1e-2;
58
58
  for (var i = 0, δ = 360 / n, φ = 90 - 180 / n; i < n; ++i, φ -= δ) {
59
59
  sphereStream.point(180, 0);
60
60
  if (φ < -90) {
@@ -0,0 +1,19 @@
1
+ import "projection";
2
+
3
+ function gallStereographic(λ, φ) {
4
+ return [
5
+ λ * Math.SQRT1_2,
6
+ (1 + Math.SQRT1_2) * Math.tan(φ / 2)
7
+ ];
8
+ }
9
+
10
+ gallStereographic.invert = function(x, y) {
11
+ return [
12
+ x * Math.SQRT2,
13
+ Math.atan(y / (1 + Math.SQRT1_2)) * 2
14
+ ];
15
+ };
16
+
17
+ (d3.geo.gallStereographic = function() {
18
+ return projection(gallStereographic);
19
+ }).raw = gallStereographic;
@@ -38,7 +38,7 @@ gringorten.invert = function(x, y) {
38
38
  z = Math.sin(φ);
39
39
 
40
40
  return [sx * (Math.atan2(y, -z) + π), sy * asin(x)];
41
- }
41
+ };
42
42
 
43
43
  function gringortenHexadecant(λ, φ) {
44
44
  if (φ === π / 2) return [0, 0];
@@ -9,9 +9,6 @@ import "boggs";
9
9
  import "bonne";
10
10
  import "bromley";
11
11
  import "collignon";
12
- import "conic-conformal";
13
- import "conic-equal-area";
14
- import "conic-equidistant";
15
12
  import "craig";
16
13
  import "craster";
17
14
  import "cylindrical-equal-area";
@@ -23,6 +20,7 @@ import "eckert5";
23
20
  import "eckert6";
24
21
  import "eisenlohr";
25
22
  import "fahey";
23
+ import "gall-stereographic";
26
24
  import "gringorten";
27
25
  import "guyou";
28
26
  import "hammer-retroazimuthal";
@@ -53,7 +51,6 @@ import "satellite";
53
51
  import "sinusoidal";
54
52
  import "sinu-mollweide";
55
53
  import "times";
56
- import "transverse-mercator";
57
54
  import "two-point-azimuthal";
58
55
  import "two-point-equidistant";
59
56
  import "van-der-grinten";
@@ -32,7 +32,7 @@ d3.geo.interrupt = function(project) {
32
32
  return [
33
33
  [lobe[0][0] * 180 / π, lobe[0][1] * 180 / π],
34
34
  [lobe[1][0] * 180 / π, lobe[1][1] * 180 / π],
35
- [lobe[2][0] * 180 / π, lobe[2][1] * 180 / π],
35
+ [lobe[2][0] * 180 / π, lobe[2][1] * 180 / π]
36
36
  ];
37
37
  });
38
38
  });
@@ -4,8 +4,8 @@ An interpolator for zooming and panning between two views of a two-dimensional p
4
4
 
5
5
  Demo: <http://bl.ocks.org/3828981>
6
6
 
7
- <a name="interpolateZoom" href="#interpolateZoom">#</a> d3.**interpolateZoom**(*start*, *end*)
7
+ <a name="interpolateZoom" href="#interpolateZoom">#</a> d3.<b>interpolateZoom</b>(<i>start</i>, <i>end</i>)
8
8
 
9
9
  Returns an [interpolator](https://github.com/mbostock/d3/wiki/Transitions#wiki-_interpolate) between the two points *start* and *end*. Each point should be defined as an array of three numbers in world coordinates: *ux*, *uy* and *w*. The first two coordinates *ux*, *uy* are the center of the viewport. The last coordinate *w* is the size of the viewport.
10
10
 
11
- The returned interpolator also has a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *u,w* space. If you want to a slower or faster transition, feel free to multiply this by an arbitrary scale factor (*V* as described in the original paper).
11
+ The returned interpolator also has a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *u,w* space. If you want to a slower or faster transition, feel free to multiply this by an arbitrary scale factor (<i>V</i> as described in the original paper).
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  "smash": "~0.0.8",
16
- "uglify-js": "2.2.x",
16
+ "uglify-js": "git://github.com/mishoo/UglifyJS2.git#3bd7ca9961125b39dcd54d2182cb72bd1ca6006e",
17
17
  "vows": "0.7.x"
18
18
  },
19
19
  "scripts": {
@@ -1,6 +1,3 @@
1
1
  # Line Simplification
2
2
 
3
- Demos:
4
-
5
- * <http://bost.ocks.org/mike/simplify/>
6
- * <http://www.jasondavies.com/maps/simplify/>
3
+ Deprecated; replaced with [TopoJSON](https://github.com/mbostock/topojson).
@@ -24,7 +24,7 @@ suite.addBatch({
24
24
  "can be modified via array methods, albeit unsafely": function(urlencode) {
25
25
  var u = urlencode("foo", 1).and("bar", 2).and("baz", 3);
26
26
  u.splice(1, 1);
27
- u.push("unsafe=true")
27
+ u.push("unsafe=true");
28
28
  u.sort();
29
29
  assert.strictEqual(u + "", "baz=3&foo=1&unsafe=true");
30
30
  },
data.tar.gz.sig CHANGED
Binary file
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.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Gorodetsky
@@ -29,7 +29,7 @@ cert_chain:
29
29
  huM3+aQFhf3ji44P0XipQ3GsiF39ZRDA3MUe8jeuiHoq1vbmLrw0muYOH9jlTmCN
30
30
  soY91zInZJIkyNXJub8NKDuoUBKLvE5Ij89OFA==
31
31
  -----END CERTIFICATE-----
32
- date: 2013-03-18 00:00:00.000000000 Z
32
+ date: 2013-03-27 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: railties
@@ -94,9 +94,6 @@ files:
94
94
  - vendor/assets/javascripts/d3/plugins/geo/projection/bonne.js
95
95
  - vendor/assets/javascripts/d3/plugins/geo/projection/bromley.js
96
96
  - vendor/assets/javascripts/d3/plugins/geo/projection/collignon.js
97
- - vendor/assets/javascripts/d3/plugins/geo/projection/conic-conformal.js
98
- - vendor/assets/javascripts/d3/plugins/geo/projection/conic-equal-area.js
99
- - vendor/assets/javascripts/d3/plugins/geo/projection/conic-equidistant.js
100
97
  - vendor/assets/javascripts/d3/plugins/geo/projection/craig.js
101
98
  - vendor/assets/javascripts/d3/plugins/geo/projection/craster.js
102
99
  - vendor/assets/javascripts/d3/plugins/geo/projection/cylindrical-equal-area.js
@@ -110,6 +107,7 @@ files:
110
107
  - vendor/assets/javascripts/d3/plugins/geo/projection/elliptic.js
111
108
  - vendor/assets/javascripts/d3/plugins/geo/projection/end.js
112
109
  - vendor/assets/javascripts/d3/plugins/geo/projection/fahey.js
110
+ - vendor/assets/javascripts/d3/plugins/geo/projection/gall-stereographic.js
113
111
  - vendor/assets/javascripts/d3/plugins/geo/projection/gringorten.js
114
112
  - vendor/assets/javascripts/d3/plugins/geo/projection/guyou.js
115
113
  - vendor/assets/javascripts/d3/plugins/geo/projection/hammer-retroazimuthal.js
@@ -186,7 +184,6 @@ files:
186
184
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/rectangular-polyconic-test.js
187
185
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/robinson-test.js
188
186
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/times-test.js
189
- - vendor/assets/javascripts/d3/plugins/geo/projection/test/transverse-mercator-test.js
190
187
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/two-point-azimuthal-test.js
191
188
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/two-point-equidistant-test.js
192
189
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/van-der-grinten2-test.js
@@ -196,7 +193,6 @@ files:
196
193
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/wiechel-test.js
197
194
  - vendor/assets/javascripts/d3/plugins/geo/projection/test/winkel3-test.js
198
195
  - vendor/assets/javascripts/d3/plugins/geo/projection/times.js
199
- - vendor/assets/javascripts/d3/plugins/geo/projection/transverse-mercator.js
200
196
  - vendor/assets/javascripts/d3/plugins/geo/projection/two-point-azimuthal.js
201
197
  - vendor/assets/javascripts/d3/plugins/geo/projection/two-point-equidistant.js
202
198
  - vendor/assets/javascripts/d3/plugins/geo/projection/van-der-grinten.js
@@ -242,8 +238,6 @@ files:
242
238
  - vendor/assets/javascripts/d3/plugins/sankey/README.md
243
239
  - vendor/assets/javascripts/d3/plugins/sankey/sankey.js
244
240
  - vendor/assets/javascripts/d3/plugins/simplify/README.md
245
- - vendor/assets/javascripts/d3/plugins/simplify/simplify-test.js
246
- - vendor/assets/javascripts/d3/plugins/simplify/simplify.js
247
241
  - vendor/assets/javascripts/d3/plugins/superformula/superformula.js
248
242
  - vendor/assets/javascripts/d3/plugins/urlencode/urlencode-test.js
249
243
  - vendor/assets/javascripts/d3/plugins/urlencode/urlencode.js
metadata.gz.sig CHANGED
Binary file
@@ -1,40 +0,0 @@
1
- import "projection";
2
- import "parallel2";
3
-
4
- function conicConformal(φ0, φ1) {
5
- var cosφ0 = Math.cos(φ0),
6
- t = function(φ) { return Math.tan(π / 4 + φ / 2); },
7
- n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)),
8
- F = cosφ0 * Math.pow(t(φ0), n) / n;
9
-
10
- if (!n) return conicConformalMercator;
11
-
12
- function forward(λ, φ) {
13
- var ρ = Math.abs(Math.abs(φ) - π / 2) < ε ? 0 : F / Math.pow(t(φ), n);
14
- return [
15
- ρ * Math.sin(n * λ),
16
- F - ρ * Math.cos(n * λ)
17
- ];
18
- }
19
-
20
- forward.invert = function(x, y) {
21
- var ρ0_y = F - y,
22
- ρ = sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
23
- return [
24
- Math.atan2(x, ρ0_y) / n,
25
- 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - π / 2
26
- ];
27
- };
28
-
29
- return forward;
30
- }
31
-
32
- function conicConformalMercator(λ, φ) {
33
- return [λ, Math.log(Math.tan(π / 4 + φ / 2))];
34
- }
35
-
36
- conicConformalMercator.invert = function(x, y) {
37
- return [x, 2 * Math.atan(Math.exp(y)) - π / 2];
38
- };
39
-
40
- (d3.geo.conicConformal = function() { return parallel2Projection(conicConformal); }).raw = conicConformal;
@@ -1,29 +0,0 @@
1
- import "projection";
2
- import "parallel2";
3
-
4
- function conicEqualArea(φ0, φ1) {
5
- var sinφ0 = Math.sin(φ0),
6
- n = (sinφ0 + Math.sin(φ1)) / 2,
7
- C = 1 + sinφ0 * (2 * n - sinφ0),
8
- ρ0 = Math.sqrt(C) / n;
9
-
10
- function conicEqualArea(λ, φ) {
11
- var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
12
- return [
13
- ρ * Math.sin(λ *= n),
14
- ρ0 - ρ * Math.cos(λ)
15
- ];
16
- }
17
-
18
- conicEqualArea.invert = function(x, y) {
19
- var ρ0_y = ρ0 - y;
20
- return [
21
- Math.atan2(x, ρ0_y) / n,
22
- Math.asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n))
23
- ];
24
- };
25
-
26
- return albers;
27
- }
28
-
29
- (d3.geo.conicEqualArea = function() { return parallel2Projection(conicEqualArea); }).raw = conicEqualArea;
@@ -1,30 +0,0 @@
1
- import "projection";
2
- import "parallel2";
3
-
4
- function conicEquidistant(φ0, φ1) {
5
- var cosφ0 = Math.cos(φ0),
6
- n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0),
7
- G = cosφ0 / n + φ0;
8
-
9
- if (Math.abs(n) < ε) return d3.geo.equirectangular.raw;
10
-
11
- function forward(λ, φ) {
12
- var ρ = G - φ;
13
- return [
14
- ρ * Math.sin(n * λ),
15
- G - ρ * Math.cos(n * λ)
16
- ];
17
- }
18
-
19
- forward.invert = function(x, y) {
20
- var ρ0_y = G - y;
21
- return [
22
- Math.atan2(x, ρ0_y) / n,
23
- G - sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y)
24
- ];
25
- };
26
-
27
- return forward;
28
- }
29
-
30
- (d3.geo.conicEquidistant = function() { return parallel2Projection(conicEquidistant); }).raw = conicEquidistant;
@@ -1,29 +0,0 @@
1
- var vows = require("vows"),
2
- assert = require("./assert"),
3
- load = require("./load");
4
-
5
- var suite = vows.describe("d3.geo.transverseMercator");
6
-
7
- suite.addBatch({
8
- "transverseMercator": {
9
- topic: load("transverse-mercator"),
10
- "default": {
11
- topic: function(geo) { return geo.transverseMercator(); },
12
- "projections and inverse projections": function(transverseMercator) {
13
- assert.equalInverse(transverseMercator, [ 0, 0], [480, 250]);
14
- assert.equalInverse(transverseMercator, [ 0, -45], [480, 367.809724]);
15
- assert.equalInverse(transverseMercator, [ 0, 45], [480, 132.190275]);
16
- assert.equalInverse(transverseMercator, [-90, 0], [-Infinity, 250]);
17
- assert.equalInverse(transverseMercator, [ 90, 0], [ Infinity, 250]);
18
- assert.equalInverse(transverseMercator, [-80, 15], [203.284019, 100.632486]);
19
- assert.equalInverse(transverseMercator, [ 1, 1], [482.617727, 247.381607]);
20
- assert.equalInverse(transverseMercator, [ 15, 45], [507.764703, 129.590678]);
21
- assert.equalInverse(transverseMercator, [ 0, 90], [480, 14.380550]);
22
- assert.equalInverse(transverseMercator, [ 0, -90], [480, 485.619449]);
23
- assert.equalInverse(transverseMercator, [180, 0], [480, -221.238898]);
24
- }
25
- }
26
- }
27
- });
28
-
29
- suite.export(module);
@@ -1,19 +0,0 @@
1
- import "projection";
2
- import "hyperbolic";
3
-
4
- function transverseMercator(λ, φ) {
5
- var B = Math.cos(φ) * Math.sin(λ);
6
- return [
7
- .5 * Math.log((1 + B) / (1 - B)),
8
- Math.atan2(Math.tan(φ), Math.cos(λ))
9
- ];
10
- }
11
-
12
- transverseMercator.invert = function(x, y) {
13
- return [
14
- Math.atan2(sinh(x), Math.cos(y)),
15
- asin(Math.sin(y) / cosh(x))
16
- ];
17
- };
18
-
19
- (d3.geo.transverseMercator = function() { return projection(transverseMercator); }).raw = transverseMercator;
@@ -1,193 +0,0 @@
1
- global.d3 = require("d3");
2
- require("./simplify");
3
-
4
- var vows = require("vows"),
5
- assert = require("assert");
6
-
7
- var suite = vows.describe("d3.simplify");
8
-
9
- suite.addBatch({
10
- "d3.simplify": {
11
- "area(0)": {
12
- topic: function() {
13
- var simplify = d3.simplify().area(0).projection(d3.geo.equirectangular());
14
- return function(d) { return simplify(simplify.project(d)); };
15
- },
16
- "LineString": {
17
- "2 points": function(simplify) {
18
- var p = {type: "LineString", coordinates: [[0, 0], [1, 1]]};
19
- assert.deepEqual(simplify(p), p);
20
- },
21
- "9 points": function(simplify) {
22
- var p = {type: "LineString", coordinates: [[0, 0], [0, 5], [0, 10], [5, 10], [10, 10], [10, 5], [10, 0], [5, 0], [0, 0]]};
23
- assert.deepEqual(simplify(p), p);
24
- }
25
- },
26
- "FeatureCollection": {
27
- "preserves properties": function(simplify) {
28
- var p = {type: "FeatureCollection", features: [], id: "test"};
29
- assert.deepEqual(simplify(p), p);
30
- }
31
- },
32
- "Feature": {
33
- "preserves properties": function(simplify) {
34
- var p = {type: "Feature", geometry: {type: "GeometryCollection", geometries: []}, properties: {name: "test"}, id: "test"};
35
- assert.deepEqual(simplify(p), p);
36
- }
37
- },
38
- "GeometryCollection": {
39
- "preserves properties": function(simplify) {
40
- var p = {type: "GeometryCollection", geometries: [], id: "test"};
41
- assert.deepEqual(simplify(p), p);
42
- }
43
- }
44
- },
45
- "area(10)": {
46
- topic: function() {
47
- var simplify = d3.simplify().area(10).projection(d3.geo.equirectangular());
48
- return function(d) { return simplify(simplify.project(d)); };
49
- },
50
- "LineString": {
51
- "2 points": function(simplify) {
52
- var p = {type: "LineString", coordinates: [[0, 0], [1, 1]]};
53
- assert.deepEqual(simplify(p).coordinates, []);
54
- },
55
- "3 collinear points": function(simplify) {
56
- var p = {type: "LineString", coordinates: [[0, 0], [1, 1], [45, 45]]};
57
- assert.deepEqual(simplify(p).coordinates, []);
58
- },
59
- "3 points": function(simplify) {
60
- var p = {type: "LineString", coordinates: [[0, 0], [10, 10], [0, 20]]};
61
- assert.deepEqual(simplify(p), p);
62
- }
63
- },
64
- "MultiLineString": {
65
- "1 line": {
66
- "3 collinear points": function(simplify) {
67
- var p = {type: "MultiLineString", coordinates: [[[0, 0], [1, 1], [2, 2]]]};
68
- assert.deepEqual(simplify(p).coordinates, []);
69
- }
70
- },
71
- "2 lines": function(simplify) {
72
- var p = {type: "MultiLineString", coordinates: [[[0, 0], [1, 1], [0, 2]], [[10, 0], [15, 15], [20, 0]]]};
73
- assert.deepEqual(simplify(p).coordinates, [p.coordinates[1]]);
74
- }
75
- },
76
- "Polygon": {
77
- "empty result": function(simplify) {
78
- var p = {type: "Polygon", coordinates: [[[0, 0], [1, 1], [1, 0], [0, 0]]]};
79
- assert.deepEqual(simplify(p).coordinates, []);
80
- },
81
- "1 ring": function(simplify) {
82
- // TODO verify that LinearRings all have >= 4 points?
83
- var p = {type: "Polygon", coordinates: [[[0, 0], [10, 10], [10, 0], [0, 0]]]};
84
- assert.deepEqual(simplify(p), p);
85
- }
86
- },
87
- "MultiPolygon": {
88
- "empty result": function(simplify) {
89
- var p = {type: "MultiPolygon", coordinates: [[[[0, 0], [1, 1], [1, 0], [0, 0]]]]};
90
- assert.deepEqual(simplify(p).coordinates, []);
91
- },
92
- "1 polygon": function(simplify) {
93
- var p = {type: "MultiPolygon", coordinates: [[[[0, 0], [10, 10], [10, 0], [0, 0]]]]};
94
- assert.deepEqual(simplify(p), p);
95
- }
96
- },
97
- "GeometryCollection": {
98
- "empty result": function(simplify) {
99
- var p = {type: "GeometryCollection", geometries: [{type: "Polygon", coordinates: [[[0, 0], [1, 1], [1, 0], [0, 0]]]}]};
100
- assert.deepEqual(simplify(p).geometries, []);
101
- },
102
- "1 polygon": function(simplify) {
103
- var p = {type: "GeometryCollection", geometries: [{type: "MultiPolygon", coordinates: [[[[0, 0], [10, 10], [10, 0], [0, 0]]]]}]};
104
- assert.deepEqual(simplify(p), p);
105
- }
106
- },
107
- "FeatureCollection": {
108
- "empty result": function(simplify) {
109
- var p = {type: "FeatureCollection", features: [{type: "Feature", geometry: {type: "Polygon", coordinates: [[[0, 0], [1, 1], [1, 0], [0, 0]]]}}]};
110
- assert.deepEqual(simplify(p).features, []);
111
- },
112
- "1 polygon": function(simplify) {
113
- var p = {type: "FeatureCollection", features: [{type: "Feature", geometry: {type: "MultiPolygon", coordinates: [[[[0, 0], [10, 10], [10, 0], [0, 0]]]]}}]};
114
- assert.deepEqual(simplify(p), p);
115
- }
116
- }
117
- },
118
- "topology": {
119
- topic: function() {
120
- var simplify = d3.simplify().topology(true).area(10).projection(d3.geo.equirectangular());
121
- return function(d) { return simplify(simplify.project(d)); };
122
- },
123
- "Polygon": {
124
- "preserves topology": function(simplify) {
125
- assert.inDelta(simplify({
126
- type: "GeometryCollection",
127
- geometries: [
128
- {type: "Polygon", coordinates: [octagon(-2)]},
129
- {type: "Polygon", coordinates: [octagon(2)]}
130
- ]
131
- }).geometries.map(function(d) { return d.coordinates; }), [[[
132
- [474.444444, 250, 19.290123],
133
- [475.833333, 247.222222, 13.503086],
134
- [480, 248.611111, 19.290123],
135
- [480, 250, 19.290123],
136
- [480, 251.388888, 19.290123],
137
- [475.833333, 252.777777, 13.503086],
138
- [474.444444, 250, 19.290123]]], [[
139
- [480, 250, 19.290123],
140
- [480, 248.611111, 19.290123],
141
- [485.555555, 248.611111, 19.290123],
142
- [484.166666, 252.777777, 19.290123],
143
- [480, 251.388888, 19.290123],
144
- [480, 250, 19.290123]]]
145
- ], 1e-6);
146
- },
147
- "doesn't increase effective area of endpoints unless they touch another line": function(simplify) {
148
- assert.inDelta(simplify({type: "Polygon", coordinates: [octagon()]}).coordinates, [[
149
- [477.222222, 250, 21.219135],
150
- [478.611111, 247.222222, 13.503086],
151
- [482.777777, 248.611111, 21.219135],
152
- [481.388888, 252.777777, 21.219135],
153
- [477.222222, 250, 21.219135]
154
- ]], 1e-6);
155
- }
156
- }
157
- }
158
- }
159
- });
160
-
161
- suite.export(module);
162
-
163
- assert.inDelta = function(actual, expected, delta, message) {
164
- if (!inDelta(actual, expected, delta)) {
165
- assert.fail(actual, expected, message || "expected {actual} to be in within *" + delta + "* of {expected}", null, assert.inDelta);
166
- }
167
- };
168
-
169
- function inDelta(actual, expected, delta) {
170
- return (Array.isArray(expected) ? inDeltaArray : inDeltaNumber)(actual, expected, delta);
171
- }
172
-
173
- function inDeltaArray(actual, expected, delta) {
174
- var n = expected.length, i = -1;
175
- if (actual.length !== n) return false;
176
- while (++i < n) if (!inDelta(actual[i], expected[i], delta)) return false;
177
- return true;
178
- }
179
-
180
- function inDeltaNumber(actual, expected, delta) {
181
- return actual >= expected - delta && actual <= expected + delta;
182
- }
183
-
184
- function octagon(dx) {
185
- dx = dx || 0;
186
- return [
187
- [-2, 0], [-2, 1], [-1, 2], [0, 2], [ 1, 2], [ 2, 1],
188
- [ 2, 0], [ 2, -1], [ 1, -2], [0, -2], [-1, -2], [-2, -1],
189
- [-2, 0]
190
- ].map(function(point) {
191
- return [point[0] + dx, point[1]];
192
- });
193
- }
@@ -1,446 +0,0 @@
1
- (function() {
2
-
3
- d3.simplify = function() {
4
- var projection = d3.geo.albers(),
5
- triangulateLineString = triangulateLineStringSimple,
6
- heap,
7
- minArea = 3,
8
- topology = false,
9
- ringId,
10
- id,
11
- idByRings,
12
- idByPoint,
13
- ringsByPoint,
14
- sharedPoints,
15
- lastRingByPoint,
16
- isShared,
17
- graph;
18
-
19
- var projectCoordinates = {
20
- MultiPolygon: projectMultiPolygon,
21
- Polygon: projectPolygon,
22
- MultiLineString: projectPolygon,
23
- LineString: projectLineString
24
- };
25
-
26
- var triangulateCoordinates = {
27
- MultiPolygon: triangulateMultiPolygon,
28
- Polygon: triangulatePolygon,
29
- MultiLineString: triangulatePolygon,
30
- LineString: triangulateLineString
31
- };
32
-
33
- var simplifyCoordinates = {
34
- MultiPolygon: simplifyMultiPolygon,
35
- Polygon: simplifyPolygon,
36
- MultiLineString: simplifyPolygon,
37
- LineString: simplifyLineString
38
- };
39
-
40
- function simplify(object) {
41
- var type = object.type;
42
- if (type === "FeatureCollection") {
43
- object = copy(object);
44
- object.features = object.features.map(simplifyFeature).filter(nonemptyFeature);
45
- return object;
46
- }
47
- return (type === "Feature" ? simplifyFeature : simplifyGeometry)(object);
48
- }
49
-
50
- simplify.project = function(feature) {
51
- var maxArea = 0,
52
- maxAreas = {},
53
- triangle;
54
-
55
- heap = minHeap();
56
-
57
- if (topology) {
58
- id = 0;
59
- idByRings = {};
60
- ringsByPoint = {};
61
- idByPoint = {};
62
- sharedPoints = {};
63
- lastRingByPoint = {};
64
- isShared = {};
65
- graph = {};
66
- triangulateTopology(feature);
67
- } else {
68
- triangulateSimple(feature);
69
- }
70
-
71
- while (triangle = heap.pop()) {
72
- // If the area of the current point is less than that of the previous point
73
- // to be eliminated, use the latter’s area instead. This ensures that the
74
- // current point cannot be eliminated without eliminating previously-
75
- // eliminated points.
76
- if (triangle[1][2] < maxArea) triangle[1][2] = maxArea;
77
- else maxArea = triangle[1][2];
78
-
79
- if (triangle.previous) {
80
- triangle.previous.next = triangle.next;
81
- triangle.previous[2] = triangle[2];
82
- update(triangle.previous);
83
- } else if (topology) {
84
- maxAreas[triangle.ring] = triangle[1][2];
85
- } else {
86
- triangle[0][2] = triangle[1][2];
87
- }
88
-
89
- if (triangle.next) {
90
- triangle.next.previous = triangle.previous;
91
- triangle.next[0] = triangle[0];
92
- update(triangle.next);
93
- } else if (topology) {
94
- maxAreas[triangle.ring] = triangle[1][2];
95
- } else {
96
- triangle[2][2] = triangle[1][2];
97
- }
98
- }
99
-
100
- function update(triangle) {
101
- heap.remove(triangle);
102
- triangle[1][2] = area(triangle);
103
- heap.push(triangle);
104
- }
105
-
106
- if (topology) {
107
- var seen = {},
108
- max,
109
- m,
110
- c;
111
- for (var key in graph) {
112
- if (seen.hasOwnProperty(key)) continue;
113
- max = 0;
114
- for (var k in (c = components(graph, key))) if ((m = maxAreas[k]) > max) max = m;
115
- for (var k in c) maxAreas[k] = max, seen[k] = 1;
116
- }
117
-
118
- for (var key in sharedPoints) {
119
- maxArea = maxAreas[ringsByPoint[key][0]];
120
- sharedPoints[key].forEach(function(point) { point[2] = maxArea; });
121
- }
122
- idByPoint = idByRings = ringsByPoint = sharedPoints = isShared = lastRingByPoint = graph = null;
123
- }
124
-
125
- heap = null;
126
- return feature;
127
- };
128
-
129
- function components(graph, source) {
130
- var seen = {},
131
- nextLevel = {},
132
- thisLevel,
133
- empty;
134
- nextLevel[source] = 1;
135
- while (1) {
136
- empty = true;
137
- for (var k in nextLevel) empty = false;
138
- if (empty) break;
139
- thisLevel = nextLevel;
140
- nextLevel = {};
141
- for (var v in thisLevel) {
142
- if (seen.hasOwnProperty(v)) continue;
143
- seen[v] = 1;
144
- var neighbors = graph[v];
145
- for (var k in neighbors) nextLevel[k] = neighbors[k];
146
- }
147
- }
148
- return seen;
149
- }
150
-
151
- function projectFeature(feature) {
152
- projectGeometry(feature.geometry);
153
- }
154
-
155
- function projectGeometry(geometry) {
156
- var type = geometry.type;
157
- if (type === "GeometryCollection") geometry.geometries.forEach(projectGeometry);
158
- else geometry.coordinates = projectCoordinates[type](geometry.coordinates);
159
- }
160
-
161
- function projectMultiPolygon(multiPolygon) {
162
- return multiPolygon.map(projectPolygon);
163
- }
164
-
165
- function projectPolygon(polygon) {
166
- return polygon.map(projectLineString);
167
- }
168
-
169
- function projectLineString(lineString) {
170
- ++ringId;
171
- return lineString.map(projectPoint);
172
- }
173
-
174
- function projectPoint(point) {
175
- var pointKey = (point = projection(point))[0] + "," + point[1],
176
- key = (idByPoint.hasOwnProperty(pointKey) ? idByPoint[pointKey] + ":" : "") + ringId;
177
- idByPoint[pointKey] = idByRings.hasOwnProperty(key)
178
- ? idByRings[key]
179
- : idByRings[key] = ++id;
180
- if (lastRingByPoint.hasOwnProperty(pointKey) && lastRingByPoint[pointKey] !== ringId) {
181
- isShared[pointKey] = 1;
182
- }
183
- lastRingByPoint[pointKey] = ringId;
184
- return point;
185
- }
186
-
187
- function triangulateLineStringTopology(lineString) {
188
- ++ringId;
189
- var n = lineString.length - 1,
190
- triangle0,
191
- triangle,
192
- a = lineString[0],
193
- b = lineString[1],
194
- c,
195
- key0,
196
- key,
197
- idA = idByPoint[a[0] + "," + a[1]],
198
- idB = idByPoint[key0 = b[0] + "," + b[1]],
199
- idC;
200
-
201
- lineString[0][2] = lineString[n][2] = 0;
202
- if (n < 2) return lineString;
203
-
204
- graph[ringId] = {};
205
-
206
- addSharedPoint(a);
207
- for (var i = 2; i <= n; ++i, a = b, b = c, idA = idB, idB = idC, key0 = key) {
208
- c = lineString[i];
209
- idC = idByPoint[key = c[0] + "," + c[1]];
210
- if (idA === idB && idB === idC || !isShared.hasOwnProperty(key0)) {
211
- triangle = [a, b, c];
212
- triangle.ring = ringId;
213
- b[2] = area(triangle);
214
- heap.push(triangle);
215
- if (triangle0) (triangle.previous = triangle0).next = triangle;
216
- triangle0 = triangle;
217
- } else {
218
- addSharedPoint(b);
219
- triangle0 = null;
220
- }
221
- }
222
- addSharedPoint(b);
223
-
224
- function addSharedPoint(point) {
225
- var key = point[0] + "," + point[1],
226
- rings = ringsByPoint.hasOwnProperty(key) ? ringsByPoint[key] : (ringsByPoint[key] = []);
227
- rings.forEach(function(ring) {
228
- graph[ring][ringId] = graph[ringId][ring] = 1;
229
- });
230
- rings.push(ringId);
231
- if (sharedPoints.hasOwnProperty(key)) sharedPoints[key].push(point);
232
- else sharedPoints[key] = [point];
233
- }
234
-
235
- return lineString;
236
- }
237
-
238
- // Project and triangulate.
239
- function triangulateLineStringSimple(lineString) {
240
- var points = lineString.map(projection),
241
- n = points.length - 1,
242
- triangle0,
243
- triangle,
244
- a = points[0],
245
- b = points[1],
246
- c;
247
-
248
- points[0][2] = points[n][2] = 0;
249
-
250
- for (var i = 2; i <= n; ++i) {
251
- triangle = [a, b, c = points[i]];
252
- b[2] = area(triangle);
253
- heap.push(triangle);
254
- if (triangle0) (triangle.previous = triangle0).next = triangle;
255
- triangle0 = triangle;
256
- a = b;
257
- b = c;
258
- }
259
-
260
- return points;
261
- }
262
-
263
- function triangulateSimple(object) {
264
- var type = object.type;
265
- if (type === "FeatureCollection") object.features.forEach(triangulateFeature);
266
- else (type === "Feature" ? triangulateFeature : triangulateGeometry)(object);
267
- }
268
-
269
- function triangulateTopology(object) {
270
- var type = object.type;
271
- ringId = 0;
272
- if (type === "FeatureCollection") {
273
- object.features.forEach(projectFeature);
274
- ringId = 0;
275
- object.features.forEach(triangulateFeature);
276
- } else if (type === "Feature") {
277
- projectFeature(object);
278
- ringId = 0;
279
- triangulateFeature(object);
280
- } else {
281
- projectGeometry(object);
282
- ringId = 0;
283
- triangulateGeometry(object);
284
- }
285
- }
286
-
287
- function triangulateFeature(feature) {
288
- triangulateGeometry(feature.geometry);
289
- }
290
-
291
- function triangulateGeometry(geometry) {
292
- var type = geometry.type;
293
- if (type === "GeometryCollection") geometry.geometries.forEach(triangulateGeometry);
294
- else geometry.coordinates = triangulateCoordinates[type](geometry.coordinates);
295
- }
296
-
297
- function triangulateMultiPolygon(multiPolygon) {
298
- return multiPolygon.map(triangulatePolygon);
299
- }
300
-
301
- function triangulatePolygon(polygon) {
302
- return polygon.map(triangulateLineString);
303
- }
304
-
305
- function simplifyFeature(feature) {
306
- feature = copy(feature);
307
- feature.geometry = simplifyGeometry(feature.geometry);
308
- return feature;
309
- }
310
-
311
- function simplifyGeometry(geometry) {
312
- var type = geometry.type;
313
- geometry = copy(geometry);
314
- if (type === "GeometryCollection") {
315
- geometry.geometries = geometry.geometries.map(simplifyGeometry).filter(nonemptyGeometry);
316
- } else {
317
- geometry.coordinates = simplifyCoordinates[type](geometry.coordinates);
318
- }
319
- return geometry;
320
- }
321
-
322
- function simplifyMultiPolygon(multiPolygon) {
323
- return multiPolygon.map(simplifyPolygon).filter(length);
324
- }
325
-
326
- function simplifyPolygon(polygon) {
327
- return polygon.map(simplifyLineString).filter(length);
328
- }
329
-
330
- function simplifyLineString(lineString) {
331
- return lineString.filter(filterLineString);
332
- }
333
-
334
- function filterLineString(point) {
335
- return point[2] >= minArea;
336
- }
337
-
338
- simplify.projection = function(_) {
339
- if (!arguments.length) return projection;
340
- projection = _;
341
- return simplify;
342
- };
343
-
344
- simplify.area = function(_) {
345
- if (!arguments.length) return minArea;
346
- minArea = +_;
347
- return simplify;
348
- };
349
-
350
- simplify.topology = function(_) {
351
- if (!arguments.length) return topology;
352
- triangulateCoordinates.LineString =
353
- triangulateLineString = (topology = !!_)
354
- ? triangulateLineStringTopology
355
- : triangulateLineStringSimple;
356
- return simplify;
357
- };
358
-
359
- return simplify;
360
- };
361
-
362
- function compare(a, b) {
363
- return a[1][2] - b[1][2] || a[1][1] - b[1][1] || a[1][0] - b[1][0];
364
- }
365
-
366
- function area(t) {
367
- return Math.abs((t[0][0] - t[2][0]) * (t[1][1] - t[0][1]) - (t[0][0] - t[1][0]) * (t[2][1] - t[0][1]));
368
- }
369
-
370
- function minHeap() {
371
- var heap = {},
372
- array = [];
373
-
374
- heap.push = function() {
375
- for (var i = 0, n = arguments.length; i < n; ++i) {
376
- var object = arguments[i];
377
- up(object.index = array.push(object) - 1);
378
- }
379
- return array.length;
380
- };
381
-
382
- heap.pop = function() {
383
- var removed = array[0],
384
- object = array.pop();
385
- if (array.length) {
386
- array[object.index = 0] = object;
387
- down(0);
388
- }
389
- return removed;
390
- };
391
-
392
- heap.remove = function(removed) {
393
- var i = removed.index,
394
- object = array.pop();
395
- if (i !== array.length) {
396
- array[object.index = i] = object;
397
- (compare(object, removed) < 0 ? up : down)(i);
398
- }
399
- return i;
400
- };
401
-
402
- function up(i) {
403
- var object = array[i];
404
- while (i > 0) {
405
- var up = ((i + 1) >> 1) - 1,
406
- parent = array[up];
407
- if (compare(object, parent) >= 0) break;
408
- array[parent.index = i] = parent;
409
- array[object.index = i = up] = object;
410
- }
411
- }
412
-
413
- function down(i) {
414
- var object = array[i];
415
- while (true) {
416
- var right = (i + 1) << 1,
417
- left = right - 1,
418
- down = i,
419
- child = array[down];
420
- if (left < array.length && compare(array[left], child) < 0) child = array[down = left];
421
- if (right < array.length && compare(array[right], child) < 0) child = array[down = right];
422
- if (down === i) break;
423
- array[child.index = i] = child;
424
- array[object.index = i = down] = object;
425
- }
426
- }
427
-
428
- return heap;
429
- }
430
-
431
- function nonemptyFeature(d) { return nonemptyGeometry(d.geometry); }
432
-
433
- function nonemptyGeometry(d) {
434
- return length(d.type === "GeometryCollection"
435
- ? d.geometries : d.coordinates);
436
- }
437
-
438
- function length(d) { return d.length; }
439
-
440
- function copy(object) {
441
- var o = {};
442
- for (var key in object) o[key] = object[key];
443
- return o;
444
- }
445
-
446
- })();