UNPKG

1.28 kBJavaScriptView Raw
1import {geoCentroid as centroid, geoProjection as projection} from "d3-geo";
2import {collignonRaw} from "../collignon.js";
3import {pi, sqrt} from "../math.js";
4import polyhedral from "./index.js";
5import octahedron from "./octahedron.js";
6
7var kx = 2 / sqrt(3);
8
9function collignonK(a, b) {
10 var p = collignonRaw(a, b);
11 return [p[0] * kx, p[1]];
12}
13
14collignonK.invert = function(x,y) {
15 return collignonRaw.invert(x / kx, y);
16};
17
18export default function(faceProjection) {
19
20 faceProjection = faceProjection || function(face) {
21 var c = centroid({type: "MultiPoint", coordinates: face});
22 return projection(collignonK).translate([0, 0]).scale(1).rotate(c[1] > 0 ? [-c[0], 0] : [180 - c[0], 180]);
23 };
24
25 var faces = octahedron.map(function(face) {
26 return {face: face, project: faceProjection(face)};
27 });
28
29 [-1, 0, 0, 1, 0, 1, 4, 5].forEach(function(d, i) {
30 var node = faces[d];
31 node && (node.children || (node.children = [])).push(faces[i]);
32 });
33
34 return polyhedral(faces[0], function(lambda, phi) {
35 return faces[lambda < -pi / 2 ? phi < 0 ? 6 : 4
36 : lambda < 0 ? phi < 0 ? 2 : 0
37 : lambda < pi / 2 ? phi < 0 ? 3 : 1
38 : phi < 0 ? 7 : 5];
39 })
40 .angle(-30)
41 .scale(121.906)
42 .center([0, 48.5904]);
43}