dgeoutils 2.4.2 → 2.4.5

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.
Files changed (43) hide show
  1. package/dist/{DCircle.d.ts → cjs/DCircle.d.ts} +0 -0
  2. package/dist/cjs/DCircle.js +102 -0
  3. package/dist/{DLine.d.ts → cjs/DLine.d.ts} +0 -0
  4. package/dist/cjs/DLine.js +310 -0
  5. package/dist/{DNumbers.d.ts → cjs/DNumbers.d.ts} +0 -0
  6. package/dist/cjs/DNumbers.js +30 -0
  7. package/dist/{DPlane.d.ts → cjs/DPlane.d.ts} +0 -0
  8. package/dist/cjs/DPlane.js +132 -0
  9. package/dist/{DPoint.d.ts → cjs/DPoint.d.ts} +2 -0
  10. package/dist/cjs/DPoint.js +614 -0
  11. package/dist/{DPolygon.d.ts → cjs/DPolygon.d.ts} +0 -0
  12. package/dist/cjs/DPolygon.js +1560 -0
  13. package/dist/{DPolygonLoop.d.ts → cjs/DPolygonLoop.d.ts} +0 -0
  14. package/dist/cjs/DPolygonLoop.js +401 -0
  15. package/dist/{FastSearch.d.ts → cjs/FastSearch.d.ts} +0 -0
  16. package/dist/cjs/FastSearch.js +53 -0
  17. package/dist/{TraceMatrix.d.ts → cjs/TraceMatrix.d.ts} +0 -0
  18. package/dist/cjs/TraceMatrix.js +256 -0
  19. package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  20. package/dist/{index.js → cjs/index.js} +5 -1
  21. package/dist/{utils.d.ts → cjs/utils.d.ts} +0 -0
  22. package/dist/cjs/utils.js +216 -0
  23. package/dist/{DCircle.js → es2015/DCircle.js} +14 -18
  24. package/dist/{DLine.js → es2015/DLine.js} +24 -28
  25. package/dist/es2015/DNumbers.js +22 -0
  26. package/dist/{DPlane.js → es2015/DPlane.js} +22 -26
  27. package/dist/{DPoint.js → es2015/DPoint.js} +91 -56
  28. package/dist/{DPolygon.js → es2015/DPolygon.js} +41 -45
  29. package/dist/{DPolygonLoop.js → es2015/DPolygonLoop.js} +1 -5
  30. package/dist/{FastSearch.js → es2015/FastSearch.js} +1 -5
  31. package/dist/{TraceMatrix.js → es2015/TraceMatrix.js} +35 -39
  32. package/dist/es2015/index.js +10 -0
  33. package/dist/{utils.js → es2015/utils.js} +29 -41
  34. package/dist/esm/DCircle.js +1 -1
  35. package/dist/esm/DLine.js +2 -2
  36. package/dist/esm/DPoint.js +42 -2
  37. package/dist/esm/DPolygon.js +7 -7
  38. package/dist/esm/utils.js +6 -6
  39. package/dist/umd/dgeoutils.js +59 -19
  40. package/dist/umd/dgeoutils.min.js +1 -1
  41. package/dist/umd/dgeoutils.min.js.map +1 -1
  42. package/package.json +9 -13
  43. package/dist/DNumbers.js +0 -26
File without changes
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DCircle = void 0;
4
+ var DPoint_1 = require("./DPoint");
5
+ var DPolygon_1 = require("./DPolygon");
6
+ var utils_1 = require("./utils");
7
+ var DCircle = (function () {
8
+ function DCircle(center, r) {
9
+ if (center === void 0) { center = DPoint_1.DPoint.zero(); }
10
+ if (r === void 0) { r = 0; }
11
+ this.center = center;
12
+ this.r = r;
13
+ }
14
+ DCircle.prototype.toString = function () {
15
+ return "(".concat(this.center.toString(), ", ").concat(this.r, ")");
16
+ };
17
+ DCircle.prototype.getValue = function () {
18
+ return { center: this.center, r: this.r };
19
+ };
20
+ DCircle.prototype.clone = function () {
21
+ return new DCircle(this.center, this.r);
22
+ };
23
+ DCircle.prototype.findPoints = function (c) {
24
+ if (this.equal(c)) {
25
+ return Infinity;
26
+ }
27
+ var _a = this, _b = _a.center, x0 = _b.x, y0 = _b.y, r0 = _a.r;
28
+ var _c = c.center, x1 = _c.x, y1 = _c.y, r1 = c.r;
29
+ var r02 = r0 * r0;
30
+ var d = this.center.distance(c.center);
31
+ var a = (r02 - r1 * r1 + d * d) / (2 * d);
32
+ var h = Math.sqrt(r02 - a * a);
33
+ var ad = a / d;
34
+ var dy = y1 - y0;
35
+ var dx = x1 - x0;
36
+ var hd = h / d;
37
+ var x2 = x0 + ad * (x1 - x0);
38
+ var y2 = y0 + ad * (y1 - y0);
39
+ var x31 = x2 + hd * dy;
40
+ var y31 = y2 - hd * dx;
41
+ var x32 = x2 - hd * dy;
42
+ var y32 = y2 + hd * dx;
43
+ var res = [];
44
+ if (!isNaN(x31) && !isNaN(y31)) {
45
+ res.push(new DPoint_1.DPoint(x31, y31));
46
+ }
47
+ if (!isNaN(x32) && !isNaN(y32) && !(x31 === x32 && y31 === y32)) {
48
+ res.push(new DPoint_1.DPoint(x32, y32));
49
+ }
50
+ return res;
51
+ };
52
+ DCircle.prototype.equal = function (_a) {
53
+ var center = _a.center, r = _a.r;
54
+ return this.center.equal(center) && this.r === r;
55
+ };
56
+ DCircle.prototype.findPolygonInside = function (pointCount, startAngle, stopAngle) {
57
+ if (pointCount === void 0) { pointCount = 64; }
58
+ if (startAngle === void 0) { startAngle = 0; }
59
+ if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
60
+ var step = 2 * Math.PI / pointCount;
61
+ var points = [];
62
+ var angle = startAngle;
63
+ while (angle < stopAngle - step) {
64
+ points.push(new DPoint_1.DPoint(this.r).scale(Math.cos(angle), Math.sin(angle))
65
+ .move(this.center));
66
+ angle += step;
67
+ }
68
+ var x = this.r * Math.cos(stopAngle) + this.center.x;
69
+ var y = this.r * Math.sin(stopAngle) + this.center.y;
70
+ points.push(new DPoint_1.DPoint(x, y));
71
+ return new DPolygon_1.DPolygon(points);
72
+ };
73
+ DCircle.prototype.findPolygonInsideOnSphere = function (pointCount, startAngle, stopAngle) {
74
+ if (pointCount === void 0) { pointCount = 64; }
75
+ if (startAngle === void 0) { startAngle = 0; }
76
+ if (stopAngle === void 0) { stopAngle = 2 * Math.PI; }
77
+ (0, utils_1.checkFunction)('findPolygonInsideOnSphere')
78
+ .checkArgument('center')
79
+ .shouldBeDegree(this.center);
80
+ var step = 2 * Math.PI / pointCount;
81
+ var points = [];
82
+ var angle = startAngle;
83
+ while (angle < stopAngle - step) {
84
+ points.push(this.sphereOffset(angle));
85
+ angle += step;
86
+ }
87
+ points.push(this.sphereOffset(stopAngle));
88
+ return new DPolygon_1.DPolygon(points);
89
+ };
90
+ DCircle.prototype.sphereOffset = function (bearing, earthRadius) {
91
+ if (earthRadius === void 0) { earthRadius = DPoint_1.EARTH_RADIUS_IN_METERS; }
92
+ var _a = this.center.clone().degreeToRadians(), lon1 = _a.x, lat1 = _a.y;
93
+ var dByR = this.r / earthRadius;
94
+ var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +
95
+ Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
96
+ var lon = lon1 +
97
+ Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
98
+ return new DPoint_1.DPoint(lon, lat).radiansToDegrees();
99
+ };
100
+ return DCircle;
101
+ }());
102
+ exports.DCircle = DCircle;
File without changes
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DLine = void 0;
4
+ var DPoint_1 = require("./DPoint");
5
+ var utils_1 = require("./utils");
6
+ var DNumbers_1 = require("./DNumbers");
7
+ var DLine = (function () {
8
+ function DLine(a, b, c, begin, end) {
9
+ if (begin === void 0) { begin = DPoint_1.DPoint.zero(); }
10
+ if (end === void 0) { end = DPoint_1.DPoint.zero(); }
11
+ this.a = a;
12
+ this.b = b;
13
+ this.c = c;
14
+ this.begin = begin;
15
+ this.end = end;
16
+ }
17
+ DLine.prototype.clone = function () {
18
+ return new DLine(this.a, this.b, this.c, this.begin.clone(), this.end.clone());
19
+ };
20
+ DLine.prototype.findPerpendicular = function (p) {
21
+ (0, utils_1.checkFunction)('findPerpendicular')
22
+ .checkArgument('this.begin')
23
+ .shouldBeMeters(this.begin)
24
+ .checkArgument('this.end')
25
+ .shouldBeMeters(this.end)
26
+ .checkArgument('p')
27
+ .shouldBeMeters(p);
28
+ return new DLine(-this.b, this.a, this.b * p.x - this.a * p.y);
29
+ };
30
+ DLine.prototype.perpendicularDistance = function (p) {
31
+ (0, utils_1.checkFunction)('perpendicularDistance')
32
+ .checkArgument('this.begin')
33
+ .shouldBeMeters(this.begin)
34
+ .checkArgument('this.end')
35
+ .shouldBeMeters(this.end)
36
+ .checkArgument('p')
37
+ .shouldBeMeters(p);
38
+ var perpendicularLine = this.findPerpendicular(p);
39
+ var targetPoint = perpendicularLine.findPoint(this);
40
+ return targetPoint.distance(p);
41
+ };
42
+ DLine.prototype.intersection = function (l, d, includeOnly) {
43
+ if (d === void 0) { d = 0; }
44
+ if (includeOnly === void 0) { includeOnly = false; }
45
+ var p = this.findPoint(l);
46
+ if (p) {
47
+ if (includeOnly) {
48
+ return this.insideRange(p, d) && l.insideRange(p, d) ? p : null;
49
+ }
50
+ return this.inRange(p, d) && l.inRange(p, d) ? p : null;
51
+ }
52
+ return null;
53
+ };
54
+ DLine.prototype.intersectionWithCircle = function (circle) {
55
+ var center = circle.center, r = circle.r;
56
+ var per = this.findPerpendicular(center);
57
+ var t = this.findPoint(per);
58
+ var distance = t.distance(center);
59
+ if (this.begin.equal(center)) {
60
+ distance = 0;
61
+ }
62
+ if (this.end.equal(center)) {
63
+ distance = 0;
64
+ }
65
+ if (distance < r) {
66
+ var _a = this, a = _a.a, b = _a.b, c = _a.c;
67
+ if (this.isParallel) {
68
+ var ct = center.distance(t);
69
+ var move = Math.sqrt(r * r - ct * ct);
70
+ if (this.isParallelY) {
71
+ t.x = this.begin.x;
72
+ var r1_1 = t.clone().move(0, -move);
73
+ var r2_1 = t.clone().move(0, move);
74
+ return [r1_1, r2_1];
75
+ }
76
+ if (this.isParallelX) {
77
+ t.y = this.begin.y;
78
+ var r1_2 = t.clone().move(move, 0);
79
+ var r2_2 = t.clone().move(-move, 0);
80
+ return [r1_2, r2_2];
81
+ }
82
+ }
83
+ if (this.begin.like(center)) {
84
+ var p = this.begin.clone();
85
+ return [this.movePoint(p, r), this.movePoint(p, -r)];
86
+ }
87
+ if (this.end.like(center)) {
88
+ var p = this.end.clone();
89
+ return [this.movePoint(p, r), this.movePoint(p, -r)];
90
+ }
91
+ var s = a * a + b * b;
92
+ var d = r * r - c * c / s;
93
+ var mult = Math.sqrt(d / s);
94
+ var r1 = t.clone().move(b * mult, -a * mult);
95
+ var r2 = t.clone().move(-b * mult, a * mult);
96
+ return [r1, r2];
97
+ }
98
+ if (distance === r) {
99
+ return t;
100
+ }
101
+ return null;
102
+ };
103
+ DLine.prototype.inRange = function (p, d) {
104
+ if (d === void 0) { d = 0; }
105
+ var _a = this, minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY;
106
+ var x = p.x, y = p.y;
107
+ var isInX = x >= minX - d && x <= maxX + d;
108
+ var isInY = y >= minY - d && y <= maxY + d;
109
+ return isInX && isInY;
110
+ };
111
+ DLine.prototype.insideRange = function (p, d) {
112
+ if (d === void 0) { d = 0; }
113
+ var _a = this, begin = _a.begin, end = _a.end;
114
+ return this.inRange(p, d) && !begin.like(p, 0.00001) && !end.like(p, 0.00001);
115
+ };
116
+ Object.defineProperty(DLine.prototype, "center", {
117
+ get: function () {
118
+ return this.begin
119
+ .clone()
120
+ .setIfLessThan(this.end)
121
+ .move(this.end
122
+ .clone()
123
+ .move(this.begin
124
+ .clone()
125
+ .minus())
126
+ .abs()
127
+ .minus()
128
+ .divide(2));
129
+ },
130
+ enumerable: false,
131
+ configurable: true
132
+ });
133
+ Object.defineProperty(DLine.prototype, "minX", {
134
+ get: function () {
135
+ return Math.min(this.begin.x, this.end.x);
136
+ },
137
+ enumerable: false,
138
+ configurable: true
139
+ });
140
+ Object.defineProperty(DLine.prototype, "minY", {
141
+ get: function () {
142
+ return Math.min(this.begin.y, this.end.y);
143
+ },
144
+ enumerable: false,
145
+ configurable: true
146
+ });
147
+ Object.defineProperty(DLine.prototype, "maxX", {
148
+ get: function () {
149
+ return Math.max(this.begin.x, this.end.x);
150
+ },
151
+ enumerable: false,
152
+ configurable: true
153
+ });
154
+ Object.defineProperty(DLine.prototype, "maxY", {
155
+ get: function () {
156
+ return Math.max(this.begin.y, this.end.y);
157
+ },
158
+ enumerable: false,
159
+ configurable: true
160
+ });
161
+ DLine.prototype.toString = function () {
162
+ return "(".concat(this.a, ", ").concat(this.b, ", ").concat(this.c, ")");
163
+ };
164
+ DLine.prototype.getValue = function () {
165
+ return [this.a, this.b, this.c];
166
+ };
167
+ DLine.prototype.x = function (p) {
168
+ if (this.isParallelY) {
169
+ return new DPoint_1.DPoint(-this.c / this.a, p.y);
170
+ }
171
+ if (this.isParallelX) {
172
+ return new DPoint_1.DPoint(p.x, -this.c / this.b);
173
+ }
174
+ return new DPoint_1.DPoint(-this.b / this.a * p.y - this.c / this.a, p.y);
175
+ };
176
+ DLine.prototype.y = function (p) {
177
+ if (this.isParallelY) {
178
+ return new DPoint_1.DPoint(-this.c / this.a, p.y);
179
+ }
180
+ if (this.isParallelX) {
181
+ return new DPoint_1.DPoint(p.x, -this.c / this.b);
182
+ }
183
+ return new DPoint_1.DPoint(p.x, -this.a / this.b * p.x - this.c / this.b);
184
+ };
185
+ DLine.prototype.findPoint = function (l) {
186
+ if (this.isParallelY && l.isParallelY) {
187
+ return null;
188
+ }
189
+ if (this.isParallelX && l.isParallelX) {
190
+ return null;
191
+ }
192
+ if (this.isParallelX && l.isParallelY) {
193
+ return new DPoint_1.DPoint(-l.c / l.a, -this.c / this.b);
194
+ }
195
+ if (this.isParallelY && l.isParallelX) {
196
+ return new DPoint_1.DPoint(-this.c / this.a, -l.c / l.b);
197
+ }
198
+ if (this.isParallelY) {
199
+ var x = -this.c / this.a;
200
+ return l.y(new DPoint_1.DPoint(x));
201
+ }
202
+ if (this.isParallelX) {
203
+ var y = -this.c / this.b;
204
+ return l.x(new DPoint_1.DPoint(0, y));
205
+ }
206
+ if (l.isParallelY) {
207
+ var x = -l.c / l.a;
208
+ return this.y(new DPoint_1.DPoint(x));
209
+ }
210
+ if (l.isParallelX) {
211
+ var y = -l.c / l.b;
212
+ return this.x(new DPoint_1.DPoint(0, y));
213
+ }
214
+ var res = this.y(new DPoint_1.DPoint((l.c / l.b - this.c / this.b) / (this.a / this.b - l.a / l.b)));
215
+ if (!isFinite(res.x) && !isFinite(res.y)) {
216
+ return null;
217
+ }
218
+ return res;
219
+ };
220
+ Object.defineProperty(DLine.prototype, "isParallel", {
221
+ get: function () {
222
+ return this.isParallelX || this.isParallelY;
223
+ },
224
+ enumerable: false,
225
+ configurable: true
226
+ });
227
+ Object.defineProperty(DLine.prototype, "isParallelY", {
228
+ get: function () {
229
+ return Math.abs(this.b) < 0.001;
230
+ },
231
+ enumerable: false,
232
+ configurable: true
233
+ });
234
+ Object.defineProperty(DLine.prototype, "isParallelX", {
235
+ get: function () {
236
+ return Math.abs(this.a) < 0.001;
237
+ },
238
+ enumerable: false,
239
+ configurable: true
240
+ });
241
+ Object.defineProperty(DLine.prototype, "points", {
242
+ get: function () {
243
+ return [this.begin, this.end];
244
+ },
245
+ enumerable: false,
246
+ configurable: true
247
+ });
248
+ DLine.prototype.getFi = function () {
249
+ (0, utils_1.checkFunction)('getFi')
250
+ .checkArgument('this.begin')
251
+ .shouldBeMeters(this.begin)
252
+ .checkArgument('this.end')
253
+ .shouldBeMeters(this.end);
254
+ var _a = this.end.clone().move(this.begin.clone().minus()), x = _a.x, y = _a.y;
255
+ var v = Math.atan2(y, x) - Math.PI;
256
+ if (v > 0) {
257
+ v = Math.PI - v;
258
+ }
259
+ return (Math.PI - v) % (Math.PI * 2);
260
+ };
261
+ DLine.prototype.toWKT = function () {
262
+ var _a = this, _b = _a.begin, x1 = _b.x, y1 = _b.y, _c = _a.end, x2 = _c.x, y2 = _c.y;
263
+ return "LINESTRING (".concat(x1, " ").concat(y1, ", ").concat(x2, " ").concat(y2, ")");
264
+ };
265
+ DLine.prototype.movePoint = function (i, k) {
266
+ var isArray = Array.isArray(i);
267
+ var p = isArray ? i : [i];
268
+ var d = (isArray ? k : [k]);
269
+ var fi = this.findFi(new DLine(1, 0, 0));
270
+ var td = this.x(new DPoint_1.DPoint(1, 1)).distance(this.x(new DPoint_1.DPoint(2, 2))) / 2;
271
+ var sinCos = new DPoint_1.DPoint(Math.sin(fi), Math.cos(fi));
272
+ var dt = sinCos.clone().scale(td);
273
+ var p1T = p[0].clone().move(dt.clone().minus());
274
+ var p2T = p[0].clone().move(dt);
275
+ var res = [];
276
+ if (DNumbers_1.DNumbers.like(this.y(p1T).y, p1T.y) || DNumbers_1.DNumbers.like(this.y(p2T).y, p2T.y)) {
277
+ res = p.map(function (t, index) { return t.clone()
278
+ .move(sinCos.clone().scale(d[index])); });
279
+ }
280
+ else {
281
+ res = p.map(function (t, index) { return t.clone()
282
+ .move(sinCos.clone().scale(d[index])
283
+ .setX(function (_a) {
284
+ var x = _a.x;
285
+ return -x;
286
+ })); });
287
+ }
288
+ return isArray ? res : res[0];
289
+ };
290
+ DLine.prototype.findFi = function (_a, delta) {
291
+ var a = _a.a, b = _a.b;
292
+ if (delta === void 0) { delta = 1.0001; }
293
+ var _b = this, q = _b.a, w = _b.b;
294
+ var val = (q * a + w * b) / (Math.sqrt(q * q + w * w) * Math.sqrt(a * a + b * b));
295
+ if (val > 1 && val < delta) {
296
+ val = 1;
297
+ }
298
+ else if (val < -1 && val > -delta) {
299
+ val = -1;
300
+ }
301
+ return Math.acos(val);
302
+ };
303
+ DLine.prototype.vectorProduct = function (_a) {
304
+ var a = _a.a, b = _a.b, c = _a.c;
305
+ var _b = this, q = _b.a, w = _b.b, e = _b.c;
306
+ return new DLine(w * c - e * b, e * a - q * c, q * b - w * a);
307
+ };
308
+ return DLine;
309
+ }());
310
+ exports.DLine = DLine;
File without changes
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DNumbers = void 0;
4
+ var DPoint_1 = require("./DPoint");
5
+ var delta = 0.001;
6
+ var DNumbers = (function () {
7
+ function DNumbers() {
8
+ }
9
+ DNumbers.like = function (v, s, d) {
10
+ if (d === void 0) { d = delta; }
11
+ return Math.abs(v - s) < d;
12
+ };
13
+ DNumbers.likeZero = function (v) {
14
+ return DNumbers.like(v, 0);
15
+ };
16
+ DNumbers.like2PI = function (v) {
17
+ return DNumbers.like(DNumbers.rad2Deg(v), DPoint_1.DOUBLE_PI_IN_DEGREE);
18
+ };
19
+ DNumbers.likePI = function (v) {
20
+ return DNumbers.like(DNumbers.rad2Deg(v), DPoint_1.PI_IN_DEGREE);
21
+ };
22
+ DNumbers.rad2Deg = function (v) {
23
+ return v * DPoint_1.DEGREE_TO_PI;
24
+ };
25
+ DNumbers.deg2Rad = function (v) {
26
+ return v * DPoint_1.PI_TO_DEGREE;
27
+ };
28
+ return DNumbers;
29
+ }());
30
+ exports.DNumbers = DNumbers;
File without changes
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.DPlane = void 0;
20
+ var DPoint_1 = require("./DPoint");
21
+ var utils_1 = require("./utils");
22
+ var DNumbers_1 = require("./DNumbers");
23
+ var DPlane = (function () {
24
+ function DPlane(a, b, c, d, p1, p2, p3) {
25
+ if (p1 === void 0) { p1 = DPoint_1.DPoint.zero(); }
26
+ if (p2 === void 0) { p2 = DPoint_1.DPoint.zero(); }
27
+ if (p3 === void 0) { p3 = DPoint_1.DPoint.zero(); }
28
+ this.a = a;
29
+ this.b = b;
30
+ this.c = c;
31
+ this.d = d;
32
+ this.p1 = p1;
33
+ this.p2 = p2;
34
+ this.p3 = p3;
35
+ }
36
+ DPlane.find = function (p1, p2, p3) {
37
+ if (p1.x === p2.x && p2.x === p3.x) {
38
+ return new DPlane(1, 0, 0, -p1.x, p1, p2, p3);
39
+ }
40
+ if (p1.y === p2.y && p2.y === p3.y) {
41
+ return new DPlane(0, 1, 0, -p1.y, p1, p2, p3);
42
+ }
43
+ if (p1.z === p2.z && p2.z === p3.z) {
44
+ return new DPlane(0, 0, 1, -p1.z, p1, p2, p3);
45
+ }
46
+ var d = 1;
47
+ var _a = __read((0, utils_1.gaussianElimination)([
48
+ [p1.x, p1.y, p1.z, -d],
49
+ [p2.x, p2.y, p2.z, -d],
50
+ [p3.x, p3.y, p3.z, -d]
51
+ ]), 3), a = _a[0], b = _a[1], c = _a[2];
52
+ return new DPlane(a, b, c, d, p1, p2, p3);
53
+ };
54
+ DPlane.prototype.x = function (p) {
55
+ var _this = this;
56
+ if (p instanceof DPoint_1.DPoint) {
57
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
58
+ var y = p.y, z = p.z;
59
+ p.x = -(b * y + c * z + d) / a;
60
+ return p;
61
+ }
62
+ return p.map(function (t) { return _this.x(t); });
63
+ };
64
+ DPlane.prototype.y = function (p) {
65
+ var _this = this;
66
+ if (p instanceof DPoint_1.DPoint) {
67
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
68
+ var x = p.x, z = p.z;
69
+ p.y = -(a * x + c * z + d) / b;
70
+ return p;
71
+ }
72
+ return p.map(function (t) { return _this.y(t); });
73
+ };
74
+ DPlane.prototype.z = function (p) {
75
+ var _this = this;
76
+ if (p instanceof DPoint_1.DPoint) {
77
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d;
78
+ var x = p.x, y = p.y;
79
+ p.z = -(a * x + b * y + d) / c;
80
+ return p;
81
+ }
82
+ return p.map(function (t) { return _this.z(t); });
83
+ };
84
+ DPlane.prototype.clone = function () {
85
+ var _a = this, a = _a.a, b = _a.b, c = _a.c, d = _a.d, p1 = _a.p1, p2 = _a.p2, p3 = _a.p3;
86
+ return new DPlane(a, b, c, d, p1, p2, p3);
87
+ };
88
+ DPlane.prototype.distance = function (p) {
89
+ if (p instanceof DPoint_1.DPoint) {
90
+ var x = p.x, y = p.y, z = p.z;
91
+ var _a = this, a_1 = _a.a, b_1 = _a.b, c_1 = _a.c, d_1 = _a.d;
92
+ return Math.abs(a_1 * x + b_1 * y + c_1 * z + d_1) / Math.sqrt(a_1 * a_1 + b_1 * b_1 + c_1 * c_1);
93
+ }
94
+ var _b = p, a = _b.a, b = _b.b, c = _b.c, d = _b.d;
95
+ var r = this.d;
96
+ return Math.abs(d - r) / Math.sqrt(a * a + b * b + c * c);
97
+ };
98
+ DPlane.prototype.equal = function (p) {
99
+ var a = p.a, b = p.b, c = p.c, d = p.d;
100
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
101
+ return DNumbers_1.DNumbers.like(a, q) &&
102
+ DNumbers_1.DNumbers.like(b, w) &&
103
+ DNumbers_1.DNumbers.like(c, e) &&
104
+ DNumbers_1.DNumbers.like(d, r);
105
+ };
106
+ DPlane.prototype.same = function (p) {
107
+ var a = p.a, b = p.b, c = p.c, d = p.d;
108
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
109
+ var t = a / q;
110
+ var y = b / w;
111
+ var u = c / e;
112
+ var i = d / r;
113
+ return DNumbers_1.DNumbers.like(t, y) &&
114
+ DNumbers_1.DNumbers.like(t, u) &&
115
+ DNumbers_1.DNumbers.like(t, c) &&
116
+ DNumbers_1.DNumbers.like(t, i);
117
+ };
118
+ DPlane.prototype.parallel = function (p) {
119
+ var a = p.a, b = p.b, c = p.c, d = p.d;
120
+ var _a = this, q = _a.a, w = _a.b, e = _a.c, r = _a.d;
121
+ var t = a / q;
122
+ var y = b / w;
123
+ var u = c / e;
124
+ var i = d / r;
125
+ return DNumbers_1.DNumbers.like(t, y) &&
126
+ DNumbers_1.DNumbers.like(t, u) &&
127
+ DNumbers_1.DNumbers.like(t, c) &&
128
+ !DNumbers_1.DNumbers.like(t, i);
129
+ };
130
+ return DPlane;
131
+ }());
132
+ exports.DPlane = DPlane;
@@ -27,7 +27,9 @@ export declare class DPoint {
27
27
  static parse(c: LatLng | number[] | DCoord): DPoint;
28
28
  static parseFromWKT(wkt: string): DPoint;
29
29
  static random(): DPoint;
30
+ static getTileFromQuadKey(quadKey: string): DPoint;
30
31
  getTileFromCoords(zoom?: number): DPoint;
32
+ getQuadKeyFromTile(zoom?: number): string;
31
33
  getCoordsFromTile(zoom?: number): DPoint;
32
34
  toCoords(): DCoord;
33
35
  findLine(p: DPoint): DLine;