@osmix/shared 0.0.7 → 0.0.10

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 (125) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/content-hasher.d.ts +28 -0
  3. package/dist/content-hasher.d.ts.map +1 -0
  4. package/dist/content-hasher.js +62 -0
  5. package/dist/content-hasher.js.map +1 -0
  6. package/dist/csv-parse-stream.d.ts +38 -0
  7. package/dist/csv-parse-stream.d.ts.map +1 -0
  8. package/dist/csv-parse-stream.js +157 -0
  9. package/dist/csv-parse-stream.js.map +1 -0
  10. package/dist/relation-kind.d.ts.map +1 -1
  11. package/dist/relation-kind.js +5 -3
  12. package/dist/relation-kind.js.map +1 -1
  13. package/dist/stream-to-bytes.js +2 -1
  14. package/dist/stream-to-bytes.js.map +1 -1
  15. package/dist/utils.d.ts +6 -1
  16. package/dist/utils.d.ts.map +1 -1
  17. package/dist/utils.js +21 -0
  18. package/dist/utils.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/content-hasher.ts +70 -0
  21. package/src/csv-parse-stream.ts +215 -0
  22. package/src/relation-kind.ts +5 -3
  23. package/src/stream-to-bytes.ts +1 -1
  24. package/src/utils.ts +20 -0
  25. package/test/csv-parse-stream.test.ts +74 -0
  26. package/dist/src/assert.d.ts +0 -24
  27. package/dist/src/assert.d.ts.map +0 -1
  28. package/dist/src/assert.js +0 -28
  29. package/dist/src/assert.js.map +0 -1
  30. package/dist/src/bbox-intersects.d.ts +0 -15
  31. package/dist/src/bbox-intersects.d.ts.map +0 -1
  32. package/dist/src/bbox-intersects.js +0 -24
  33. package/dist/src/bbox-intersects.js.map +0 -1
  34. package/dist/src/bytes-to-stream.d.ts +0 -18
  35. package/dist/src/bytes-to-stream.d.ts.map +0 -1
  36. package/dist/src/bytes-to-stream.js +0 -25
  37. package/dist/src/bytes-to-stream.js.map +0 -1
  38. package/dist/src/color.d.ts +0 -4
  39. package/dist/src/color.d.ts.map +0 -1
  40. package/dist/src/color.js +0 -33
  41. package/dist/src/color.js.map +0 -1
  42. package/dist/src/concat-bytes.d.ts +0 -5
  43. package/dist/src/concat-bytes.d.ts.map +0 -1
  44. package/dist/src/concat-bytes.js +0 -14
  45. package/dist/src/concat-bytes.js.map +0 -1
  46. package/dist/src/coordinates.d.ts +0 -28
  47. package/dist/src/coordinates.d.ts.map +0 -1
  48. package/dist/src/coordinates.js +0 -38
  49. package/dist/src/coordinates.js.map +0 -1
  50. package/dist/src/haversine-distance.d.ts +0 -16
  51. package/dist/src/haversine-distance.d.ts.map +0 -1
  52. package/dist/src/haversine-distance.js +0 -26
  53. package/dist/src/haversine-distance.js.map +0 -1
  54. package/dist/src/lineclip.d.ts +0 -2
  55. package/dist/src/lineclip.d.ts.map +0 -1
  56. package/dist/src/lineclip.js +0 -3
  57. package/dist/src/lineclip.js.map +0 -1
  58. package/dist/src/progress.d.ts +0 -42
  59. package/dist/src/progress.d.ts.map +0 -1
  60. package/dist/src/progress.js +0 -53
  61. package/dist/src/progress.js.map +0 -1
  62. package/dist/src/relation-kind.d.ts +0 -69
  63. package/dist/src/relation-kind.d.ts.map +0 -1
  64. package/dist/src/relation-kind.js +0 -375
  65. package/dist/src/relation-kind.js.map +0 -1
  66. package/dist/src/relation-multipolygon.d.ts +0 -43
  67. package/dist/src/relation-multipolygon.d.ts.map +0 -1
  68. package/dist/src/relation-multipolygon.js +0 -195
  69. package/dist/src/relation-multipolygon.js.map +0 -1
  70. package/dist/src/stream-to-bytes.d.ts +0 -18
  71. package/dist/src/stream-to-bytes.d.ts.map +0 -1
  72. package/dist/src/stream-to-bytes.js +0 -30
  73. package/dist/src/stream-to-bytes.js.map +0 -1
  74. package/dist/src/test/fixtures.d.ts +0 -36
  75. package/dist/src/test/fixtures.d.ts.map +0 -1
  76. package/dist/src/test/fixtures.js +0 -175
  77. package/dist/src/test/fixtures.js.map +0 -1
  78. package/dist/src/throttle.d.ts +0 -25
  79. package/dist/src/throttle.d.ts.map +0 -1
  80. package/dist/src/throttle.js +0 -34
  81. package/dist/src/throttle.js.map +0 -1
  82. package/dist/src/tile.d.ts +0 -34
  83. package/dist/src/tile.d.ts.map +0 -1
  84. package/dist/src/tile.js +0 -72
  85. package/dist/src/tile.js.map +0 -1
  86. package/dist/src/transform-bytes.d.ts +0 -24
  87. package/dist/src/transform-bytes.d.ts.map +0 -1
  88. package/dist/src/transform-bytes.js +0 -28
  89. package/dist/src/transform-bytes.js.map +0 -1
  90. package/dist/src/types.d.ts +0 -99
  91. package/dist/src/types.d.ts.map +0 -1
  92. package/dist/src/types.js +0 -9
  93. package/dist/src/types.js.map +0 -1
  94. package/dist/src/utils.d.ts +0 -30
  95. package/dist/src/utils.d.ts.map +0 -1
  96. package/dist/src/utils.js +0 -70
  97. package/dist/src/utils.js.map +0 -1
  98. package/dist/src/way-is-area.d.ts +0 -24
  99. package/dist/src/way-is-area.d.ts.map +0 -1
  100. package/dist/src/way-is-area.js +0 -104
  101. package/dist/src/way-is-area.js.map +0 -1
  102. package/dist/src/zigzag.d.ts +0 -33
  103. package/dist/src/zigzag.d.ts.map +0 -1
  104. package/dist/src/zigzag.js +0 -40
  105. package/dist/src/zigzag.js.map +0 -1
  106. package/dist/test/haversine-distance.test.d.ts +0 -2
  107. package/dist/test/haversine-distance.test.d.ts.map +0 -1
  108. package/dist/test/haversine-distance.test.js +0 -8
  109. package/dist/test/haversine-distance.test.js.map +0 -1
  110. package/dist/test/relation-kind.test.d.ts +0 -2
  111. package/dist/test/relation-kind.test.d.ts.map +0 -1
  112. package/dist/test/relation-kind.test.js +0 -367
  113. package/dist/test/relation-kind.test.js.map +0 -1
  114. package/dist/test/relation-multipolygon.test.d.ts +0 -2
  115. package/dist/test/relation-multipolygon.test.d.ts.map +0 -1
  116. package/dist/test/relation-multipolygon.test.js +0 -237
  117. package/dist/test/relation-multipolygon.test.js.map +0 -1
  118. package/dist/test/utils.test.d.ts +0 -2
  119. package/dist/test/utils.test.d.ts.map +0 -1
  120. package/dist/test/utils.test.js +0 -76
  121. package/dist/test/utils.test.js.map +0 -1
  122. package/dist/test/way-is-area.test.d.ts +0 -2
  123. package/dist/test/way-is-area.test.d.ts.map +0 -1
  124. package/dist/test/way-is-area.test.js +0 -31
  125. package/dist/test/way-is-area.test.js.map +0 -1
@@ -1,367 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
- import { buildRelationLineStrings, collectRelationPoints, getRelationKind, getRelationKindMetadata, isAreaRelation, isLineRelation, isLogicRelation, isPointRelation, isSuperRelation, resolveRelationMembers, } from "../src/relation-kind";
3
- describe("relation-kind", () => {
4
- describe("getRelationKind", () => {
5
- it("identifies multipolygon as area", () => {
6
- const relation = {
7
- id: 1,
8
- tags: { type: "multipolygon" },
9
- members: [],
10
- };
11
- expect(getRelationKind(relation)).toBe("area");
12
- });
13
- it("identifies boundary as area", () => {
14
- const relation = {
15
- id: 1,
16
- tags: { type: "boundary" },
17
- members: [],
18
- };
19
- expect(getRelationKind(relation)).toBe("area");
20
- });
21
- it("identifies route as line", () => {
22
- const relation = {
23
- id: 1,
24
- tags: { type: "route" },
25
- members: [],
26
- };
27
- expect(getRelationKind(relation)).toBe("line");
28
- });
29
- it("identifies multilinestring as line", () => {
30
- const relation = {
31
- id: 1,
32
- tags: { type: "multilinestring" },
33
- members: [],
34
- };
35
- expect(getRelationKind(relation)).toBe("line");
36
- });
37
- it("identifies multipoint as point", () => {
38
- const relation = {
39
- id: 1,
40
- tags: { type: "multipoint" },
41
- members: [],
42
- };
43
- expect(getRelationKind(relation)).toBe("point");
44
- });
45
- it("identifies restriction as logic", () => {
46
- const relation = {
47
- id: 1,
48
- tags: { type: "restriction" },
49
- members: [],
50
- };
51
- expect(getRelationKind(relation)).toBe("logic");
52
- });
53
- it("identifies super-relation by having relation members", () => {
54
- const relation = {
55
- id: 1,
56
- tags: { type: "collection" },
57
- members: [{ type: "relation", ref: 2 }],
58
- };
59
- expect(getRelationKind(relation)).toBe("super");
60
- });
61
- it("defaults to logic for untyped relations", () => {
62
- const relation = {
63
- id: 1,
64
- members: [],
65
- };
66
- expect(getRelationKind(relation)).toBe("logic");
67
- });
68
- it("handles case-insensitive type tags", () => {
69
- const relation = {
70
- id: 1,
71
- tags: { type: "MULTIPOLYGON" },
72
- members: [],
73
- };
74
- expect(getRelationKind(relation)).toBe("area");
75
- });
76
- });
77
- describe("getRelationKindMetadata", () => {
78
- it("returns correct metadata for area relations", () => {
79
- const relation = {
80
- id: 1,
81
- tags: { type: "multipolygon" },
82
- members: [],
83
- };
84
- const metadata = getRelationKindMetadata(relation);
85
- expect(metadata.kind).toBe("area");
86
- expect(metadata.expectedRoles).toEqual(["outer", "inner"]);
87
- expect(metadata.orderMatters).toBe(false);
88
- });
89
- it("returns correct metadata for line relations", () => {
90
- const relation = {
91
- id: 1,
92
- tags: { type: "route" },
93
- members: [],
94
- };
95
- const metadata = getRelationKindMetadata(relation);
96
- expect(metadata.kind).toBe("line");
97
- expect(metadata.orderMatters).toBe(true);
98
- });
99
- });
100
- describe("isAreaRelation", () => {
101
- it("returns true for multipolygon", () => {
102
- const relation = {
103
- id: 1,
104
- tags: { type: "multipolygon" },
105
- members: [],
106
- };
107
- expect(isAreaRelation(relation)).toBe(true);
108
- });
109
- it("returns false for route", () => {
110
- const relation = {
111
- id: 1,
112
- tags: { type: "route" },
113
- members: [],
114
- };
115
- expect(isAreaRelation(relation)).toBe(false);
116
- });
117
- });
118
- describe("isLineRelation", () => {
119
- it("returns true for route", () => {
120
- const relation = {
121
- id: 1,
122
- tags: { type: "route" },
123
- members: [],
124
- };
125
- expect(isLineRelation(relation)).toBe(true);
126
- });
127
- it("returns true for multilinestring", () => {
128
- const relation = {
129
- id: 1,
130
- tags: { type: "multilinestring" },
131
- members: [],
132
- };
133
- expect(isLineRelation(relation)).toBe(true);
134
- });
135
- });
136
- describe("isPointRelation", () => {
137
- it("returns true for multipoint", () => {
138
- const relation = {
139
- id: 1,
140
- tags: { type: "multipoint" },
141
- members: [],
142
- };
143
- expect(isPointRelation(relation)).toBe(true);
144
- });
145
- });
146
- describe("isSuperRelation", () => {
147
- it("returns true for relation with relation members", () => {
148
- const relation = {
149
- id: 1,
150
- tags: { type: "collection" },
151
- members: [{ type: "relation", ref: 2 }],
152
- };
153
- expect(isSuperRelation(relation)).toBe(true);
154
- });
155
- it("returns false for relation without relation members", () => {
156
- const relation = {
157
- id: 1,
158
- tags: { type: "route" },
159
- members: [{ type: "way", ref: 2 }],
160
- };
161
- expect(isSuperRelation(relation)).toBe(false);
162
- });
163
- });
164
- describe("isLogicRelation", () => {
165
- it("returns true for restriction", () => {
166
- const relation = {
167
- id: 1,
168
- tags: { type: "restriction" },
169
- members: [],
170
- };
171
- expect(isLogicRelation(relation)).toBe(true);
172
- });
173
- });
174
- describe("buildRelationLineStrings", () => {
175
- it("builds linestrings from connected ways", () => {
176
- const relation = {
177
- id: 1,
178
- tags: { type: "route" },
179
- members: [
180
- { type: "way", ref: 1 },
181
- { type: "way", ref: 2 },
182
- ],
183
- };
184
- const way1 = { id: 1, refs: [1, 2] };
185
- const way2 = { id: 2, refs: [2, 3] };
186
- const getWay = (id) => {
187
- if (id === 1)
188
- return way1;
189
- if (id === 2)
190
- return way2;
191
- return null;
192
- };
193
- const getNodeCoordinates = (id) => {
194
- const coords = {
195
- 1: [0.0, 0.0],
196
- 2: [1.0, 0.0],
197
- 3: [2.0, 0.0],
198
- };
199
- return coords[id];
200
- };
201
- const lineStrings = buildRelationLineStrings(relation, getWay, getNodeCoordinates);
202
- expect(lineStrings).toHaveLength(1);
203
- expect(lineStrings[0]).toHaveLength(3);
204
- });
205
- it("handles disconnected ways as separate linestrings", () => {
206
- const relation = {
207
- id: 1,
208
- tags: { type: "route" },
209
- members: [
210
- { type: "way", ref: 1 },
211
- { type: "way", ref: 2 },
212
- ],
213
- };
214
- const way1 = { id: 1, refs: [1, 2] };
215
- const way2 = { id: 2, refs: [3, 4] };
216
- const getWay = (id) => {
217
- if (id === 1)
218
- return way1;
219
- if (id === 2)
220
- return way2;
221
- return null;
222
- };
223
- const getNodeCoordinates = (id) => {
224
- const coords = {
225
- 1: [0.0, 0.0],
226
- 2: [1.0, 0.0],
227
- 3: [10.0, 10.0],
228
- 4: [11.0, 10.0],
229
- };
230
- return coords[id];
231
- };
232
- const lineStrings = buildRelationLineStrings(relation, getWay, getNodeCoordinates);
233
- expect(lineStrings.length).toBeGreaterThanOrEqual(2);
234
- });
235
- });
236
- describe("collectRelationPoints", () => {
237
- it("collects point coordinates from node members", () => {
238
- const relation = {
239
- id: 1,
240
- tags: { type: "multipoint" },
241
- members: [
242
- { type: "node", ref: 1 },
243
- { type: "node", ref: 2 },
244
- { type: "way", ref: 10 }, // Should be ignored
245
- ],
246
- };
247
- const getNodeCoordinates = (id) => {
248
- const coords = {
249
- 1: [0.0, 0.0],
250
- 2: [1.0, 1.0],
251
- };
252
- return coords[id];
253
- };
254
- const points = collectRelationPoints(relation, getNodeCoordinates);
255
- expect(points).toHaveLength(2);
256
- expect(points[0]).toEqual([0.0, 0.0]);
257
- expect(points[1]).toEqual([1.0, 1.0]);
258
- });
259
- it("handles missing node coordinates", () => {
260
- const relation = {
261
- id: 1,
262
- tags: { type: "multipoint" },
263
- members: [
264
- { type: "node", ref: 1 },
265
- { type: "node", ref: 2 },
266
- ],
267
- };
268
- const getNodeCoordinates = (id) => {
269
- if (id === 1)
270
- return [0.0, 0.0];
271
- return undefined; // Missing coordinate
272
- };
273
- const points = collectRelationPoints(relation, getNodeCoordinates);
274
- expect(points).toHaveLength(1);
275
- });
276
- });
277
- describe("resolveRelationMembers", () => {
278
- it("resolves direct members", () => {
279
- const relation = {
280
- id: 1,
281
- tags: { type: "collection" },
282
- members: [
283
- { type: "node", ref: 1 },
284
- { type: "way", ref: 10 },
285
- ],
286
- };
287
- const getRelation = () => null;
288
- const resolved = resolveRelationMembers(relation, getRelation);
289
- expect(resolved.nodes).toEqual([1]);
290
- expect(resolved.ways).toEqual([10]);
291
- expect(resolved.relations).toEqual([]);
292
- });
293
- it("resolves nested relation members", () => {
294
- const relation1 = {
295
- id: 1,
296
- tags: { type: "collection" },
297
- members: [
298
- { type: "relation", ref: 2 },
299
- { type: "node", ref: 1 },
300
- ],
301
- };
302
- const relation2 = {
303
- id: 2,
304
- tags: { type: "collection" },
305
- members: [
306
- { type: "way", ref: 10 },
307
- { type: "node", ref: 2 },
308
- ],
309
- };
310
- const getRelation = (id) => {
311
- if (id === 2)
312
- return relation2;
313
- return null;
314
- };
315
- const resolved = resolveRelationMembers(relation1, getRelation);
316
- expect(resolved.nodes).toContain(1);
317
- expect(resolved.nodes).toContain(2);
318
- expect(resolved.ways).toContain(10);
319
- expect(resolved.relations).toContain(2);
320
- });
321
- it("detects cycles and prevents infinite recursion", () => {
322
- const relation1 = {
323
- id: 1,
324
- tags: { type: "collection" },
325
- members: [{ type: "relation", ref: 2 }],
326
- };
327
- const relation2 = {
328
- id: 2,
329
- tags: { type: "collection" },
330
- members: [{ type: "relation", ref: 1 }], // Circular reference
331
- };
332
- const getRelation = (id) => {
333
- if (id === 1)
334
- return relation1;
335
- if (id === 2)
336
- return relation2;
337
- return null;
338
- };
339
- const resolved = resolveRelationMembers(relation1, getRelation, 10);
340
- // Should not crash and should include relation2 but not recurse infinitely
341
- expect(resolved.relations).toContain(2);
342
- });
343
- it("respects maxDepth limit", () => {
344
- const relation1 = {
345
- id: 1,
346
- tags: { type: "collection" },
347
- members: [{ type: "relation", ref: 2 }],
348
- };
349
- const relation2 = {
350
- id: 2,
351
- tags: { type: "collection" },
352
- members: [{ type: "node", ref: 100 }],
353
- };
354
- const getRelation = (id) => {
355
- if (id === 1)
356
- return relation1;
357
- if (id === 2)
358
- return relation2;
359
- return null;
360
- };
361
- const resolved = resolveRelationMembers(relation1, getRelation, 0);
362
- // Should not resolve nested relation when maxDepth is 0
363
- expect(resolved.nodes).not.toContain(100);
364
- });
365
- });
366
- });
367
- //# sourceMappingURL=relation-kind.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation-kind.test.js","sourceRoot":"","sources":["../../test/relation-kind.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=relation-multipolygon.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation-multipolygon.test.d.ts","sourceRoot":"","sources":["../../test/relation-multipolygon.test.ts"],"names":[],"mappings":""}
@@ -1,237 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
- import { buildRelationRings, connectWaysToRings, getWayMembersByRole, } from "../src/relation-multipolygon";
3
- describe("relation-multipolygon", () => {
4
- describe("getWayMembersByRole", () => {
5
- it("groups way members by outer and inner roles", () => {
6
- const relation = {
7
- id: 1,
8
- tags: { type: "multipolygon" },
9
- members: [
10
- { type: "way", ref: 10, role: "outer" },
11
- { type: "way", ref: 11, role: "inner" },
12
- { type: "way", ref: 12, role: "outer" },
13
- { type: "node", ref: 1 },
14
- { type: "way", ref: 13, role: "inner" },
15
- ],
16
- };
17
- const { outer, inner } = getWayMembersByRole(relation);
18
- expect(outer).toHaveLength(2);
19
- expect(outer[0]?.ref).toBe(10);
20
- expect(outer[1]?.ref).toBe(12);
21
- expect(inner).toHaveLength(2);
22
- expect(inner[0]?.ref).toBe(11);
23
- expect(inner[1]?.ref).toBe(13);
24
- });
25
- it("handles case-insensitive roles", () => {
26
- const relation = {
27
- id: 1,
28
- tags: { type: "multipolygon" },
29
- members: [
30
- { type: "way", ref: 10, role: "OUTER" },
31
- { type: "way", ref: 11, role: "Inner" },
32
- ],
33
- };
34
- const { outer, inner } = getWayMembersByRole(relation);
35
- expect(outer).toHaveLength(1);
36
- expect(inner).toHaveLength(1);
37
- });
38
- it("handles missing roles", () => {
39
- const relation = {
40
- id: 1,
41
- tags: { type: "multipolygon" },
42
- members: [
43
- { type: "way", ref: 10 },
44
- { type: "way", ref: 11, role: "outer" },
45
- ],
46
- };
47
- const { outer, inner } = getWayMembersByRole(relation);
48
- expect(outer).toHaveLength(1);
49
- expect(inner).toHaveLength(0);
50
- });
51
- });
52
- describe("connectWaysToRings", () => {
53
- it("connects ways sharing endpoints into a single ring", () => {
54
- const way1 = { id: 1, refs: [1, 2] };
55
- const way2 = { id: 2, refs: [2, 3] };
56
- const way3 = { id: 3, refs: [3, 1] };
57
- const rings = connectWaysToRings([way1, way2, way3]);
58
- expect(rings).toHaveLength(1);
59
- expect(rings[0]).toEqual([way1, way2, way3]);
60
- });
61
- it("handles ways that need to be reversed", () => {
62
- // way1 ends at 2, way2 starts at 2 (normal connection)
63
- const way1 = { id: 1, refs: [1, 2] };
64
- const way2 = { id: 2, refs: [2, 3, 4] };
65
- const rings = connectWaysToRings([way1, way2]);
66
- // Should create a ring if ways connect and form a closed loop
67
- // This test verifies basic connection logic
68
- expect(rings.length).toBeGreaterThanOrEqual(0);
69
- });
70
- it("creates separate rings for disconnected ways", () => {
71
- const way1 = { id: 1, refs: [1, 2, 1] }; // closed ring
72
- const way2 = { id: 2, refs: [3, 4, 3] }; // separate closed ring
73
- const rings = connectWaysToRings([way1, way2]);
74
- expect(rings).toHaveLength(2);
75
- });
76
- it("only includes closed rings", () => {
77
- const way1 = { id: 1, refs: [1, 2, 3] }; // not closed
78
- const way2 = { id: 2, refs: [4, 5, 4] }; // closed
79
- const rings = connectWaysToRings([way1, way2]);
80
- // Only the closed ring should be included
81
- expect(rings.length).toBeGreaterThanOrEqual(1);
82
- });
83
- });
84
- describe("buildRelationRings", () => {
85
- it("builds simple multipolygon with outer ring only", () => {
86
- const relation = {
87
- id: 1,
88
- tags: { type: "multipolygon" },
89
- members: [{ type: "way", ref: 1, role: "outer" }],
90
- };
91
- const way1 = {
92
- id: 1,
93
- refs: [1, 2, 3, 4, 1],
94
- };
95
- const getWay = (id) => (id === 1 ? way1 : null);
96
- const getNodeCoordinates = (id) => {
97
- const coords = {
98
- 1: [0.0, 0.0],
99
- 2: [1.0, 0.0],
100
- 3: [1.0, 1.0],
101
- 4: [0.0, 1.0],
102
- };
103
- return coords[id];
104
- };
105
- const rings = buildRelationRings(relation, getWay, getNodeCoordinates);
106
- expect(rings).toHaveLength(1);
107
- expect(rings[0]).toHaveLength(1); // one outer ring
108
- expect(rings[0]?.[0]).toHaveLength(5); // closed ring with 5 points
109
- });
110
- it("builds multipolygon with outer and inner rings (holes)", () => {
111
- const relation = {
112
- id: 1,
113
- tags: { type: "multipolygon" },
114
- members: [
115
- { type: "way", ref: 1, role: "outer" },
116
- { type: "way", ref: 2, role: "inner" },
117
- ],
118
- };
119
- const way1 = {
120
- id: 1,
121
- refs: [1, 2, 3, 4, 1], // outer square
122
- };
123
- const way2 = {
124
- id: 2,
125
- refs: [5, 6, 7, 5], // inner triangle
126
- };
127
- const getWay = (id) => {
128
- if (id === 1)
129
- return way1;
130
- if (id === 2)
131
- return way2;
132
- return null;
133
- };
134
- const getNodeCoordinates = (id) => {
135
- const coords = {
136
- 1: [-1.0, -1.0],
137
- 2: [1.0, -1.0],
138
- 3: [1.0, 1.0],
139
- 4: [-1.0, 1.0],
140
- 5: [-0.5, 0.0],
141
- 6: [0.5, 0.0],
142
- 7: [0.0, 0.5],
143
- };
144
- return coords[id];
145
- };
146
- const rings = buildRelationRings(relation, getWay, getNodeCoordinates);
147
- expect(rings).toHaveLength(1);
148
- expect(rings[0]).toHaveLength(2); // outer + inner
149
- expect(rings[0]?.[0]).toBeDefined(); // outer ring
150
- expect(rings[0]?.[1]).toBeDefined(); // inner ring (hole)
151
- });
152
- it("builds multipolygon with multiple outer rings", () => {
153
- const relation = {
154
- id: 1,
155
- tags: { type: "multipolygon" },
156
- members: [
157
- { type: "way", ref: 1, role: "outer" },
158
- { type: "way", ref: 2, role: "outer" },
159
- ],
160
- };
161
- const way1 = {
162
- id: 1,
163
- refs: [1, 2, 3, 1], // first polygon
164
- };
165
- const way2 = {
166
- id: 2,
167
- refs: [4, 5, 6, 4], // second polygon
168
- };
169
- const getWay = (id) => {
170
- if (id === 1)
171
- return way1;
172
- if (id === 2)
173
- return way2;
174
- return null;
175
- };
176
- const getNodeCoordinates = (id) => {
177
- const coords = {
178
- 1: [0.0, 0.0],
179
- 2: [1.0, 0.0],
180
- 3: [0.5, 1.0],
181
- 4: [2.0, 0.0],
182
- 5: [3.0, 0.0],
183
- 6: [2.5, 1.0],
184
- };
185
- return coords[id];
186
- };
187
- const rings = buildRelationRings(relation, getWay, getNodeCoordinates);
188
- expect(rings).toHaveLength(2); // two separate polygons
189
- });
190
- it("handles relation similar to osmtogeojson test case", () => {
191
- // Based on: https://github.com/placemark/osmtogeojson/blob/main/test/osm.test.js
192
- const relation = {
193
- id: 1,
194
- tags: { type: "multipolygon" },
195
- members: [
196
- { type: "way", ref: 2, role: "outer" },
197
- { type: "way", ref: 3, role: "inner" },
198
- ],
199
- };
200
- const way2 = {
201
- id: 2,
202
- refs: [4, 5, 6, 7, 4], // outer square
203
- };
204
- const way3 = {
205
- id: 3,
206
- refs: [8, 9, 10, 8], // inner triangle
207
- };
208
- const getWay = (id) => {
209
- if (id === 2)
210
- return way2;
211
- if (id === 3)
212
- return way3;
213
- return null;
214
- };
215
- const getNodeCoordinates = (id) => {
216
- const coords = {
217
- 4: [-1.0, -1.0],
218
- 5: [-1.0, 1.0],
219
- 6: [1.0, 1.0],
220
- 7: [1.0, -1.0],
221
- 8: [-0.5, 0.0],
222
- 9: [0.5, 0.0],
223
- 10: [0.0, 0.5],
224
- };
225
- return coords[id];
226
- };
227
- const rings = buildRelationRings(relation, getWay, getNodeCoordinates);
228
- expect(rings).toHaveLength(1);
229
- expect(rings[0]).toHaveLength(2); // outer + inner
230
- // Outer ring should have 5 points (closed square)
231
- expect(rings[0]?.[0]).toHaveLength(5);
232
- // Inner ring should have 4 points (closed triangle)
233
- expect(rings[0]?.[1]).toHaveLength(4);
234
- });
235
- });
236
- });
237
- //# sourceMappingURL=relation-multipolygon.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation-multipolygon.test.js","sourceRoot":"","sources":["../../test/relation-multipolygon.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../test/utils.test.ts"],"names":[],"mappings":""}