@konfirm/geojson 1.0.0 → 1.0.1-beta.0

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 (127) hide show
  1. package/README.md +7 -7
  2. package/dist/{geojson.d.ts → main.d.mts} +18 -79
  3. package/dist/main.d.ts +137 -15
  4. package/dist/main.global.js +853 -0
  5. package/dist/main.global.js.map +1 -0
  6. package/dist/main.js +824 -0
  7. package/dist/main.js.map +1 -0
  8. package/dist/main.mjs +772 -0
  9. package/dist/main.mjs.map +1 -0
  10. package/package.json +101 -63
  11. package/.editorconfig +0 -16
  12. package/.github/workflows/release.yml +0 -21
  13. package/.github/workflows/tests.yml +0 -56
  14. package/CHANGELOG.md +0 -21
  15. package/dist/Domain/Constants.d.ts +0 -5
  16. package/dist/Domain/GeoJSON/Concept/Altitude.d.ts +0 -3
  17. package/dist/Domain/GeoJSON/Concept/BoundingBox.d.ts +0 -6
  18. package/dist/Domain/GeoJSON/Concept/ExteriorRing.d.ts +0 -4
  19. package/dist/Domain/GeoJSON/Concept/GeoJSONObject.d.ts +0 -11
  20. package/dist/Domain/GeoJSON/Concept/InteriorRing.d.ts +0 -4
  21. package/dist/Domain/GeoJSON/Concept/Latitude.d.ts +0 -3
  22. package/dist/Domain/GeoJSON/Concept/LinearRing.d.ts +0 -4
  23. package/dist/Domain/GeoJSON/Concept/Longitude.d.ts +0 -3
  24. package/dist/Domain/GeoJSON/Concept/Position.d.ts +0 -7
  25. package/dist/Domain/GeoJSON/Feature.d.ts +0 -12
  26. package/dist/Domain/GeoJSON/FeatureCollection.d.ts +0 -8
  27. package/dist/Domain/GeoJSON/GeoJSON.d.ts +0 -7
  28. package/dist/Domain/GeoJSON/Geometry/LineString.d.ts +0 -11
  29. package/dist/Domain/GeoJSON/Geometry/MultiLineString.d.ts +0 -7
  30. package/dist/Domain/GeoJSON/Geometry/MultiPoint.d.ts +0 -8
  31. package/dist/Domain/GeoJSON/Geometry/MultiPolygon.d.ts +0 -7
  32. package/dist/Domain/GeoJSON/Geometry/Point.d.ts +0 -11
  33. package/dist/Domain/GeoJSON/Geometry/Polygon.d.ts +0 -11
  34. package/dist/Domain/GeoJSON/Geometry.d.ts +0 -9
  35. package/dist/Domain/GeoJSON/GeometryCollection.d.ts +0 -8
  36. package/dist/Domain/GeoJSON/GeometryObject.d.ts +0 -12
  37. package/dist/Domain/Guards/Number.d.ts +0 -3
  38. package/dist/Domain/Guards/Tuple.d.ts +0 -3
  39. package/dist/Domain/Iterator/IterablePair.d.ts +0 -32
  40. package/dist/Domain/Iterator/SimpleGeometry.d.ts +0 -90
  41. package/dist/Domain/Utility/Calculate.d.ts +0 -9
  42. package/dist/Domain/Utility/Distance.d.ts +0 -3
  43. package/dist/Domain/Utility/Intersect.d.ts +0 -2
  44. package/dist/Domain/Utility/Segments.d.ts +0 -2
  45. package/dist/Domain/Utility/Winding.d.ts +0 -3
  46. package/dist/geojson.cjs.js +0 -655
  47. package/dist/geojson.cjs.min.js +0 -1
  48. package/dist/geojson.es.js +0 -627
  49. package/dist/geojson.es.min.js +0 -1
  50. package/dist/geojson.js +0 -660
  51. package/dist/geojson.min.js +0 -1
  52. package/rollup.config.mjs +0 -43
  53. package/source/Domain/Constants.ts +0 -5
  54. package/source/Domain/GeoJSON/Concept/Altitude.ts +0 -9
  55. package/source/Domain/GeoJSON/Concept/BoundingBox.ts +0 -31
  56. package/source/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -12
  57. package/source/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -23
  58. package/source/Domain/GeoJSON/Concept/InteriorRing.ts +0 -12
  59. package/source/Domain/GeoJSON/Concept/Latitude.ts +0 -7
  60. package/source/Domain/GeoJSON/Concept/LinearRing.ts +0 -14
  61. package/source/Domain/GeoJSON/Concept/Longitude.ts +0 -7
  62. package/source/Domain/GeoJSON/Concept/Position.ts +0 -18
  63. package/source/Domain/GeoJSON/Feature.ts +0 -24
  64. package/source/Domain/GeoJSON/FeatureCollection.ts +0 -16
  65. package/source/Domain/GeoJSON/GeoJSON.ts +0 -9
  66. package/source/Domain/GeoJSON/Geometry/LineString.ts +0 -12
  67. package/source/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -9
  68. package/source/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -10
  69. package/source/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -9
  70. package/source/Domain/GeoJSON/Geometry/Point.ts +0 -12
  71. package/source/Domain/GeoJSON/Geometry/Polygon.ts +0 -20
  72. package/source/Domain/GeoJSON/Geometry.ts +0 -11
  73. package/source/Domain/GeoJSON/GeometryCollection.ts +0 -23
  74. package/source/Domain/GeoJSON/GeometryObject.ts +0 -20
  75. package/source/Domain/Guards/Number.ts +0 -13
  76. package/source/Domain/Guards/Tuple.ts +0 -6
  77. package/source/Domain/Guards/Utility.ts +0 -1
  78. package/source/Domain/Iterator/IterablePair.ts +0 -47
  79. package/source/Domain/Iterator/SimpleGeometry.ts +0 -137
  80. package/source/Domain/Utility/Calculate.ts +0 -143
  81. package/source/Domain/Utility/Distance.ts +0 -56
  82. package/source/Domain/Utility/Intersect.ts +0 -42
  83. package/source/Domain/Utility/Numeric.ts +0 -8
  84. package/source/Domain/Utility/Segments.ts +0 -5
  85. package/source/Domain/Utility/Winding.ts +0 -19
  86. package/source/main.ts +0 -20
  87. package/test/Domain/GeoJSON/Concept/Altitude.ts +0 -58
  88. package/test/Domain/GeoJSON/Concept/BoundingBox.ts +0 -77
  89. package/test/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -65
  90. package/test/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -56
  91. package/test/Domain/GeoJSON/Concept/InteriorRing.ts +0 -65
  92. package/test/Domain/GeoJSON/Concept/Latitude.ts +0 -56
  93. package/test/Domain/GeoJSON/Concept/LinearRing.ts +0 -63
  94. package/test/Domain/GeoJSON/Concept/Longitude.ts +0 -56
  95. package/test/Domain/GeoJSON/Concept/Position.ts +0 -56
  96. package/test/Domain/GeoJSON/Feature.ts +0 -9
  97. package/test/Domain/GeoJSON/FeatureCollection.ts +0 -9
  98. package/test/Domain/GeoJSON/GeoJSON.ts +0 -21
  99. package/test/Domain/GeoJSON/Geometry/LineString.ts +0 -11
  100. package/test/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -11
  101. package/test/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -11
  102. package/test/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -11
  103. package/test/Domain/GeoJSON/Geometry/Point.ts +0 -11
  104. package/test/Domain/GeoJSON/Geometry/Polygon.ts +0 -11
  105. package/test/Domain/GeoJSON/Geometry.ts +0 -9
  106. package/test/Domain/GeoJSON/GeometryCollection.ts +0 -9
  107. package/test/Domain/GeoJSON/GeometryObject.ts +0 -4
  108. package/test/Domain/Guards/Number.ts +0 -49
  109. package/test/Domain/Guards/Tuple.ts +0 -27
  110. package/test/Domain/Iterator/IterablePair.ts +0 -203
  111. package/test/Domain/Iterator/SimpleGeometry.ts +0 -195
  112. package/test/Domain/Utility/Calculate.ts +0 -178
  113. package/test/Domain/Utility/Distance.ts +0 -19
  114. package/test/Domain/Utility/Intersect.ts +0 -54
  115. package/test/Domain/Utility/Numeric.ts +0 -30
  116. package/test/Domain/Utility/Winding.ts +0 -52
  117. package/test/README.ts +0 -123
  118. package/test/data/Distance.ts +0 -51
  119. package/test/data/HolySee.ts +0 -74
  120. package/test/data/Intersect.ts +0 -300
  121. package/test/data/Italy.ts +0 -2883
  122. package/test/data/SanMarino.ts +0 -83
  123. package/test/data/Shapes.ts +0 -107
  124. package/test/helper/geometry.ts +0 -76
  125. package/test/helper/malform.ts +0 -82
  126. package/test/main.ts +0 -4
  127. package/tsconfig.json +0 -12
package/dist/main.js ADDED
@@ -0,0 +1,824 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all11) => {
6
+ for (var name in all11)
7
+ __defProp(target, name, { get: all11[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // source/main.ts
20
+ var main_exports = {};
21
+ __export(main_exports, {
22
+ SimpleGeometryIterator: () => SimpleGeometryIterator,
23
+ distance: () => distance,
24
+ intersect: () => intersect,
25
+ isFeature: () => isFeature,
26
+ isFeatureCollection: () => isFeatureCollection,
27
+ isGeoJSON: () => isGeoJSON,
28
+ isGeometry: () => isGeometry,
29
+ isGeometryCollection: () => isGeometryCollection,
30
+ isLineString: () => isLineString,
31
+ isMultiLineString: () => isMultiLineString,
32
+ isMultiPoint: () => isMultiPoint,
33
+ isMultiPolygon: () => isMultiPolygon,
34
+ isPoint: () => isPoint,
35
+ isPolygon: () => isPolygon,
36
+ isPosition: () => isPosition,
37
+ isStrictFeature: () => isStrictFeature,
38
+ isStrictFeatureCollection: () => isStrictFeatureCollection,
39
+ isStrictGeoJSON: () => isStrictGeoJSON,
40
+ isStrictGeometry: () => isStrictGeometry,
41
+ isStrictGeometryCollection: () => isStrictGeometryCollection,
42
+ isStrictLineString: () => isStrictLineString,
43
+ isStrictMultiLineString: () => isStrictMultiLineString,
44
+ isStrictMultiPoint: () => isStrictMultiPoint,
45
+ isStrictMultiPolygon: () => isStrictMultiPolygon,
46
+ isStrictPoint: () => isStrictPoint,
47
+ isStrictPolygon: () => isStrictPolygon,
48
+ isStrictPosition: () => isStrictPosition
49
+ });
50
+ module.exports = __toCommonJS(main_exports);
51
+
52
+ // source/Domain/GeoJSON/Concept/Position.ts
53
+ var import_guard3 = require("@konfirm/guard");
54
+
55
+ // source/Domain/Guards/Tuple.ts
56
+ var import_guard = require("@konfirm/guard");
57
+ function isTuple(...rules) {
58
+ return (value) => (0, import_guard.isArray)(value) && value.length === rules.length && rules.every((rule, index) => rule(value[index]));
59
+ }
60
+
61
+ // source/Domain/Constants.ts
62
+ var EARTH_RADIUS = 63710087714e-4;
63
+ var EARTH_RADIUS_MAJOR = 6378137;
64
+ var EARTH_RADIUS_MINOR = 6356752314245e-6;
65
+ var EARTH_FLATTENING = 298.257223563;
66
+ var GPS_SATELLITE_ORBIT = 2018e4;
67
+
68
+ // source/Domain/Guards/Number.ts
69
+ var import_guard2 = require("@konfirm/guard");
70
+ function isNumberValue(value) {
71
+ return (0, import_guard2.isNumber)(value) && Number.isFinite(value);
72
+ }
73
+ function isNumberBetween(a, b = Infinity) {
74
+ const min = Math.min(a, b);
75
+ const max = Math.max(a, b);
76
+ return (value) => isNumberValue(value) && value >= min && value <= max;
77
+ }
78
+
79
+ // source/Domain/GeoJSON/Concept/Altitude.ts
80
+ function isAltitude(value) {
81
+ return isNumberValue(value);
82
+ }
83
+ var isStrictAltitude = isNumberBetween(
84
+ -EARTH_RADIUS,
85
+ GPS_SATELLITE_ORBIT
86
+ );
87
+
88
+ // source/Domain/GeoJSON/Concept/Latitude.ts
89
+ function isLatitude(value) {
90
+ return isNumberValue(value);
91
+ }
92
+ var isStrictLatitude = isNumberBetween(-90, 90);
93
+
94
+ // source/Domain/GeoJSON/Concept/Longitude.ts
95
+ function isLongitude(value) {
96
+ return isNumberValue(value);
97
+ }
98
+ var isStrictLongitude = isNumberBetween(-180, 180);
99
+
100
+ // source/Domain/GeoJSON/Concept/Position.ts
101
+ var isPosition = (0, import_guard3.any)(
102
+ isTuple(isLongitude, isLatitude),
103
+ isTuple(isLongitude, isLatitude, isAltitude)
104
+ );
105
+ var isStrictPosition = (0, import_guard3.any)(
106
+ isTuple(isStrictLongitude, isStrictLatitude),
107
+ isTuple(isStrictLongitude, isStrictLatitude, isStrictAltitude)
108
+ );
109
+
110
+ // source/Domain/GeoJSON/Feature.ts
111
+ var import_guard17 = require("@konfirm/guard");
112
+
113
+ // source/Domain/GeoJSON/Concept/GeoJSONObject.ts
114
+ var import_guard5 = require("@konfirm/guard");
115
+
116
+ // source/Domain/GeoJSON/Concept/BoundingBox.ts
117
+ var import_guard4 = require("@konfirm/guard");
118
+ var isBoundingBoxWithAltitude = (0, import_guard4.all)(
119
+ isTuple(
120
+ isLongitude,
121
+ isLatitude,
122
+ isAltitude,
123
+ isLongitude,
124
+ isLatitude,
125
+ isAltitude
126
+ ),
127
+ ([, s, , , n]) => s <= n
128
+ );
129
+ var isBoundingBoxWithoutAltitude = (0, import_guard4.all)(
130
+ isTuple(isLongitude, isLatitude, isLongitude, isLatitude),
131
+ ([, s, , n]) => s <= n
132
+ );
133
+ var isBoundingBox = (0, import_guard4.any)(
134
+ isBoundingBoxWithAltitude,
135
+ isBoundingBoxWithoutAltitude
136
+ );
137
+ var isStrictBoundingBox = (0, import_guard4.any)(
138
+ (0, import_guard4.all)(
139
+ isTuple(
140
+ isStrictLongitude,
141
+ isStrictLatitude,
142
+ isStrictAltitude,
143
+ isStrictLongitude,
144
+ isStrictLatitude,
145
+ isStrictAltitude
146
+ ),
147
+ isBoundingBoxWithAltitude
148
+ ),
149
+ (0, import_guard4.all)(
150
+ isTuple(
151
+ isStrictLongitude,
152
+ isStrictLatitude,
153
+ isStrictLongitude,
154
+ isStrictLatitude
155
+ ),
156
+ isBoundingBoxWithoutAltitude
157
+ )
158
+ );
159
+
160
+ // source/Domain/GeoJSON/Concept/GeoJSONObject.ts
161
+ function isGeoJSONObject(type) {
162
+ return (0, import_guard5.isStructure)(
163
+ {
164
+ type: (0, import_guard5.all)(import_guard5.isString, (value) => value === type),
165
+ bbox: isBoundingBox
166
+ },
167
+ "bbox"
168
+ );
169
+ }
170
+
171
+ // source/Domain/GeoJSON/Geometry.ts
172
+ var import_guard15 = require("@konfirm/guard");
173
+
174
+ // source/Domain/GeoJSON/GeometryObject.ts
175
+ var import_guard6 = require("@konfirm/guard");
176
+ function isGeometryObject(type, isCoordinates) {
177
+ return (0, import_guard6.all)(
178
+ isGeoJSONObject(type),
179
+ (0, import_guard6.isKeyOfType)("coordinates", isCoordinates)
180
+ );
181
+ }
182
+
183
+ // source/Domain/GeoJSON/Geometry/MultiPoint.ts
184
+ var import_guard7 = require("@konfirm/guard");
185
+
186
+ // source/Domain/GeoJSON/Geometry/Point.ts
187
+ var isPointCoordinates = isPosition;
188
+ var isPoint = isGeometryObject(
189
+ "Point",
190
+ isPointCoordinates
191
+ );
192
+ var isStrictPointCoordinates = isStrictPosition;
193
+ var isStrictPoint = isGeometryObject(
194
+ "Point",
195
+ isStrictPointCoordinates
196
+ );
197
+
198
+ // source/Domain/GeoJSON/Geometry/MultiPoint.ts
199
+ var isMultiPointCoordinates = (0, import_guard7.isArrayOfType)(isPointCoordinates);
200
+ var isMultiPoint = isGeometryObject(
201
+ "MultiPoint",
202
+ isMultiPointCoordinates
203
+ );
204
+ var isStrictMultiPointCoordinates = (0, import_guard7.isArrayOfType)(isStrictPointCoordinates);
205
+ var isStrictMultiPoint = isGeometryObject(
206
+ "MultiPoint",
207
+ isStrictMultiPointCoordinates
208
+ );
209
+
210
+ // source/Domain/GeoJSON/Geometry/LineString.ts
211
+ var isLineStringCoordinates = isMultiPointCoordinates;
212
+ var isLineString = isGeometryObject(
213
+ "LineString",
214
+ isLineStringCoordinates
215
+ );
216
+ var isStrictLineStringCoordinates = isStrictMultiPointCoordinates;
217
+ var isStrictLineString = isGeometryObject("LineString", isStrictLineStringCoordinates);
218
+
219
+ // source/Domain/GeoJSON/Geometry/MultiLineString.ts
220
+ var import_guard8 = require("@konfirm/guard");
221
+ var isMultiLineStringCoordinates = (0, import_guard8.isArrayOfType)(
222
+ isLineStringCoordinates
223
+ );
224
+ var isMultiLineString = isGeometryObject(
225
+ "MultiLineString",
226
+ isMultiLineStringCoordinates
227
+ );
228
+ var isStrictMultiLineStringCoordinates = (0, import_guard8.isArrayOfType)(
229
+ isStrictLineStringCoordinates
230
+ );
231
+ var isStrictMultiLineString = isGeometryObject(
232
+ "MultiLineString",
233
+ isStrictMultiLineStringCoordinates
234
+ );
235
+
236
+ // source/Domain/GeoJSON/Geometry/MultiPolygon.ts
237
+ var import_guard14 = require("@konfirm/guard");
238
+
239
+ // source/Domain/GeoJSON/Geometry/Polygon.ts
240
+ var import_guard13 = require("@konfirm/guard");
241
+
242
+ // source/Domain/GeoJSON/Concept/ExteriorRing.ts
243
+ var import_guard11 = require("@konfirm/guard");
244
+
245
+ // source/Domain/Utility/Winding.ts
246
+ var import_guard9 = require("@konfirm/guard");
247
+ function winding(positions2) {
248
+ return positions2.reduce((carry, [x, y], i, a) => {
249
+ const [nx, ny] = a[(i + 1) % a.length];
250
+ return carry + (nx - x) * (ny + y);
251
+ }, 0);
252
+ }
253
+ var isPositionArray = (0, import_guard9.isArrayOfType)(isPosition);
254
+ function isClockwiseWinding(value) {
255
+ return isPositionArray(value) && winding(value) <= 0;
256
+ }
257
+ function isCounterClockwiseWinding(value) {
258
+ return isPositionArray(value) && winding(value) >= 0;
259
+ }
260
+
261
+ // source/Domain/GeoJSON/Concept/LinearRing.ts
262
+ var import_guard10 = require("@konfirm/guard");
263
+ var isLinearRing = (0, import_guard10.all)(
264
+ (0, import_guard10.isArrayOfType)(isPosition),
265
+ (0, import_guard10.isArrayOfSize)(4),
266
+ (value) => value[value.length - 1].every((v, i) => v === value[0][i])
267
+ );
268
+ var isStrictLinearRing = (0, import_guard10.all)(
269
+ (0, import_guard10.isArrayOfType)(isStrictPosition),
270
+ (0, import_guard10.isArrayOfSize)(4),
271
+ (value) => value[value.length - 1].every((v, i) => v === value[0][i])
272
+ );
273
+
274
+ // source/Domain/GeoJSON/Concept/ExteriorRing.ts
275
+ var isExteriorRing = (0, import_guard11.all)(isLinearRing);
276
+ var isStrictExteriorRing = (0, import_guard11.all)(
277
+ isStrictLinearRing,
278
+ isCounterClockwiseWinding
279
+ );
280
+
281
+ // source/Domain/GeoJSON/Concept/InteriorRing.ts
282
+ var import_guard12 = require("@konfirm/guard");
283
+ var isInteriorRing = (0, import_guard12.all)(isLinearRing);
284
+ var isStrictInteriorRing = (0, import_guard12.all)(
285
+ isStrictLinearRing,
286
+ isClockwiseWinding
287
+ );
288
+
289
+ // source/Domain/GeoJSON/Geometry/Polygon.ts
290
+ var isPolygonCoordinates = (0, import_guard13.all)((0, import_guard13.isArrayOfType)(isLinearRing));
291
+ var isPolygon = isGeometryObject(
292
+ "Polygon",
293
+ isPolygonCoordinates
294
+ );
295
+ var isStrictPolygonCoordinates = (0, import_guard13.all)(
296
+ (0, import_guard13.isArrayOfType)(isStrictLinearRing),
297
+ (value) => isExteriorRing(value[0]),
298
+ (value) => value.slice(1).every(isInteriorRing)
299
+ );
300
+ var isStrictPolygon = isGeometryObject(
301
+ "Polygon",
302
+ isStrictPolygonCoordinates
303
+ );
304
+
305
+ // source/Domain/GeoJSON/Geometry/MultiPolygon.ts
306
+ var isMultiPolygonCoordinates = (0, import_guard14.isArrayOfType)(isPolygonCoordinates);
307
+ var isMultiPolygon = isGeometryObject(
308
+ "MultiPolygon",
309
+ isMultiPolygonCoordinates
310
+ );
311
+ var isStrictMultiPolygonCoordinates = (0, import_guard14.isArrayOfType)(
312
+ isStrictPolygonCoordinates
313
+ );
314
+ var isStrictMultiPolygon = isGeometryObject(
315
+ "MultiPolygon",
316
+ isStrictMultiPolygonCoordinates
317
+ );
318
+
319
+ // source/Domain/GeoJSON/Geometry.ts
320
+ var isGeometry = (0, import_guard15.any)(
321
+ isPoint,
322
+ isMultiPoint,
323
+ isLineString,
324
+ isMultiLineString,
325
+ isPolygon,
326
+ isMultiPolygon
327
+ );
328
+ var isStrictGeometry = (0, import_guard15.any)(
329
+ isStrictPoint,
330
+ isStrictMultiPoint,
331
+ isStrictLineString,
332
+ isStrictMultiLineString,
333
+ isStrictPolygon,
334
+ isStrictMultiPolygon
335
+ );
336
+
337
+ // source/Domain/GeoJSON/GeometryCollection.ts
338
+ var import_guard16 = require("@konfirm/guard");
339
+ var isGeometryCollectionObject = (0, import_guard16.all)(
340
+ isGeoJSONObject("GeometryCollection"),
341
+ (0, import_guard16.isKeyOfType)(
342
+ "geometries",
343
+ (0, import_guard16.isArrayOfType)((0, import_guard16.any)(isGeometry, isGeometryCollection))
344
+ )
345
+ );
346
+ var isStrictGeometryCollectionObject = (0, import_guard16.all)(
347
+ isGeoJSONObject("GeometryCollection"),
348
+ (0, import_guard16.isKeyOfType)(
349
+ "geometries",
350
+ (0, import_guard16.isArrayOfType)((0, import_guard16.any)(isStrictGeometry, isStrictGeometryCollection))
351
+ )
352
+ );
353
+ function isGeometryCollection(value) {
354
+ return isGeometryCollectionObject(value);
355
+ }
356
+ function isStrictGeometryCollection(value) {
357
+ return isStrictGeometryCollectionObject(value);
358
+ }
359
+
360
+ // source/Domain/GeoJSON/Feature.ts
361
+ var isFeature = (0, import_guard17.all)(
362
+ isGeoJSONObject("Feature"),
363
+ (0, import_guard17.isStructure)({
364
+ geometry: (0, import_guard17.any)(isGeometry, isGeometryCollection),
365
+ properties: (0, import_guard17.any)(import_guard17.isNULL, import_guard17.isObject)
366
+ })
367
+ );
368
+ var isStrictFeature = (0, import_guard17.all)(
369
+ isGeoJSONObject("Feature"),
370
+ (0, import_guard17.isStructure)({
371
+ geometry: (0, import_guard17.any)(isStrictGeometry, isStrictGeometryCollection),
372
+ properties: (0, import_guard17.any)(import_guard17.isNULL, import_guard17.isObject)
373
+ })
374
+ );
375
+
376
+ // source/Domain/GeoJSON/FeatureCollection.ts
377
+ var import_guard18 = require("@konfirm/guard");
378
+ var isFeatureCollection = (0, import_guard18.all)(
379
+ isGeoJSONObject("FeatureCollection"),
380
+ (0, import_guard18.isKeyOfType)("features", (0, import_guard18.isArrayOfType)(isFeature))
381
+ );
382
+ var isStrictFeatureCollection = (0, import_guard18.all)(
383
+ isGeoJSONObject("FeatureCollection"),
384
+ (0, import_guard18.isKeyOfType)("features", (0, import_guard18.isArrayOfType)(isStrictFeature))
385
+ );
386
+
387
+ // source/Domain/GeoJSON/GeoJSON.ts
388
+ var import_guard19 = require("@konfirm/guard");
389
+ var isGeoJSON = (0, import_guard19.any)(
390
+ isGeometry,
391
+ isGeometryCollection,
392
+ isFeature,
393
+ isFeatureCollection
394
+ );
395
+ var isStrictGeoJSON = (0, import_guard19.any)(
396
+ isStrictGeometry,
397
+ isStrictGeometryCollection,
398
+ isStrictFeature,
399
+ isStrictFeatureCollection
400
+ );
401
+
402
+ // source/Domain/Iterator/SimpleGeometry.ts
403
+ var reducers = {
404
+ *MultiPoint({ coordinates, ...rest }, unwrap) {
405
+ for (const pair of coordinates) {
406
+ yield* unwrap({
407
+ coordinates: pair,
408
+ ...rest,
409
+ type: "Point"
410
+ });
411
+ }
412
+ },
413
+ *MultiLineString({ coordinates, ...rest }, unwrap) {
414
+ for (const pair of coordinates) {
415
+ yield* unwrap({
416
+ coordinates: pair,
417
+ ...rest,
418
+ type: "LineString"
419
+ });
420
+ }
421
+ },
422
+ *MultiPolygon({ coordinates, ...rest }, unwrap) {
423
+ for (const pair of coordinates) {
424
+ yield* unwrap({
425
+ coordinates: pair,
426
+ ...rest,
427
+ type: "Polygon"
428
+ });
429
+ }
430
+ },
431
+ *GeometryCollection({ geometries: geometries3 }, unwrap) {
432
+ for (const geometry of geometries3) {
433
+ yield* unwrap(geometry);
434
+ }
435
+ },
436
+ *Feature({ geometry }, unwrap) {
437
+ yield* unwrap(geometry);
438
+ },
439
+ *FeatureCollection({ features }, unwrap) {
440
+ for (const { geometry } of features) {
441
+ yield* unwrap(geometry);
442
+ }
443
+ }
444
+ };
445
+ var SimpleGeometryIterator = class {
446
+ constructor(...inputs) {
447
+ this.inputs = [];
448
+ this.inputs = inputs;
449
+ }
450
+ /**
451
+ * Generator yielding all SimpleGeometry objects from the provided GeoJSON structure(s)
452
+ *
453
+ * @return {*} {Iterator<SimpleGeometry>}
454
+ * @memberof SimpleGeometryIterator
455
+ */
456
+ *[Symbol.iterator]() {
457
+ for (const input of this.inputs) {
458
+ for (const simple of this.unwrap(input)) {
459
+ yield simple;
460
+ }
461
+ }
462
+ }
463
+ /**
464
+ * unwrap any GeoJSON object into one or more SimpleGeometry object
465
+ *
466
+ * @private
467
+ * @param {GeoJSON} geo
468
+ * @return {*} {Iterable<SimpleGeometry>}
469
+ * @memberof SimpleGeometryIterator
470
+ */
471
+ *unwrap(geo) {
472
+ geo.type in reducers ? yield* reducers[geo.type](
473
+ geo,
474
+ (g) => this.unwrap(g)
475
+ ) : yield geo;
476
+ }
477
+ };
478
+
479
+ // source/Domain/Iterator/IterablePair.ts
480
+ var IterablePairIterator = class {
481
+ /**
482
+ * Constructs a new instance of IterablePairIterator
483
+ *
484
+ * @param iterators
485
+ */
486
+ constructor(...iterators) {
487
+ this.iterators = [];
488
+ this.iterators = iterators;
489
+ }
490
+ /**
491
+ * Generator yielding all value pairs from the provided iterators
492
+ *
493
+ * @return {*} {Iterator<[T, T]>}
494
+ * @memberof IterablePairIterator
495
+ */
496
+ *[Symbol.iterator]() {
497
+ for (const [a, b] of this.pairs(this.iterators)) {
498
+ for (const one of a) {
499
+ for (const two of b) {
500
+ yield [one, two];
501
+ }
502
+ }
503
+ }
504
+ }
505
+ /**
506
+ * Create unique Iterator<T> combinations to traverse over
507
+ *
508
+ * @private
509
+ * @param {Array<Iterable<T>>} source
510
+ * @return {*} {Array<[Iterable<T>, Iterable<T>]>}
511
+ * @memberof IterablePairIterator
512
+ */
513
+ pairs(source) {
514
+ return source.flatMap(
515
+ (a, i) => source.slice(i + 1).map((b) => [a, b])
516
+ );
517
+ }
518
+ };
519
+
520
+ // source/Domain/Utility/Box.ts
521
+ function* positions(coordinates) {
522
+ if (typeof coordinates[0] === "number") {
523
+ yield coordinates;
524
+ } else {
525
+ for (const child of coordinates) {
526
+ yield* positions(child);
527
+ }
528
+ }
529
+ }
530
+ function boxFromPositions(source) {
531
+ let minLon = Infinity, minLat = Infinity, maxLon = -Infinity, maxLat = -Infinity;
532
+ for (const [lon, lat] of source) {
533
+ if (lon < minLon) minLon = lon;
534
+ if (lat < minLat) minLat = lat;
535
+ if (lon > maxLon) maxLon = lon;
536
+ if (lat > maxLat) maxLat = lat;
537
+ }
538
+ return [minLon, minLat, maxLon, maxLat];
539
+ }
540
+ function createBoxFromCoordinates(coordinates) {
541
+ return boxFromPositions(positions(coordinates));
542
+ }
543
+ function isWithinBox([lon, lat], [minLon, minLat, maxLon, maxLat]) {
544
+ return lon >= minLon && lon <= maxLon && lat >= minLat && lat <= maxLat;
545
+ }
546
+
547
+ // source/Domain/Utility/Calculate.ts
548
+ var D2R = Math.PI / 180;
549
+ var \u03C0 = Math.PI;
550
+ function constrain(value, min, max) {
551
+ return Math.max(Math.min(value, max), min);
552
+ }
553
+ function squared(n) {
554
+ return n * n;
555
+ }
556
+ function rad(n) {
557
+ return n * D2R;
558
+ }
559
+ var EARTH_RADIUS_MAJOR_SQUARED = squared(EARTH_RADIUS_MAJOR);
560
+ var EARTH_RADIUS_MINOR_SQUARED = squared(EARTH_RADIUS_MINOR);
561
+ var EARTH_RADIUS_FACTOR = (EARTH_RADIUS_MAJOR_SQUARED - EARTH_RADIUS_MINOR_SQUARED) / EARTH_RADIUS_MINOR_SQUARED;
562
+ var EARTH_INVERSE_FLATTENING = 1 / EARTH_FLATTENING;
563
+ var PointToPoint = {
564
+ cartesian([\u03BBa, \u03C6a], [\u03BBb, \u03C6b]) {
565
+ return EARTH_RADIUS * rad(Math.sqrt(squared(\u03BBb - \u03BBa) + squared(\u03C6b - \u03C6a)));
566
+ },
567
+ haversine([\u03BBa, \u03C6a], [\u03BBb, \u03C6b]) {
568
+ const \u0394 = squared(Math.sin(rad(\u03C6b - \u03C6a) / 2)) + Math.cos(rad(\u03C6a)) * Math.cos(rad(\u03C6b)) * squared(Math.sin(rad(\u03BBb - \u03BBa) / 2));
569
+ return EARTH_RADIUS * Math.atan2(Math.sqrt(\u0394), Math.sqrt(1 - \u0394)) * 2;
570
+ },
571
+ vincenty(...points) {
572
+ const [[\u03BB1, \u03C61], [\u03BB2, \u03C62]] = points.map(
573
+ (p) => p.map(rad)
574
+ );
575
+ const L = \u03BB2 - \u03BB1;
576
+ const tanU1 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(\u03C61), cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1), sinU1 = tanU1 * cosU1;
577
+ const tanU2 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(\u03C62), cosU2 = 1 / Math.sqrt(1 + tanU2 * tanU2), sinU2 = tanU2 * cosU2;
578
+ const antipodal = Math.abs(L) > \u03C0 / 2 || Math.abs(\u03C62 - \u03C61) > \u03C0 / 2;
579
+ let \u03BB = L;
580
+ let sin\u03BB = null;
581
+ let cos\u03BB = null;
582
+ let \u03C3 = antipodal ? \u03C0 : 0;
583
+ let sin\u03C3 = 0;
584
+ let cos\u03C3 = antipodal ? -1 : 1;
585
+ let sinSq\u03C3 = null;
586
+ let cos2\u03C3\u2098 = 1;
587
+ let cosSq\u03B1 = 1;
588
+ let \u03BB\u02B9 = null;
589
+ let iterations = 0;
590
+ do {
591
+ sin\u03BB = Math.sin(\u03BB);
592
+ cos\u03BB = Math.cos(\u03BB);
593
+ sinSq\u03C3 = (cosU2 * sin\u03BB) ** 2 + (cosU1 * sinU2 - sinU1 * cosU2 * cos\u03BB) ** 2;
594
+ if (Math.abs(sinSq\u03C3) < 1e-24) break;
595
+ sin\u03C3 = Math.sqrt(sinSq\u03C3);
596
+ cos\u03C3 = sinU1 * sinU2 + cosU1 * cosU2 * cos\u03BB;
597
+ \u03C3 = Math.atan2(sin\u03C3, cos\u03C3);
598
+ const sin\u03B1 = cosU1 * cosU2 * sin\u03BB / sin\u03C3;
599
+ cosSq\u03B1 = 1 - sin\u03B1 * sin\u03B1;
600
+ cos2\u03C3\u2098 = cosSq\u03B1 !== 0 ? cos\u03C3 - 2 * sinU1 * sinU2 / cosSq\u03B1 : 0;
601
+ const C = EARTH_INVERSE_FLATTENING / 16 * cosSq\u03B1 * (4 + EARTH_INVERSE_FLATTENING * (4 - 3 * cosSq\u03B1));
602
+ \u03BB\u02B9 = \u03BB;
603
+ \u03BB = L + (1 - C) * EARTH_INVERSE_FLATTENING * sin\u03B1 * (\u03C3 + C * sin\u03C3 * (cos2\u03C3\u2098 + C * cos\u03C3 * (-1 + 2 * cos2\u03C3\u2098 * cos2\u03C3\u2098)));
604
+ } while (Math.abs(\u03BB - \u03BB\u02B9) > 1e-12 && ++iterations < 1e3);
605
+ const uSq = cosSq\u03B1 * EARTH_RADIUS_FACTOR;
606
+ const A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));
607
+ const B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));
608
+ const \u0394\u03C3 = B * sin\u03C3 * (cos2\u03C3\u2098 + B / 4 * (cos\u03C3 * (-1 + 2 * cos2\u03C3\u2098 * cos2\u03C3\u2098) - B / 6 * cos2\u03C3\u2098 * (-3 + 4 * sin\u03C3 * sin\u03C3) * (-3 + 4 * cos2\u03C3\u2098 * cos2\u03C3\u2098)));
609
+ return EARTH_RADIUS_MINOR * A * (\u03C3 - \u0394\u03C3);
610
+ }
611
+ };
612
+ function getClosestPointOnLineByPoint(point, line) {
613
+ const [[px, py], [ax, ay], [bx, by]] = [point, ...line];
614
+ const [abx, aby] = [bx - ax, by - ay];
615
+ const [apx, apy] = [px - ax, py - ay];
616
+ const t = constrain(
617
+ (apx * abx + apy * aby) / (abx * abx + aby * aby),
618
+ 0,
619
+ 1
620
+ );
621
+ return t === 0 || t === 1 ? line[t] : [ax + abx * t, ay + aby * t];
622
+ }
623
+ function getDistanceOfPointToPoint(a, b, calculation) {
624
+ const calc = typeof calculation === "function" ? calculation : PointToPoint[calculation];
625
+ if (typeof calc === "function") {
626
+ return calc(a, b);
627
+ }
628
+ throw new Error(`Not a PointToPoint calculation function ${calculation}`);
629
+ }
630
+ function getDistanceOfPointToLine(point, line, calculation) {
631
+ return getDistanceOfPointToPoint(
632
+ point,
633
+ getClosestPointOnLineByPoint(point, line),
634
+ calculation
635
+ );
636
+ }
637
+ function getDistanceOfLineToLine(a, b, calculation) {
638
+ return isLinesCrossing(a, b) ? 0 : Math.min(
639
+ ...a.map((a2) => getDistanceOfPointToLine(a2, b, calculation)),
640
+ ...b.map((b2) => getDistanceOfPointToLine(b2, a, calculation))
641
+ );
642
+ }
643
+ function isLinesCrossing(a, b) {
644
+ const [[a1x, a1y], [a2x, a2y]] = a;
645
+ const [[b1x, b1y], [b2x, b2y]] = b;
646
+ const [s1x, s1y, s2x, s2y] = [a2x - a1x, a2y - a1y, b2x - b1x, b2y - b1y];
647
+ const s = (-s1y * (a1x - b1x) + s1x * (a1y - b1y)) / (-s2x * s1y + s1x * s2y);
648
+ const t = (s2x * (a1y - b1y) - s2y * (a1x - b1x)) / (-s2x * s1y + s1x * s2y);
649
+ return s >= 0 && s <= 1 && t >= 0 && t <= 1;
650
+ }
651
+ function isPointOnLine(point, line, threshold = 1e-14) {
652
+ return getDistanceOfPointToLine(point, line, "cartesian") < threshold;
653
+ }
654
+ function isPointInRing(p, ring) {
655
+ if (!isWithinBox(p, createBoxFromCoordinates(ring))) {
656
+ return false;
657
+ }
658
+ const { length } = ring;
659
+ const odd = ring.reduce((odd2, a, i) => {
660
+ const b = ring[(length + i - 1) % length];
661
+ return (a[1] < p[1] && b[1] >= p[1] || b[1] < p[1] && a[1] >= p[1]) && (a[0] <= p[0] || b[0] <= p[0]) ? odd2 ^ Number(
662
+ a[0] + (p[1] - a[1]) / (b[1] - a[1]) * (b[0] - a[0]) < p[0]
663
+ ) : odd2;
664
+ }, 0);
665
+ return odd !== 0 || ring.slice(1).some((a, index) => isPointOnLine(p, [ring[index], a]));
666
+ }
667
+
668
+ // source/Domain/Utility/Segments.ts
669
+ function segments(line) {
670
+ return line.slice(1).map((point, index) => [line[index], point]);
671
+ }
672
+
673
+ // source/Domain/Utility/Distance.ts
674
+ var geometries = {
675
+ PointPoint(a, b, calculation) {
676
+ return getDistanceOfPointToPoint(a, b, calculation);
677
+ },
678
+ LineStringPoint(a, b, calculation) {
679
+ return Math.min(
680
+ ...segments(a).map(
681
+ (line) => getDistanceOfPointToLine(b, line, calculation)
682
+ )
683
+ );
684
+ },
685
+ LineStringLineString(a, b, calculation) {
686
+ const sa = segments(a);
687
+ const sb = segments(b);
688
+ return sa.reduce(
689
+ (carry, a2) => sb.reduce(
690
+ (carry2, b2) => carry2 > 0 ? Math.min(
691
+ carry2,
692
+ getDistanceOfLineToLine(a2, b2, calculation)
693
+ ) : carry2,
694
+ carry
695
+ ),
696
+ Infinity
697
+ );
698
+ },
699
+ PolygonPoint([exterior, ...interior], b, calculation) {
700
+ if (isPointInRing(b, exterior)) {
701
+ const [excluded] = interior.filter(
702
+ (ring) => isPointInRing(b, ring)
703
+ );
704
+ return excluded ? this.LineStringPoint(excluded, b, calculation) : 0;
705
+ }
706
+ return this.LineStringPoint(exterior, b, calculation);
707
+ },
708
+ PolygonLineString(a, b, calculation) {
709
+ const [exterior, ...interior] = a;
710
+ const line = segments(b);
711
+ const ring = b.some((b2) => isPointInRing(b2, exterior)) ? interior.find((a2) => b.every((b2) => isPointInRing(b2, a2))) : exterior;
712
+ return ring ? Math.min(
713
+ ...segments(ring).map(
714
+ (a2) => Math.min(
715
+ ...line.map(
716
+ (b2) => getDistanceOfLineToLine(a2, b2, calculation)
717
+ )
718
+ )
719
+ )
720
+ ) : 0;
721
+ },
722
+ PolygonPolygon(a, b, calculation) {
723
+ return Math.min(
724
+ this.PolygonLineString(a, b[0], calculation),
725
+ this.PolygonLineString(b, a[0], calculation)
726
+ );
727
+ }
728
+ };
729
+ function distance(a, b, calculation = "cartesian") {
730
+ const lookup = geometries;
731
+ return Math.min(
732
+ ...[
733
+ ...new IterablePairIterator(
734
+ new SimpleGeometryIterator(a),
735
+ new SimpleGeometryIterator(b)
736
+ )
737
+ ].map(([a2, b2]) => {
738
+ return a2.type + b2.type in lookup ? lookup[a2.type + b2.type](
739
+ a2.coordinates,
740
+ b2.coordinates,
741
+ calculation
742
+ ) : b2.type + a2.type in lookup ? lookup[b2.type + a2.type](
743
+ b2.coordinates,
744
+ a2.coordinates,
745
+ calculation
746
+ ) : Infinity;
747
+ })
748
+ );
749
+ }
750
+
751
+ // source/Domain/Utility/Intersect.ts
752
+ var geometries2 = {
753
+ PointPoint(a, b) {
754
+ return a.length >= 2 && b.length >= 2 && a.slice(0, 2).every((v, i) => v === b[i]);
755
+ },
756
+ LineStringPoint(a, b) {
757
+ return a.some((a2) => this.PointPoint(a2, b)) || segments(a).some((line) => isPointOnLine(b, line));
758
+ },
759
+ LineStringLineString(a, b) {
760
+ const lines = segments(b);
761
+ return segments(a).some(
762
+ (a2) => lines.some((b2) => isLinesCrossing(a2, b2))
763
+ );
764
+ },
765
+ PolygonPoint([exterior, ...interior], b) {
766
+ return (this.LineStringPoint(exterior, b) || isPointInRing(b, exterior)) && (!interior.length || interior.every((ring) => !isPointInRing(b, ring)));
767
+ },
768
+ PolygonLineString(a, b) {
769
+ return a.some((ring) => this.LineStringLineString(ring, b)) || b.some((point) => this.PolygonPoint(a, point));
770
+ },
771
+ PolygonPolygon(a, b) {
772
+ return b.some(
773
+ (b1) => this.PolygonLineString(a, b1) || b1.some((b2) => this.PolygonPoint(a, b2))
774
+ ) || a.some(
775
+ (a1) => this.PolygonLineString(b, a1) || a1.some((a2) => this.PolygonPoint(b, a2))
776
+ );
777
+ }
778
+ };
779
+ function intersect(a, b) {
780
+ const lookup = geometries2;
781
+ for (const [itA, itB] of new IterablePairIterator(
782
+ new SimpleGeometryIterator(a),
783
+ new SimpleGeometryIterator(b)
784
+ )) {
785
+ if (itA.type + itB.type in lookup && lookup[itA.type + itB.type](
786
+ itA.coordinates,
787
+ itB.coordinates
788
+ ) || itB.type + itA.type in lookup && lookup[itB.type + itA.type](itB.coordinates, itA.coordinates)) {
789
+ return true;
790
+ }
791
+ }
792
+ return false;
793
+ }
794
+ // Annotate the CommonJS export names for ESM import in node:
795
+ 0 && (module.exports = {
796
+ SimpleGeometryIterator,
797
+ distance,
798
+ intersect,
799
+ isFeature,
800
+ isFeatureCollection,
801
+ isGeoJSON,
802
+ isGeometry,
803
+ isGeometryCollection,
804
+ isLineString,
805
+ isMultiLineString,
806
+ isMultiPoint,
807
+ isMultiPolygon,
808
+ isPoint,
809
+ isPolygon,
810
+ isPosition,
811
+ isStrictFeature,
812
+ isStrictFeatureCollection,
813
+ isStrictGeoJSON,
814
+ isStrictGeometry,
815
+ isStrictGeometryCollection,
816
+ isStrictLineString,
817
+ isStrictMultiLineString,
818
+ isStrictMultiPoint,
819
+ isStrictMultiPolygon,
820
+ isStrictPoint,
821
+ isStrictPolygon,
822
+ isStrictPosition
823
+ });
824
+ //# sourceMappingURL=main.js.map