-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspiro_pointgen.js
executable file
·71 lines (53 loc) · 1.41 KB
/
spiro_pointgen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const XMLWriter = require('xml-writer');
const fs = require('fs');
function getSpirographCoordinates() {
// Bovard Coordinates
var origin = {
lat: 34.021038,
lng: -118.285577
};
// An array to hold the coordinates of the spirograph
var paths = [];
var R = 5;
var r = 1;
var a = 4;
var x0 = R + r - a;
var y0 = 0;
var cos = Math.cos;
var sin = Math.sin;
var pi = Math.PI;
var nRev = 16;
// Parameter to scale the spirograph
var spiroScale = 0.0001;
// Generate coordinates
for (var t = 0.0; t < (pi * nRev); t += 0.01) {
var x = (R + r) * cos((r / R) * t) - a * cos((1 + r / R) * t);
var y = (R + r) * sin((r / R) * t) - a * sin((1 + r / R) * t);
// Spirograph scaling
x *= spiroScale;
y *= spiroScale;
console.log(origin.lng + y);
console.log(origin.lat + x);
paths.push({
lat: origin.lat + x,
lng: origin.lng + y
});
}
return paths;
}
var paths = getSpirographCoordinates();
console.log(paths);
var ws = fs.createWriteStream('./spiro.kml');
var xw = new XMLWriter(false, function(string, encoding) {
ws.write(string, encoding);
});
xw.startDocument('1.0', 'UTF-8')
.startElement('kml')
.writeAttribute('xmlns', 'http://earth.google.com/kml/2.0')
.startElement('Document')
.startElement('coordinates')
paths.forEach(function(path) {
xw.text(path.lng + ',' + path.lat+ '\n');
});
xw.endElement().endElement().endElement().endDocument();
ws.end();