@osmix/core 0.0.2 → 0.1.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 (104) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +118 -107
  3. package/dist/src/entities.d.ts +103 -9
  4. package/dist/src/entities.d.ts.map +1 -1
  5. package/dist/src/entities.js +101 -11
  6. package/dist/src/entities.js.map +1 -1
  7. package/dist/src/ids.d.ts +82 -13
  8. package/dist/src/ids.d.ts.map +1 -1
  9. package/dist/src/ids.js +103 -31
  10. package/dist/src/ids.js.map +1 -1
  11. package/dist/src/index.d.ts +31 -5
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +33 -5
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/nodes.d.ts +91 -21
  16. package/dist/src/nodes.d.ts.map +1 -1
  17. package/dist/src/nodes.js +191 -44
  18. package/dist/src/nodes.js.map +1 -1
  19. package/dist/src/osm.d.ts +99 -0
  20. package/dist/src/osm.d.ts.map +1 -0
  21. package/dist/src/osm.js +165 -0
  22. package/dist/src/osm.js.map +1 -0
  23. package/dist/src/relations.d.ts +112 -20
  24. package/dist/src/relations.d.ts.map +1 -1
  25. package/dist/src/relations.js +298 -35
  26. package/dist/src/relations.js.map +1 -1
  27. package/dist/src/stringtable.d.ts +78 -14
  28. package/dist/src/stringtable.d.ts.map +1 -1
  29. package/dist/src/stringtable.js +105 -26
  30. package/dist/src/stringtable.js.map +1 -1
  31. package/dist/src/tags.d.ts +117 -18
  32. package/dist/src/tags.d.ts.map +1 -1
  33. package/dist/src/tags.js +177 -30
  34. package/dist/src/tags.js.map +1 -1
  35. package/dist/src/typed-arrays.d.ts +85 -11
  36. package/dist/src/typed-arrays.d.ts.map +1 -1
  37. package/dist/src/typed-arrays.js +88 -9
  38. package/dist/src/typed-arrays.js.map +1 -1
  39. package/dist/src/utils.d.ts +35 -1
  40. package/dist/src/utils.d.ts.map +1 -1
  41. package/dist/src/utils.js +69 -10
  42. package/dist/src/utils.js.map +1 -1
  43. package/dist/src/ways.d.ts +91 -27
  44. package/dist/src/ways.d.ts.map +1 -1
  45. package/dist/src/ways.js +229 -69
  46. package/dist/src/ways.js.map +1 -1
  47. package/dist/test/memory.test.d.ts +7 -0
  48. package/dist/test/memory.test.d.ts.map +1 -0
  49. package/dist/test/memory.test.js +29 -0
  50. package/dist/test/memory.test.js.map +1 -0
  51. package/dist/test/mock-osm.d.ts +3 -3
  52. package/dist/test/mock-osm.d.ts.map +1 -1
  53. package/dist/test/mock-osm.js +3 -3
  54. package/dist/test/mock-osm.js.map +1 -1
  55. package/dist/test/tags-search.test.d.ts +2 -0
  56. package/dist/test/tags-search.test.d.ts.map +1 -0
  57. package/dist/test/tags-search.test.js +56 -0
  58. package/dist/test/tags-search.test.js.map +1 -0
  59. package/dist/test/typed-arrays.test.js +19 -17
  60. package/dist/test/typed-arrays.test.js.map +1 -1
  61. package/package.json +11 -13
  62. package/src/entities.ts +147 -22
  63. package/src/ids.ts +126 -45
  64. package/src/index.ts +34 -5
  65. package/src/nodes.ts +248 -58
  66. package/src/osm.ts +222 -0
  67. package/src/relations.ts +396 -54
  68. package/src/stringtable.ts +123 -36
  69. package/src/tags.ts +220 -46
  70. package/src/typed-arrays.ts +97 -10
  71. package/src/types/geoflatbush.d.ts +37 -0
  72. package/src/types/geokdbush.d.ts +37 -0
  73. package/src/types/kdbush.d.ts +24 -6
  74. package/src/utils.ts +80 -14
  75. package/src/ways.ts +260 -84
  76. package/test/memory.test.ts +38 -0
  77. package/test/mock-osm.ts +8 -8
  78. package/test/tags-search.test.ts +60 -0
  79. package/test/typed-arrays.test.ts +5 -6
  80. package/dist/src/osmix.d.ts +0 -88
  81. package/dist/src/osmix.d.ts.map +0 -1
  82. package/dist/src/osmix.js +0 -438
  83. package/dist/src/osmix.js.map +0 -1
  84. package/dist/test/extract.bench.d.ts +0 -2
  85. package/dist/test/extract.bench.d.ts.map +0 -1
  86. package/dist/test/extract.bench.js +0 -23
  87. package/dist/test/extract.bench.js.map +0 -1
  88. package/dist/test/extract.test.d.ts +0 -2
  89. package/dist/test/extract.test.d.ts.map +0 -1
  90. package/dist/test/extract.test.js +0 -127
  91. package/dist/test/extract.test.js.map +0 -1
  92. package/dist/test/read.test.d.ts +0 -2
  93. package/dist/test/read.test.d.ts.map +0 -1
  94. package/dist/test/read.test.js +0 -17
  95. package/dist/test/read.test.js.map +0 -1
  96. package/dist/test/write.test.d.ts +0 -2
  97. package/dist/test/write.test.d.ts.map +0 -1
  98. package/dist/test/write.test.js +0 -55
  99. package/dist/test/write.test.js.map +0 -1
  100. package/src/osmix.ts +0 -556
  101. package/test/extract.bench.ts +0 -29
  102. package/test/extract.test.ts +0 -161
  103. package/test/read.test.ts +0 -22
  104. package/test/write.test.ts +0 -69
package/dist/src/ways.js CHANGED
@@ -1,52 +1,57 @@
1
1
  import Flatbush from "flatbush";
2
+ import { around as geoAround } from "geoflatbush";
2
3
  import { Entities } from "./entities";
3
4
  import { Ids } from "./ids";
4
5
  import { Tags } from "./tags";
5
- import { BufferConstructor, CoordinateArrayType, IdArrayType, ResizeableTypedArray, } from "./typed-arrays";
6
+ import { BufferConstructor, IdArrayType, ResizeableTypedArray as RTA, } from "./typed-arrays";
6
7
  export class Ways extends Entities {
7
8
  spatialIndex = new Flatbush(1);
9
+ // Track if spatial index was properly built (vs default empty)
10
+ spatialIndexBuilt = false;
8
11
  refStart;
9
12
  refCount; // Maximum 2,000 nodes per way
10
13
  // Node IDs
11
14
  refs;
12
15
  // Bounding box of the way in geographic coordinates
13
16
  bbox;
14
- static from(stringTable, wits) {
15
- const idIndex = Ids.from(wits);
16
- const tagIndex = Tags.from(stringTable, wits);
17
- const wayIndex = new Ways(stringTable, idIndex, tagIndex);
18
- wayIndex.refStart = ResizeableTypedArray.from(Uint32Array, wits.refStart);
19
- wayIndex.refCount = ResizeableTypedArray.from(Uint16Array, wits.refCount);
20
- wayIndex.refs = ResizeableTypedArray.from(IdArrayType, wits.refs);
21
- wayIndex.bbox = ResizeableTypedArray.from(CoordinateArrayType, wits.bbox);
22
- wayIndex.spatialIndex = Flatbush.from(wits.spatialIndex);
23
- return wayIndex;
24
- }
25
- constructor(stringTable, idIndex, tagIndex) {
26
- super("way", stringTable, idIndex, tagIndex);
27
- this.refStart = new ResizeableTypedArray(Uint32Array);
28
- this.refCount = new ResizeableTypedArray(Uint16Array);
29
- this.refs = new ResizeableTypedArray(IdArrayType);
30
- this.bbox = new ResizeableTypedArray(CoordinateArrayType);
31
- }
32
- transferables() {
33
- return {
34
- refStart: this.refStart.array.buffer,
35
- refCount: this.refCount.array.buffer,
36
- refs: this.refs.array.buffer,
37
- bbox: this.bbox.array.buffer,
38
- spatialIndex: this.spatialIndex.data,
39
- ...this.ids.transferables(),
40
- ...this.tags.transferables(),
41
- };
17
+ // Node reference index
18
+ nodes;
19
+ /**
20
+ * Create a new Ways index.
21
+ */
22
+ constructor(stringTable, nodes, transferables) {
23
+ if (transferables) {
24
+ super("way", new Ids(transferables), new Tags(stringTable, transferables));
25
+ this.refStart = RTA.from(Uint32Array, transferables.refStart);
26
+ this.refCount = RTA.from(Uint16Array, transferables.refCount);
27
+ this.refs = RTA.from(IdArrayType, transferables.refs);
28
+ this.bbox = RTA.from(Float64Array, transferables.bbox);
29
+ // Only load spatial index if provided (not stored in IndexedDB)
30
+ if (transferables.spatialIndex?.byteLength) {
31
+ this.spatialIndex = Flatbush.from(transferables.spatialIndex);
32
+ this.spatialIndexBuilt = true;
33
+ }
34
+ this.indexBuilt = true;
35
+ }
36
+ else {
37
+ super("way", new Ids(), new Tags(stringTable));
38
+ this.refStart = new RTA(Uint32Array);
39
+ this.refCount = new RTA(Uint16Array);
40
+ this.refs = new RTA(IdArrayType);
41
+ this.bbox = new RTA(Float64Array);
42
+ }
43
+ this.nodes = nodes;
42
44
  }
45
+ /**
46
+ * Add a single way to the index.
47
+ */
43
48
  addWay(way) {
44
- this.ids.add(way.id);
45
- this.tags.addTags(way.tags);
49
+ const wayIndex = this.addEntity(way.id, way.tags ?? {});
46
50
  this.refStart.push(this.refs.length);
47
51
  this.refCount.push(way.refs.length);
48
52
  for (const ref of way.refs)
49
53
  this.refs.push(ref);
54
+ return wayIndex;
50
55
  }
51
56
  /**
52
57
  * Bulk add ways directly from a PBF PrimitiveBlock.
@@ -68,64 +73,104 @@ export class Ways extends Entities {
68
73
  : null;
69
74
  if (filter && filteredWay === null)
70
75
  continue;
71
- this.ids.add(way.id);
72
- this.refStart.push(this.refs.length);
73
- this.refCount.push(filteredWay?.refs.length ?? refs.length);
74
- this.refs.pushMany(filteredWay?.refs ?? refs);
75
76
  const tagKeys = way.keys.map((key) => {
76
- const index = blockStringIndexMap.get(key);
77
+ const index = blockStringIndexMap[key];
77
78
  if (index === undefined)
78
79
  throw Error("Tag key not found");
79
80
  return index;
80
81
  });
81
82
  const tagValues = way.vals.map((val) => {
82
- const index = blockStringIndexMap.get(val);
83
+ const index = blockStringIndexMap[val];
83
84
  if (index === undefined)
84
85
  throw Error("Tag value not found");
85
86
  return index;
86
87
  });
87
- this.tags.addTagKeysAndValues(tagKeys, tagValues);
88
+ this.addEntity(way.id, tagKeys, tagValues);
89
+ this.refStart.push(this.refs.length);
90
+ this.refCount.push(filteredWay?.refs.length ?? refs.length);
91
+ this.refs.pushMany(filteredWay?.refs ?? refs);
88
92
  added++;
89
93
  }
90
94
  return added;
91
95
  }
96
+ /**
97
+ * Compact the internal arrays to free up memory.
98
+ */
92
99
  buildEntityIndex() {
93
100
  this.refStart.compact();
94
101
  this.refCount.compact();
95
102
  this.refs.compact();
96
103
  }
97
- buildSpatialIndex(nodeIndex) {
104
+ /**
105
+ * Build the spatial index for ways.
106
+ * If bbox data already exists (e.g., loaded from storage), reuses it.
107
+ */
108
+ buildSpatialIndex() {
109
+ if (!this.nodes.isReady())
110
+ throw Error("Node index is not ready.");
111
+ if (this.size === 0)
112
+ return this.spatialIndex;
98
113
  console.time("WayIndex.buildSpatialIndex");
99
114
  this.spatialIndex = new Flatbush(this.size, 128, Float64Array, BufferConstructor);
115
+ // If bbox already has data (loaded from storage), use it directly
116
+ const hasBboxData = this.bbox.length >= this.size * 4;
100
117
  for (let i = 0; i < this.size; i++) {
101
- let minX = Number.POSITIVE_INFINITY;
102
- let minY = Number.POSITIVE_INFINITY;
103
- let maxX = Number.NEGATIVE_INFINITY;
104
- let maxY = Number.NEGATIVE_INFINITY;
105
- const start = this.refStart.at(i);
106
- const count = this.refCount.at(i);
107
- for (let j = start; j < start + count; j++) {
108
- const refId = this.refs.at(j);
109
- const [lon, lat] = nodeIndex.getNodeLonLat({ id: refId });
110
- if (lon < minX)
111
- minX = lon;
112
- if (lon > maxX)
113
- maxX = lon;
114
- if (lat < minY)
115
- minY = lat;
116
- if (lat > maxY)
117
- maxY = lat;
118
+ let minX;
119
+ let minY;
120
+ let maxX;
121
+ let maxY;
122
+ if (hasBboxData) {
123
+ // Use stored bbox values
124
+ minX = this.bbox.at(i * 4);
125
+ minY = this.bbox.at(i * 4 + 1);
126
+ maxX = this.bbox.at(i * 4 + 2);
127
+ maxY = this.bbox.at(i * 4 + 3);
128
+ }
129
+ else {
130
+ // Calculate bbox from node coordinates
131
+ minX = Number.POSITIVE_INFINITY;
132
+ minY = Number.POSITIVE_INFINITY;
133
+ maxX = Number.NEGATIVE_INFINITY;
134
+ maxY = Number.NEGATIVE_INFINITY;
135
+ const start = this.refStart.at(i);
136
+ const count = this.refCount.at(i);
137
+ for (let j = start; j < start + count; j++) {
138
+ const refId = this.refs.at(j);
139
+ const [lon, lat] = this.nodes.getNodeLonLat({ id: refId });
140
+ if (lon < minX)
141
+ minX = lon;
142
+ if (lon > maxX)
143
+ maxX = lon;
144
+ if (lat < minY)
145
+ minY = lat;
146
+ if (lat > maxY)
147
+ maxY = lat;
148
+ }
149
+ this.bbox.push(minX);
150
+ this.bbox.push(minY);
151
+ this.bbox.push(maxX);
152
+ this.bbox.push(maxY);
118
153
  }
119
- this.bbox.push(minX);
120
- this.bbox.push(minY);
121
- this.bbox.push(maxX);
122
- this.bbox.push(maxY);
123
154
  this.spatialIndex.add(minX, minY, maxX, maxY);
124
155
  }
156
+ // Compact bbox if we just calculated it
157
+ if (!hasBboxData) {
158
+ this.bbox.compact();
159
+ }
125
160
  this.spatialIndex.finish();
161
+ this.spatialIndexBuilt = true;
126
162
  console.timeEnd("WayIndex.buildSpatialIndex");
127
163
  return this.spatialIndex;
128
164
  }
165
+ /**
166
+ * Check if the spatial index has been built.
167
+ */
168
+ hasSpatialIndex() {
169
+ return this.spatialIndexBuilt;
170
+ }
171
+ /**
172
+ * Get the full way entity.
173
+ */
129
174
  getFullEntity(index, id, tags) {
130
175
  return {
131
176
  id,
@@ -133,12 +178,18 @@ export class Ways extends Entities {
133
178
  tags,
134
179
  };
135
180
  }
181
+ /**
182
+ * Get the node IDs referenced by a way.
183
+ */
136
184
  getRefIds(index) {
137
185
  const start = this.refStart.at(index);
138
186
  const count = this.refCount.at(index);
139
- return this.refs.slice(start, start + count);
187
+ return Array.from(this.refs.slice(start, start + count));
140
188
  }
141
- getBbox(idOrIndex) {
189
+ /**
190
+ * Get the bounding box of a way.
191
+ */
192
+ getEntityBbox(idOrIndex) {
142
193
  const index = "index" in idOrIndex ? idOrIndex.index : this.ids.idOrIndex(idOrIndex)[0];
143
194
  return [
144
195
  this.bbox.at(index * 4),
@@ -147,40 +198,149 @@ export class Ways extends Entities {
147
198
  this.bbox.at(index * 4 + 3),
148
199
  ];
149
200
  }
150
- getLine(index, nodeIndex) {
201
+ /**
202
+ * Get the coordinates of a way as a flat array.
203
+ */
204
+ getLine(index) {
151
205
  const count = this.refCount.at(index);
152
206
  const start = this.refStart.at(index);
153
207
  const line = new Float64Array(count * 2);
154
208
  for (let i = 0; i < count; i++) {
155
209
  const ref = this.refs.at(start + i);
156
- const [lon, lat] = nodeIndex.getNodeLonLat({ id: ref });
210
+ const [lon, lat] = this.nodes.getNodeLonLat({ id: ref });
157
211
  line[i * 2] = lon;
158
212
  line[i * 2 + 1] = lat;
159
213
  }
160
214
  return line;
161
215
  }
162
- getCoordinates(index, nodeIndex) {
216
+ /**
217
+ * Get the coordinates of a way as an array of [lon, lat] pairs.
218
+ */
219
+ getCoordinates(index) {
163
220
  const count = this.refCount.at(index);
164
221
  const start = this.refStart.at(index);
165
222
  const coords = [];
166
223
  for (let refIndex = start; refIndex < start + count; refIndex++) {
167
224
  const ref = this.refs.at(refIndex);
168
- const coord = nodeIndex.getNodeLonLat({ id: ref });
225
+ const coord = this.nodes.getNodeLonLat({ id: ref });
169
226
  if (coord === undefined ||
170
227
  coord[0] === undefined ||
171
228
  coord[1] === undefined) {
172
- console.error("node index has ref", nodeIndex.ids.has(ref));
229
+ console.error("node index has ref", this.nodes.ids.has(ref));
173
230
  throw Error(`Invalid coordinate for way id ${this.ids.at(index)}, index ${index}, node ref ${ref}, ref index ${refIndex}`);
174
231
  }
175
232
  coords.push(coord);
176
233
  }
177
234
  return coords;
178
235
  }
236
+ /**
237
+ * Find way indexes that intersect a bounding box.
238
+ */
179
239
  intersects(bbox, filterFn) {
240
+ if (this.size === 0)
241
+ return [];
180
242
  return this.spatialIndex.search(bbox[0], bbox[1], bbox[2], bbox[3], filterFn);
181
243
  }
182
- neighbors(x, y, maxResults, maxDistance) {
183
- return this.spatialIndex.neighbors(x, y, maxResults, maxDistance);
244
+ /**
245
+ * Find way indexes near a point using great-circle distance.
246
+ * @param lon - Longitude in degrees.
247
+ * @param lat - Latitude in degrees.
248
+ * @param maxResults - Maximum number of results to return.
249
+ * @param maxDistanceKm - Maximum distance in kilometers.
250
+ * @returns Array of way indexes sorted by distance.
251
+ */
252
+ neighbors(lon, lat, maxResults, maxDistanceKm) {
253
+ if (this.size === 0)
254
+ return [];
255
+ // Use geoflatbush for proper geographic distance calculations
256
+ return geoAround(this.spatialIndex, lon, lat, maxResults, maxDistanceKm);
257
+ }
258
+ /**
259
+ * Get ways within a bounding box.
260
+ */
261
+ withinBbox(bbox, include) {
262
+ console.time("Ways.withinBbox");
263
+ const wayCandidates = this.intersects(bbox, include);
264
+ const ids = new Float64Array(wayCandidates.length);
265
+ const wayPositions = [];
266
+ const wayStartIndices = new Uint32Array(wayCandidates.length + 1);
267
+ wayStartIndices[0] = 0;
268
+ console.time("Ways.withinBbox.loop");
269
+ let size = 0;
270
+ wayCandidates.forEach((wayIndex, i) => {
271
+ ids[i] = this.ids.at(wayIndex);
272
+ const way = this.getLine(wayIndex);
273
+ size += way.length;
274
+ wayPositions.push(way);
275
+ const prevIndex = wayStartIndices[i];
276
+ if (prevIndex === undefined)
277
+ throw Error("Previous index is undefined");
278
+ wayStartIndices[i + 1] = prevIndex + way.length / 2;
279
+ });
280
+ console.timeEnd("Ways.withinBbox.loop");
281
+ const wayPositionsArray = new Float64Array(size);
282
+ let pIndex = 0;
283
+ for (const way of wayPositions) {
284
+ wayPositionsArray.set(way, pIndex);
285
+ pIndex += way.length;
286
+ }
287
+ console.timeEnd("Ways.withinBbox");
288
+ return {
289
+ ids,
290
+ positions: wayPositionsArray,
291
+ startIndices: wayStartIndices,
292
+ };
293
+ }
294
+ /**
295
+ * Get transferable objects for passing to another thread.
296
+ * Only includes spatialIndex if it has been built.
297
+ */
298
+ transferables() {
299
+ const base = {
300
+ ...super.transferables(),
301
+ refStart: this.refStart.array.buffer,
302
+ refCount: this.refCount.array.buffer,
303
+ refs: this.refs.array.buffer,
304
+ bbox: this.bbox.array.buffer,
305
+ };
306
+ // Only include spatial index if it was built
307
+ if (this.spatialIndexBuilt) {
308
+ return { ...base, spatialIndex: this.spatialIndex.data };
309
+ }
310
+ return base;
311
+ }
312
+ /**
313
+ * Get the approximate memory requirements for a given number of ways in bytes.
314
+ */
315
+ static getBytesRequired(count) {
316
+ if (count === 0)
317
+ return 0;
318
+ // Approximate nodes per way
319
+ let numNodes = count;
320
+ let n = count;
321
+ while (n !== 1) {
322
+ n = Math.ceil(n / 128);
323
+ numNodes += n;
324
+ }
325
+ const indexBytes = (numNodes < 16384 ? 2 : 4) * numNodes;
326
+ const boxesBytes = numNodes * 4 * Float64Array.BYTES_PER_ELEMENT;
327
+ const spatialIndexBytes = 8 + indexBytes + boxesBytes;
328
+ return (Ids.getBytesRequired(count) +
329
+ Tags.getBytesRequired(count) +
330
+ count * Uint32Array.BYTES_PER_ELEMENT + // refStart
331
+ count * Uint16Array.BYTES_PER_ELEMENT + // refCount
332
+ count * 4 * Float64Array.BYTES_PER_ELEMENT + // bbox
333
+ spatialIndexBytes);
334
+ }
335
+ /**
336
+ * Update a ContentHasher with way-specific data (node references).
337
+ */
338
+ updateHash(hasher) {
339
+ return super
340
+ .updateHash(hasher)
341
+ .update(this.refStart.array)
342
+ .update(this.refCount.array)
343
+ .update(this.refs.array);
184
344
  }
185
345
  }
186
346
  //# sourceMappingURL=ways.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ways.js","sourceRoot":"","sources":["../../src/ways.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ways.js","sourceRoot":"","sources":["../../src/ways.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function getOsmCoreMemoryRequirements(nodeCount: number, wayCount: number, relationCount: number): {
2
+ nodes: number;
3
+ ways: number;
4
+ relations: number;
5
+ total: number;
6
+ };
7
+ //# sourceMappingURL=memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../test/memory.test.ts"],"names":[],"mappings":"AAGA,wBAAgB,4BAA4B,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM;;;;;EAYrB"}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { Nodes, Relations, Ways } from "../src";
3
+ export function getOsmCoreMemoryRequirements(nodeCount, wayCount, relationCount) {
4
+ const nodesBytes = Nodes.getBytesRequired(nodeCount);
5
+ const waysBytes = Ways.getBytesRequired(wayCount);
6
+ const relationsBytes = Relations.getBytesRequired(relationCount);
7
+ return {
8
+ nodes: nodesBytes,
9
+ ways: waysBytes,
10
+ relations: relationsBytes,
11
+ total: nodesBytes + waysBytes + relationsBytes,
12
+ };
13
+ }
14
+ describe("Memory Requirements", () => {
15
+ it("computes memory requirements for small datasets", () => {
16
+ const breakdown = getOsmCoreMemoryRequirements(10, 2, 1);
17
+ expect(breakdown.nodes).toBeGreaterThan(0);
18
+ expect(breakdown.ways).toBeGreaterThan(0);
19
+ expect(breakdown.relations).toBeGreaterThan(0);
20
+ expect(breakdown.total).toBe(breakdown.nodes + breakdown.ways + breakdown.relations);
21
+ });
22
+ it("computes memory requirements for large datasets", () => {
23
+ const breakdown = getOsmCoreMemoryRequirements(70000, 20000, 0);
24
+ expect(breakdown.nodes).toBeGreaterThan(0);
25
+ expect(breakdown.ways).toBeGreaterThan(0);
26
+ expect(breakdown.total).toBe(breakdown.nodes + breakdown.ways);
27
+ });
28
+ });
29
+ //# sourceMappingURL=memory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../test/memory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,MAAM,UAAU,4BAA4B,CAC3C,SAAiB,EACjB,QAAgB,EAChB,aAAqB;IAErB,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACjD,MAAM,cAAc,GAAG,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAEhE,OAAO;QACN,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc;KAC9C,CAAA;AACF,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,4BAA4B,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3B,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CACtD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC/D,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -1,13 +1,13 @@
1
- import { Osmix } from "../src/osmix";
1
+ import { Osm } from "../src/osm";
2
2
  /**
3
3
  * Create a base OSM with one way and two nodes.
4
4
  */
5
- export declare function createBaseOsm(): Osmix;
5
+ export declare function createBaseOsm(): Osm;
6
6
  /**
7
7
  * Create a patch OSM with:
8
8
  * - The same way as the base OSM, with new tags
9
9
  * - A way that has an overlapping node with the first way, but does not share a node and so starts disconnected
10
10
  * - A way that crosses over the first way, but does not share a node and so starts disconnected
11
11
  */
12
- export declare function createPatchOsm(): Osmix;
12
+ export declare function createPatchOsm(): Osm;
13
13
  //# sourceMappingURL=mock-osm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-osm.d.ts","sourceRoot":"","sources":["../../test/mock-osm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAmCpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAOrC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAqFtC"}
1
+ {"version":3,"file":"mock-osm.d.ts","sourceRoot":"","sources":["../../test/mock-osm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAmChC;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAOnC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAqFpC"}
@@ -1,4 +1,4 @@
1
- import { Osmix } from "../src/osmix";
1
+ import { Osm } from "../src/osm";
2
2
  const YAKIM_LAT = 46.60207;
3
3
  const YAKIM_LON = -120.505898;
4
4
  const ONE_KM_LON = 0.0131; // approximately
@@ -30,7 +30,7 @@ function addBaseWays(osm) {
30
30
  * Create a base OSM with one way and two nodes.
31
31
  */
32
32
  export function createBaseOsm() {
33
- const base = new Osmix();
33
+ const base = new Osm();
34
34
  addBaseNodes(base);
35
35
  base.nodes.buildIndex();
36
36
  addBaseWays(base);
@@ -44,7 +44,7 @@ export function createBaseOsm() {
44
44
  * - A way that crosses over the first way, but does not share a node and so starts disconnected
45
45
  */
46
46
  export function createPatchOsm() {
47
- const osm = new Osmix();
47
+ const osm = new Osm();
48
48
  addBaseNodes(osm);
49
49
  // Add way the connects with base way node 0 (will replace it)
50
50
  osm.nodes.addNode({
@@ -1 +1 @@
1
- {"version":3,"file":"mock-osm.js","sourceRoot":"","sources":["../../test/mock-osm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-osm.js","sourceRoot":"","sources":["../../test/mock-osm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tags-search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags-search.test.d.ts","sourceRoot":"","sources":["../../test/tags-search.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { Nodes } from "../src/nodes";
3
+ import StringTable from "../src/stringtable";
4
+ import { Ways } from "../src/ways";
5
+ describe("Tags.search on Nodes", () => {
6
+ it("finds by key and key+value", () => {
7
+ const st = new StringTable();
8
+ const nodes = new Nodes(st);
9
+ const node1 = { id: 1, lon: -1, lat: 1, tags: { curb: "yes" } };
10
+ const node2 = { id: 2, lon: -2, lat: 2, tags: { curb: "no" } };
11
+ const node3 = { id: 3, lon: -3, lat: 3 };
12
+ nodes.addNode(node1);
13
+ nodes.addNode(node2);
14
+ nodes.addNode(node3);
15
+ nodes.buildIndex();
16
+ const allCurb = nodes.search("curb");
17
+ expect(allCurb).toEqual([node1, node2]);
18
+ const curbYes = nodes.search("curb", "yes");
19
+ expect(curbYes).toEqual([node1]);
20
+ const curbNo = nodes.search("curb", "no");
21
+ expect(curbNo).toEqual([node2]);
22
+ const none = nodes.search("highway");
23
+ expect(none).toEqual([]);
24
+ });
25
+ });
26
+ describe("Tags.search on Ways", () => {
27
+ it("finds by key and key+value", () => {
28
+ const st = new StringTable();
29
+ const nodes = new Nodes(st);
30
+ const ways = new Ways(st, nodes);
31
+ const way1 = {
32
+ id: 10,
33
+ refs: [1, 2],
34
+ tags: { highway: "residential" },
35
+ };
36
+ const way2 = { id: 11, refs: [2, 3], tags: { area: "yes" } };
37
+ const way3 = {
38
+ id: 12,
39
+ refs: [3, 4],
40
+ tags: { highway: "primary", area: "no" },
41
+ };
42
+ ways.addWay(way1);
43
+ ways.addWay(way2);
44
+ ways.addWay(way3);
45
+ ways.buildIndex();
46
+ const allHighway = ways.search("highway");
47
+ expect(allHighway).toEqual([way1, way3]);
48
+ const areaYes = ways.search("area", "yes");
49
+ expect(areaYes).toEqual([way2]);
50
+ const areaAll = ways.search("area");
51
+ expect(areaAll).toEqual([way2, way3]);
52
+ const areaNo = ways.search("area", "no");
53
+ expect(areaNo).toEqual([way3]);
54
+ });
55
+ });
56
+ //# sourceMappingURL=tags-search.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags-search.test.js","sourceRoot":"","sources":["../../test/tags-search.test.ts"],"names":[],"mappings":"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"}