nodes2ts 3.0.0 → 4.0.1

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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -15
  3. package/dist/export.cjs +5350 -0
  4. package/dist/export.cjs.map +1 -0
  5. package/dist/export.d.cts +1847 -0
  6. package/dist/export.d.ts +1837 -20
  7. package/dist/export.js +5299 -62
  8. package/dist/export.js.map +1 -1
  9. package/package.json +34 -55
  10. package/.eslintignore +0 -3
  11. package/.eslintrc.cjs +0 -11
  12. package/.github/workflows/lint.js.yml +0 -22
  13. package/.github/workflows/node.js.yml +0 -22
  14. package/.mocharc.js +0 -7
  15. package/dist/Interval.d.ts +0 -24
  16. package/dist/Interval.js +0 -23
  17. package/dist/Interval.js.map +0 -1
  18. package/dist/MutableInteger.d.ts +0 -4
  19. package/dist/MutableInteger.js +0 -10
  20. package/dist/MutableInteger.js.map +0 -1
  21. package/dist/Platform.d.ts +0 -15
  22. package/dist/Platform.js +0 -53
  23. package/dist/Platform.js.map +0 -1
  24. package/dist/R1Interval.d.ts +0 -76
  25. package/dist/R1Interval.js +0 -158
  26. package/dist/R1Interval.js.map +0 -1
  27. package/dist/R2Vector.d.ts +0 -34
  28. package/dist/R2Vector.js +0 -131
  29. package/dist/R2Vector.js.map +0 -1
  30. package/dist/S1Angle.d.ts +0 -60
  31. package/dist/S1Angle.js +0 -133
  32. package/dist/S1Angle.js.map +0 -1
  33. package/dist/S1ChordAngle.d.ts +0 -166
  34. package/dist/S1ChordAngle.js +0 -318
  35. package/dist/S1ChordAngle.js.map +0 -1
  36. package/dist/S1Interval.d.ts +0 -109
  37. package/dist/S1Interval.js +0 -398
  38. package/dist/S1Interval.js.map +0 -1
  39. package/dist/S2.d.ts +0 -96
  40. package/dist/S2.js +0 -231
  41. package/dist/S2.js.map +0 -1
  42. package/dist/S2Cap.d.ts +0 -122
  43. package/dist/S2Cap.js +0 -399
  44. package/dist/S2Cap.js.map +0 -1
  45. package/dist/S2Cell.d.ts +0 -106
  46. package/dist/S2Cell.js +0 -358
  47. package/dist/S2Cell.js.map +0 -1
  48. package/dist/S2CellId.d.ts +0 -290
  49. package/dist/S2CellId.js +0 -983
  50. package/dist/S2CellId.js.map +0 -1
  51. package/dist/S2CellUnion.d.ts +0 -179
  52. package/dist/S2CellUnion.js +0 -523
  53. package/dist/S2CellUnion.js.map +0 -1
  54. package/dist/S2EdgeUtil.d.ts +0 -17
  55. package/dist/S2EdgeUtil.js +0 -785
  56. package/dist/S2EdgeUtil.js.map +0 -1
  57. package/dist/S2LatLng.d.ts +0 -77
  58. package/dist/S2LatLng.js +0 -186
  59. package/dist/S2LatLng.js.map +0 -1
  60. package/dist/S2LatLngRect.d.ts +0 -190
  61. package/dist/S2LatLngRect.js +0 -624
  62. package/dist/S2LatLngRect.js.map +0 -1
  63. package/dist/S2Metric.d.ts +0 -38
  64. package/dist/S2Metric.js +0 -79
  65. package/dist/S2Metric.js.map +0 -1
  66. package/dist/S2Point.d.ts +0 -78
  67. package/dist/S2Point.js +0 -250
  68. package/dist/S2Point.js.map +0 -1
  69. package/dist/S2Projections.d.ts +0 -102
  70. package/dist/S2Projections.js +0 -331
  71. package/dist/S2Projections.js.map +0 -1
  72. package/dist/S2Region.d.ts +0 -31
  73. package/dist/S2Region.js +0 -18
  74. package/dist/S2Region.js.map +0 -1
  75. package/dist/S2RegionCoverer.d.ts +0 -186
  76. package/dist/S2RegionCoverer.js +0 -471
  77. package/dist/S2RegionCoverer.js.map +0 -1
  78. package/dist/utils/preconditions.d.ts +0 -2
  79. package/dist/utils/preconditions.js +0 -16
  80. package/dist/utils/preconditions.js.map +0 -1
package/dist/S2Cap.js DELETED
@@ -1,399 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright 2005 Google Inc.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.S2Cap = void 0;
19
- const S2_1 = require("./S2");
20
- const S2Point_1 = require("./S2Point");
21
- const S1Angle_1 = require("./S1Angle");
22
- const S2LatLngRect_1 = require("./S2LatLngRect");
23
- const S2LatLng_1 = require("./S2LatLng");
24
- const R1Interval_1 = require("./R1Interval");
25
- const S1Interval_1 = require("./S1Interval");
26
- const S1ChordAngle_1 = require("./S1ChordAngle");
27
- const Platform_1 = require("./Platform");
28
- const Long = require("long");
29
- /**
30
- * This class represents a spherical cap, i.e. a portion of a sphere cut off by
31
- * a plane. The cap is defined by its axis and height. This representation has
32
- * good numerical accuracy for very small caps (unlike the (axis,
33
- * min-distance-from-origin) representation), and is also efficient for
34
- * containment tests (unlike the (axis, angle) representation).
35
- *
36
- * Here are some useful relationships between the cap height (h), the cap
37
- * opening angle (theta), the maximum chord length from the cap's center (d),
38
- * and the radius of cap's base (a). All formulas assume a unit radius.
39
- *
40
- * h = 1 - cos(theta) = 2 sin^2(theta/2) d^2 = 2 h = a^2 + h^2
41
- *
42
- */
43
- class S2Cap {
44
- /**
45
- * Create a cap given its axis and the cap height, i.e. the maximum projected
46
- * distance along the cap axis from the cap center. 'axis' should be a
47
- * unit-length vector.
48
- */
49
- constructor(axis, radius) {
50
- this.axis = axis;
51
- this.radius = radius;
52
- // assert (isValid());
53
- }
54
- static fromAxisChord(center, radius) {
55
- return new S2Cap(center, radius);
56
- }
57
- /**
58
- * Create a cap given its axis and the cap height, i.e. the maximum projected distance along the
59
- * cap axis from the cap center. 'axis' should be a unit-length vector.
60
- */
61
- static fromAxisHeight(axis, height) {
62
- // assert (S2.isUnitLength(axis));
63
- return new S2Cap(axis, S1ChordAngle_1.S1ChordAngle.fromLength2(2 * height));
64
- }
65
- /**
66
- * Create a cap given its axis and the cap opening angle, i.e. maximum angle
67
- * between the axis and a point on the cap. 'axis' should be a unit-length
68
- * vector, and 'angle' should be between 0 and 180 degrees.
69
- */
70
- static fromAxisAngle(axis, angle) {
71
- // The "min" calculation below is necessary to handle S1Angle.INFINITY.
72
- // assert (S2.isUnitLength(axis));
73
- return this.fromAxisChord(axis, S1ChordAngle_1.S1ChordAngle.fromS1Angle(S1Angle_1.S1Angle.radians(Math.min(angle.radians, S2_1.S2.M_PI))));
74
- }
75
- /**
76
- * Create a cap given its axis and its area in steradians. 'axis' should be a unit-length vector,
77
- * and 'area' should be between 0 and 4 * M_PI.
78
- */
79
- static fromAxisArea(axis, area) {
80
- // assert (S2.isUnitLength(axis));
81
- return new S2Cap(axis, S1ChordAngle_1.S1ChordAngle.fromLength2(area / S2_1.S2.M_PI));
82
- }
83
- /** Return an empty cap, i.e. a cap that contains no points. */
84
- static empty() {
85
- return new S2Cap(S2Point_1.S2Point.X_POS, S1ChordAngle_1.S1ChordAngle.NEGATIVE);
86
- }
87
- /** Return a full cap, i.e. a cap that contains all points. */
88
- static full() {
89
- return new S2Cap(S2Point_1.S2Point.X_POS, S1ChordAngle_1.S1ChordAngle.STRAIGHT);
90
- }
91
- getCapBound() {
92
- return this;
93
- }
94
- height() {
95
- return 0.5 * this.radius.getLength2();
96
- }
97
- area() {
98
- return 2 * S2_1.S2.M_PI * Math.max(0.0, this.height());
99
- }
100
- /**
101
- * Returns the cap radius as an S1Angle. Since the cap angle is stored internally as an
102
- * S1ChordAngle, this method requires a trigonometric operation and may yield a slightly different
103
- * result than the value passed to {@link #fromAxisAngle(S2Point, S1Angle)}.
104
- */
105
- angle() {
106
- return this.radius.toAngle();
107
- }
108
- /**
109
- * Returns true if the axis is {@link S2#isUnitLength unit length}, and the angle is less than Pi.
110
- *
111
- * <p>Negative angles or heights are valid, and represent empty caps.
112
- */
113
- isValid() {
114
- return S2_1.S2.isUnitLength(this.axis) && this.radius.getLength2() <= 4;
115
- }
116
- /** Return true if the cap is empty, i.e. it contains no points. */
117
- isEmpty() {
118
- return this.radius.isNegative();
119
- }
120
- /** Return true if the cap is full, i.e. it contains all points. */
121
- isFull() {
122
- return S1ChordAngle_1.S1ChordAngle.STRAIGHT.equals(this.radius);
123
- }
124
- /**
125
- * Return the complement of the interior of the cap. A cap and its complement have the same
126
- * boundary but do not share any interior points. The complement operator is not a bijection,
127
- * since the complement of a singleton cap (containing a single point) is the same as the
128
- * complement of an empty cap.
129
- */
130
- complement() {
131
- // The complement of a full cap is an empty cap, not a singleton.
132
- // Also make sure that the complement of an empty cap is full.
133
- if (this.isFull()) {
134
- return S2Cap.empty();
135
- }
136
- if (this.isEmpty()) {
137
- return S2Cap.full();
138
- }
139
- return S2Cap.fromAxisChord(S2Point_1.S2Point.neg(this.axis), S1ChordAngle_1.S1ChordAngle.fromLength2(4 - this.radius.getLength2()));
140
- }
141
- /**
142
- * Return true if and only if this cap contains the given other cap (in a set
143
- * containment sense, e.g. every cap contains the empty cap).
144
- */
145
- containsCap(other) {
146
- if (this.isFull() || other.isEmpty()) {
147
- return true;
148
- }
149
- else {
150
- const axialDistance = S1ChordAngle_1.S1ChordAngle.fromS2Point(this.axis, other.axis);
151
- return this.radius.compareTo(S1ChordAngle_1.S1ChordAngle.add(axialDistance, other.radius)) >= 0;
152
- }
153
- }
154
- /**
155
- * Return true if and only if the interior of this cap intersects the given other cap. (This
156
- * relationship is not symmetric, since only the interior of this cap is used.)
157
- */
158
- interiorIntersects(other) {
159
- // Interior(X) intersects Y if and only if Complement(Interior(X))
160
- // does not contain Y.
161
- return !this.complement().containsCap(other);
162
- }
163
- /**
164
- * Return true if and only if the given point is contained in the interior of the region (i.e. the
165
- * region excluding its boundary). 'p' should be a unit-length vector.
166
- */
167
- interiorContains(p) {
168
- // assert (S2.isUnitLength(p));
169
- return this.isFull() || S1ChordAngle_1.S1ChordAngle.fromS2Point(this.axis, p).compareTo(this.radius) < 0;
170
- }
171
- /**
172
- * Increase the cap radius if necessary to include the given point. If the cap is empty the axis
173
- * is set to the given point, but otherwise it is left unchanged.
174
- *
175
- * @param p must be {@link S2#isUnitLength unit length}
176
- */
177
- addPoint(p) {
178
- // assert (S2.isUnitLength(p));
179
- if (this.isEmpty()) {
180
- return new S2Cap(p, S1ChordAngle_1.S1ChordAngle.ZERO);
181
- }
182
- else {
183
- // After adding p to this cap, we require that the result contains p. However we don't need to
184
- // do anything special to achieve this because contains() does exactly the same distance
185
- // calculation that we do here.
186
- return new S2Cap(this.axis, S1ChordAngle_1.S1ChordAngle.fromLength2(Math.max(this.radius.getLength2(), this.axis.getDistance2(p))));
187
- }
188
- }
189
- // Increase the cap height if necessary to include "other". If the current
190
- // cap is empty it is set to the given other cap.
191
- addCap(other) {
192
- if (this.isEmpty()) {
193
- return other;
194
- }
195
- else if (other.isEmpty()) {
196
- return this;
197
- }
198
- else {
199
- // We round up the distance to ensure that the cap is actually contained.
200
- // TODO(user): Do some error analysis in order to guarantee this.
201
- const dist = S1ChordAngle_1.S1ChordAngle.add(S1ChordAngle_1.S1ChordAngle.fromS2Point(this.axis, other.axis), other.radius);
202
- const roundedUp = dist.plusError(S2_1.S2.DBL_EPSILON * dist.getLength2());
203
- return new S2Cap(this.axis, S1ChordAngle_1.S1ChordAngle.max(this.radius, roundedUp));
204
- }
205
- }
206
- // //////////////////////////////////////////////////////////////////////
207
- // S2Region interface (see {@code S2Region} for details):
208
- getRectBound() {
209
- if (this.isEmpty()) {
210
- return S2LatLngRect_1.S2LatLngRect.empty();
211
- }
212
- if (this.isFull()) {
213
- return S2LatLngRect_1.S2LatLngRect.full();
214
- }
215
- // Convert the axis to a (lat,lng) pair, and compute the cap angle.
216
- const axisLatLng = S2LatLng_1.S2LatLng.fromPoint(this.axis);
217
- const capAngle = this.angle().radians;
218
- let allLongitudes = false;
219
- const lat = [];
220
- const lng = [];
221
- lng[0] = -S2_1.S2.M_PI;
222
- lng[1] = S2_1.S2.M_PI;
223
- // Check whether cap includes the south pole.
224
- lat[0] = axisLatLng.lat().radians - capAngle;
225
- if (lat[0] <= -S2_1.S2.M_PI_2) {
226
- lat[0] = -S2_1.S2.M_PI_2;
227
- allLongitudes = true;
228
- }
229
- // Check whether cap includes the north pole.
230
- lat[1] = axisLatLng.lat().radians + capAngle;
231
- if (lat[1] >= S2_1.S2.M_PI_2) {
232
- lat[1] = S2_1.S2.M_PI_2;
233
- allLongitudes = true;
234
- }
235
- if (!allLongitudes) {
236
- // Compute the range of longitudes covered by the cap. We use the law
237
- // of sines for spherical triangles. Consider the triangle ABC where
238
- // A is the north pole, B is the center of the cap, and C is the point
239
- // of tangency between the cap boundary and a line of longitude. Then
240
- // C is a right angle, and letting a,b,c denote the sides opposite A,B,C,
241
- // we have sin(a)/sin(A) = sin(c)/sin(C), or sin(A) = sin(a)/sin(c).
242
- // Here "a" is the cap angle, and "c" is the colatitude (90 degrees
243
- // minus the latitude). This formula also works for negative latitudes.
244
- const sinA = S1ChordAngle_1.S1ChordAngle.sin(this.radius);
245
- const sinC = Math.cos(axisLatLng.lat().radians);
246
- if (sinA <= sinC) {
247
- const angleA = Math.asin(sinA / sinC);
248
- lng[0] = Platform_1.Platform.IEEEremainder(axisLatLng.lng().radians - angleA, 2 * S2_1.S2.M_PI);
249
- lng[1] = Platform_1.Platform.IEEEremainder(axisLatLng.lng().radians + angleA, 2 * S2_1.S2.M_PI);
250
- }
251
- }
252
- return new S2LatLngRect_1.S2LatLngRect(new R1Interval_1.R1Interval(lat[0], lat[1]), new S1Interval_1.S1Interval(lng[0], lng[1]));
253
- }
254
- // public mayIntersectC(cell:S2Cell):boolean {
255
- // const toRet = this._mayIntersectC(cell);
256
- // console.log("intersects? ",toRet, cell.id.pos().toString(16), cell.level);
257
- // return toRet;
258
- // }
259
- mayIntersectC(cell) {
260
- // If the cap contains any cell vertex, return true.
261
- const vertices = new Array(4);
262
- for (let k = 0; k < 4; ++k) {
263
- vertices[k] = cell.getVertex(k);
264
- if (this.contains(vertices[k])) {
265
- return true;
266
- }
267
- }
268
- return this.intersects(cell, vertices);
269
- }
270
- /**
271
- * Return true if the cap intersects 'cell', given that the cap vertices have
272
- * alrady been checked.
273
- */
274
- intersects(cell, vertices) {
275
- // Return true if this cap intersects any point of 'cell' excluding its
276
- // vertices (which are assumed to already have been checked).
277
- // If the cap is a hemisphere or larger, the cell and the complement of the
278
- // cap are both convex. Therefore since no vertex of the cell is contained,
279
- // no other interior point of the cell is contained either.
280
- if (this.radius.compareTo(S1ChordAngle_1.S1ChordAngle.RIGHT) >= 0) {
281
- return false;
282
- }
283
- // We need to check for empty caps due to the axis check just below.
284
- if (this.isEmpty()) {
285
- return false;
286
- }
287
- // Optimization: return true if the cell contains the cap axis. (This
288
- // allows half of the edge checks below to be skipped.)
289
- if (cell.contains(this.axis)) {
290
- return true;
291
- }
292
- // At this point we know that the cell does not contain the cap axis,
293
- // and the cap does not contain any cell vertex. The only way that they
294
- // can intersect is if the cap intersects the interior of some edge.
295
- const sin2Angle = S1ChordAngle_1.S1ChordAngle.sin2(this.radius);
296
- for (let k = 0; k < 4; ++k) {
297
- const edge = cell.getEdgeRaw(k);
298
- const dot = this.axis.dotProd(edge);
299
- if (dot > 0) {
300
- // The axis is in the interior half-space defined by the edge. We don't
301
- // need to consider these edges, since if the cap intersects this edge
302
- // then it also intersects the edge on the opposite side of the cell
303
- // (because we know the axis is not contained with the cell).
304
- continue;
305
- }
306
- // The Norm2() factor is necessary because "edge" is not normalized.
307
- if (dot * dot > sin2Angle * edge.norm2()) {
308
- return false; // Entire cap is on the exterior side of this edge.
309
- }
310
- // Otherwise, the great circle containing this edge intersects
311
- // the interior of the cap. We just need to check whether the point
312
- // of closest approach occurs between the two edge endpoints.
313
- const dir = S2Point_1.S2Point.crossProd(edge, this.axis);
314
- if (dir.dotProd(vertices[k]) < 0 && dir.dotProd(vertices[(k + 1) & 3]) > 0) {
315
- return true;
316
- }
317
- }
318
- return false;
319
- }
320
- contains(p) {
321
- // The point 'p' should be a unit-length vector.
322
- // assert (S2.isUnitLength(p));
323
- return S1ChordAngle_1.S1ChordAngle.fromS2Point(this.axis, p).compareTo(this.radius) <= 0;
324
- }
325
- containsC(cell) {
326
- // If the cap does not contain all cell vertices, return false.
327
- // We check the vertices before taking the Complement() because we can't
328
- // accurately represent the complement of a very small cap (a height
329
- // of 2-epsilon is rounded off to 2).
330
- const vertices = [];
331
- for (let k = 0; k < 4; ++k) {
332
- vertices[k] = cell.getVertex(k);
333
- if (!this.contains(vertices[k])) {
334
- return false;
335
- }
336
- }
337
- // Otherwise, return true if the complement of the cap does not intersect
338
- // the cell. (This test is slightly conservative, because technically we
339
- // want Complement().InteriorIntersects() here.)
340
- return !this.complement().intersects(cell, vertices);
341
- }
342
- //
343
- // /** Return true if two caps are identical. */
344
- // public equals(that:Object ):boolean {
345
- //
346
- // if (!(that instanceof S2Cap)) {
347
- // return false;
348
- // }
349
- //
350
- // S2Cap other = (S2Cap) that;
351
- // return (this.axis.equals(other.axis) && this.height == other.height)
352
- // || (isEmpty() && other.isEmpty()) || (isFull() && other.isFull());
353
- //
354
- // }
355
- //
356
- // @Override
357
- // public int hashCode() {
358
- // if (isFull()) {
359
- // return 17;
360
- // } else if (isEmpty()) {
361
- // return 37;
362
- // }
363
- // int result = 17;
364
- // result = 37 * result + this.axis.hashCode();
365
- // long heightBits = Double.doubleToLongBits(this.height);
366
- // result = 37 * result + (int) ((heightBits >>> 32) ^ heightBits);
367
- // return result;
368
- // }
369
- // /////////////////////////////////////////////////////////////////////
370
- // The following static methods are convenience functions for assertions
371
- // and testing purposes only.
372
- /**
373
- * Return true if the cap axis and height differ by at most "max_error" from
374
- * the given cap "other".
375
- */
376
- approxEquals(other, maxError = 1e-14) {
377
- const r2 = this.radius.getLength2();
378
- const otherR2 = other.radius.getLength2();
379
- return (S2_1.S2.approxEqualsPointError(this.axis, other.axis, maxError) && Math.abs(r2 - otherR2) <= maxError)
380
- || (this.isEmpty() && otherR2 <= maxError)
381
- || (other.isEmpty() && r2 <= maxError)
382
- || (this.isFull() && otherR2 >= 2 - maxError)
383
- || (other.isFull() && r2 >= 2 - maxError);
384
- }
385
- toString() {
386
- return "[Point = " + this.axis + " Radius = " + this.radius + "]";
387
- }
388
- toGEOJSON() {
389
- return this.getRectBound().toGEOJSON();
390
- }
391
- }
392
- exports.S2Cap = S2Cap;
393
- /**
394
- * Multiply a positive number by this constant to ensure that the result of a
395
- * floating point operation is at least as large as the true
396
- * infinite-precision result.
397
- */
398
- S2Cap.ROUND_UP = 1 / new Long(1).shiftLeft(52).toNumber() + 1;
399
- //# sourceMappingURL=S2Cap.js.map
package/dist/S2Cap.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"S2Cap.js","sourceRoot":"","sources":["../src/S2Cap.ts"],"names":[],"mappings":"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"}
package/dist/S2Cell.d.ts DELETED
@@ -1,106 +0,0 @@
1
- import { S2CellId } from "./S2CellId";
2
- import { S2Point } from "./S2Point";
3
- import { S2LatLng } from "./S2LatLng";
4
- import { R2Vector } from "./R2Vector";
5
- import { S2LatLngRect } from "./S2LatLngRect";
6
- import { S2Cap } from "./S2Cap";
7
- export declare class S2Cell {
8
- private cellID?;
9
- private static MAX_CELL_SIZE;
10
- private _face;
11
- private _level;
12
- private _orientation;
13
- private uMin;
14
- private uMax;
15
- private vMin;
16
- private vMax;
17
- constructor(cellID?: S2CellId);
18
- get id(): S2CellId;
19
- static fromFace(face: number): S2Cell;
20
- static fromFacePosLevel(face: number, pos: number, level: number): S2Cell;
21
- static fromPoint(p: S2Point): S2Cell;
22
- static fromLatLng(ll: S2LatLng): S2Cell;
23
- isLeaf(): boolean;
24
- getVertex(k: number): S2Point;
25
- /**
26
- * Return the k-th vertex of the cell (k = 0,1,2,3). Vertices are returned in
27
- * CCW order. The points returned by GetVertexRaw are not necessarily unit
28
- * length.
29
- */
30
- getVertexRaw(k: number): S2Point;
31
- getEdge(k: number): S2Point;
32
- getEdgeRaw(k: number): S2Point;
33
- /**
34
- * Return the inward-facing normal of the great circle passing through the
35
- * edge from vertex k to vertex k+1 (mod 4). The normals returned by
36
- * GetEdgeRaw are not necessarily unit length.
37
- *
38
- * If this is not a leaf cell, set children[0..3] to the four children of
39
- * this cell (in traversal order) and return true. Otherwise returns false.
40
- * This method is equivalent to the following:
41
- *
42
- * for (pos=0, id=child_begin(); id != child_end(); id = id.next(), ++pos)
43
- * children[i] = S2Cell(id);
44
- *
45
- * except that it is more than two times faster.
46
- */
47
- subdivide(): S2Cell[];
48
- /**
49
- * Return the direction vector corresponding to the center in (s,t)-space of
50
- * the given cell. This is the point at which the cell is divided into four
51
- * subcells; it is not necessarily the centroid of the cell in (u,v)-space or
52
- * (x,y,z)-space. The point returned by GetCenterRaw is not necessarily unit
53
- * length.
54
- */
55
- getCenter(): S2Point;
56
- getCenterRaw(): S2Point;
57
- /**
58
- * Return the center of the cell in (u,v) coordinates (see {@code
59
- * S2Projections}). Note that the center of the cell is defined as the point
60
- * at which it is recursively subdivided into four children; in general, it is
61
- * not at the midpoint of the (u,v) rectangle covered by the cell
62
- */
63
- getCenterUV(): R2Vector;
64
- /**
65
- * Return the average area of cells at this level. This is accurate to within
66
- * a factor of 1.7 (for S2_QUADRATIC_PROJECTION) and is extremely cheap to
67
- * compute.
68
- */
69
- static averageArea(level: any): number;
70
- /**
71
- * Return the average area of cells at this level. This is accurate to within
72
- * a factor of 1.7 (for S2_QUADRATIC_PROJECTION) and is extremely cheap to
73
- * compute.
74
- */
75
- averageArea(): number;
76
- /**
77
- * Return the approximate area of this cell. This method is accurate to within
78
- * 3% percent for all cell sizes and accurate to within 0.1% for cells at
79
- * level 5 or higher (i.e. 300km square or smaller). It is moderately cheap to
80
- * compute.
81
- */
82
- approxArea(): number;
83
- exactArea(): number;
84
- getCapBound(): S2Cap;
85
- private static MAX_ERROR;
86
- private static POLE_MIN_LAT;
87
- private getPoint;
88
- getRectBound(): S2LatLngRect;
89
- mayIntersectC(cell: S2Cell): boolean;
90
- contains(p: S2Point): boolean;
91
- containsC(cell: S2Cell): boolean;
92
- private init;
93
- get face(): number;
94
- get orientation(): number;
95
- get level(): number;
96
- toString(): string;
97
- toGEOJSON(): {
98
- type: string;
99
- geometry: {
100
- type: string;
101
- coordinates: number[][][];
102
- };
103
- properties: {};
104
- title: string;
105
- };
106
- }