|
1 <!DOCTYPE html> |
|
2 <html> |
|
3 <head> |
|
4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> |
|
5 <title>Bonne Projection</title> |
|
6 <script type="text/javascript" src="../../d3.js"></script> |
|
7 <script type="text/javascript" src="../../d3.geo.js"></script> |
|
8 <script type="text/javascript" src="../../lib/jquery/jquery.min.js"></script> |
|
9 <script type="text/javascript" src="../../lib/jquery-ui/jquery-ui.min.js"></script> |
|
10 <style type="text/css"> |
|
11 |
|
12 @import url("../../lib/jquery-ui/jquery-ui.css"); |
|
13 |
|
14 body, .ui-widget { |
|
15 font: 14px Helvetica Neue; |
|
16 } |
|
17 |
|
18 svg { |
|
19 width: 960px; |
|
20 height: 500px; |
|
21 border: solid 1px #ccc; |
|
22 background: #eee; |
|
23 } |
|
24 |
|
25 line { |
|
26 stroke: brown; |
|
27 stroke-dasharray: 4,2; |
|
28 } |
|
29 |
|
30 path { |
|
31 fill: #ccc; |
|
32 stroke: #fff; |
|
33 } |
|
34 |
|
35 div { |
|
36 width: 960px; |
|
37 } |
|
38 |
|
39 </style> |
|
40 </head> |
|
41 <body> |
|
42 <h3>Bonne Projection</h3> |
|
43 <script type="text/javascript"> |
|
44 |
|
45 // Our projection. |
|
46 var xy = d3.geo.bonne(), |
|
47 path = d3.geo.path().projection(xy); |
|
48 |
|
49 var countries = d3.select("body").append("svg:svg") |
|
50 .attr("id", "countries"); |
|
51 |
|
52 d3.json("../data/world-countries.json", function(collection) { |
|
53 countries.selectAll("path") |
|
54 .data(collection.features) |
|
55 .enter().append("svg:path") |
|
56 .attr("d", path) |
|
57 .append("svg:title") |
|
58 .text(function(d) { return d.properties.name; }); |
|
59 }); |
|
60 |
|
61 function refresh() { |
|
62 countries.selectAll("path") |
|
63 .attr("d", path); |
|
64 d3.select("#lon span") |
|
65 .text(xy.origin()[0]); |
|
66 d3.select("#lat span") |
|
67 .text(xy.origin()[1]); |
|
68 d3.select("#parallel span") |
|
69 .text(xy.parallel()); |
|
70 d3.select("#scale span") |
|
71 .text(xy.scale()); |
|
72 d3.select("#translate-x span") |
|
73 .text(xy.translate()[0]); |
|
74 d3.select("#translate-y span") |
|
75 .text(xy.translate()[1]); |
|
76 } |
|
77 |
|
78 </script><p> |
|
79 <div id="lon">origin.longitude: <span>0</span></div> |
|
80 <div id="lat">origin.latitude: <span>0</span></div><p> |
|
81 <div id="parallel">parallel: <span>45</span></div><p> |
|
82 <div id="scale">scale: <span>200</span></div><p> |
|
83 <div id="translate-x">translate.x: <span>480</span></div> |
|
84 <div id="translate-y">translate.y: <span>250</span></div> |
|
85 <script type="text/javascript"> |
|
86 |
|
87 $("#lon").slider({ |
|
88 min: -180, |
|
89 max: 180, |
|
90 step: 1e-1, |
|
91 value: 0, |
|
92 slide: function(event, ui) { |
|
93 var origin = xy.origin(); |
|
94 origin[0] = ui.value; |
|
95 xy.origin(origin); |
|
96 refresh(); |
|
97 } |
|
98 }); |
|
99 |
|
100 $("#lat").slider({ |
|
101 min: -90, |
|
102 max: 90, |
|
103 step: 1e-1, |
|
104 value: 0, |
|
105 slide: function(event, ui) { |
|
106 var origin = xy.origin(); |
|
107 origin[1] = ui.value; |
|
108 xy.origin(origin); |
|
109 refresh(); |
|
110 } |
|
111 }); |
|
112 |
|
113 $("#parallel").slider({ |
|
114 min: 0, |
|
115 max: 90, |
|
116 value: 45, |
|
117 slide: function(event, ui) { |
|
118 xy.parallel(ui.value); |
|
119 refresh(); |
|
120 } |
|
121 }); |
|
122 |
|
123 $("#scale").slider({ |
|
124 min: 0, |
|
125 max: 800, |
|
126 value: 200, |
|
127 slide: function(event, ui) { |
|
128 xy.scale(ui.value); |
|
129 refresh(); |
|
130 } |
|
131 }); |
|
132 |
|
133 $("#translate-x").slider({ |
|
134 min: -2000, |
|
135 max: 2000, |
|
136 value: 480, |
|
137 slide: function(event, ui) { |
|
138 var translate = xy.translate(); |
|
139 translate[0] = ui.value; |
|
140 xy.translate(translate); |
|
141 refresh(); |
|
142 } |
|
143 }); |
|
144 |
|
145 $("#translate-y").slider({ |
|
146 min: -2000, |
|
147 max: 2000, |
|
148 value: 250, |
|
149 slide: function(event, ui) { |
|
150 var translate = xy.translate(); |
|
151 translate[1] = ui.value; |
|
152 xy.translate(translate); |
|
153 refresh(); |
|
154 } |
|
155 }); |
|
156 |
|
157 </script> |
|
158 </body> |
|
159 </html> |