@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
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/entities.ts"],"names":[],"mappings":"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"}
package/dist/src/ids.d.ts CHANGED
@@ -1,37 +1,84 @@
1
+ /**
2
+ * ID storage and lookup for OSM entities.
3
+ *
4
+ * Uses a two-level binary search (anchor array + block search) to map 64-bit OSM IDs
5
+ * to internal array indices. Balances memory usage with O(log n) lookup speed.
6
+ *
7
+ * @module
8
+ */
1
9
  import { type BufferType } from "./typed-arrays";
10
+ import type { ContentHasher } from "./utils";
11
+ /**
12
+ * Union type for looking up entities by either OSM ID or internal array index.
13
+ */
2
14
  export type IdOrIndex = {
3
15
  id: number;
4
16
  } | {
5
17
  index: number;
6
18
  };
7
- export interface IdsTransferables {
8
- ids: BufferType;
9
- sortedIds: BufferType;
10
- sortedIdPositionToIndex: BufferType;
11
- anchors: BufferType;
19
+ /**
20
+ * Serializable state for worker transfer.
21
+ */
22
+ export interface IdsTransferables<T extends BufferType = BufferType> {
23
+ /** Entity IDs in insertion order. */
24
+ ids: T;
25
+ /** Sorted IDs for binary search (aliases `ids` if already sorted). */
26
+ sortedIds: T;
27
+ /** Maps sorted position → original insertion index. */
28
+ sortedIdPositionToIndex: T;
29
+ /** Anchor array: every BLOCK_SIZE-th sorted ID. */
30
+ anchors: T;
31
+ /** True if IDs were inserted in ascending order. */
12
32
  idsAreSorted: boolean;
13
33
  }
14
34
  /**
15
- * Efficiently store and lookup IDs.
35
+ * Efficiently store and lookup OSM entity IDs.
16
36
  *
17
- * This is used to store IDs in a sorted array and then use binary search to find the index of an ID.
18
- * Maps max out at 2^32 IDs.
37
+ * Stores 64-bit IDs in a Float64Array and maintains a sorted index for O(log n) lookups.
38
+ * Max capacity: ~2^32 entities.
19
39
  */
20
40
  export declare class Ids {
41
+ /** All IDs in insertion order */
21
42
  private ids;
43
+ /** Whether buildIndex() has been called */
22
44
  private indexBuilt;
45
+ /** True if IDs were added in ascending order (allows index optimization) */
23
46
  private idsAreSorted;
47
+ /** Sorted view of IDs for binary search */
24
48
  private idsSorted;
49
+ /** Maps position in sorted array → original insertion index */
25
50
  private sortedIdPositionToIndex;
51
+ /** Anchor array for two-level binary search: every BLOCK_SIZE-th sorted ID */
26
52
  private anchors;
27
- static from({ ids, sortedIds, sortedIdPositionToIndex, anchors, idsAreSorted, }: IdsTransferables): Ids;
28
- constructor();
29
- transferables(): IdsTransferables;
53
+ /**
54
+ * Create a new Ids index.
55
+ * @param transferables - Optional serialized state to reconstruct from.
56
+ */
57
+ constructor(transferables?: IdsTransferables);
58
+ /** Number of IDs stored in this index. */
30
59
  get size(): number;
31
- get isReady(): boolean;
60
+ /** Returns true if buildIndex() has been called and lookups are enabled. */
61
+ isReady(): boolean;
62
+ /** Returns true if IDs were inserted in ascending order. */
32
63
  isSorted(): boolean;
33
- add(id: number): void;
64
+ /**
65
+ * Add an ID to the index.
66
+ * @param id - The OSM entity ID to add.
67
+ * @returns The internal array index where this ID was stored.
68
+ * @throws If the index has already been built.
69
+ */
70
+ add(id: number): number;
71
+ /**
72
+ * Get the ID at a specific internal index.
73
+ * @param index - The internal array index.
74
+ * @returns The OSM entity ID at that index.
75
+ */
34
76
  at(index: number): number;
77
+ /**
78
+ * Check if an ID exists in this index.
79
+ * @param id - The OSM entity ID to check.
80
+ * @returns True if the ID exists in this index.
81
+ */
35
82
  has(id: number): boolean;
36
83
  /**
37
84
  * Build the index of IDs to positions.
@@ -40,11 +87,33 @@ export declare class Ids {
40
87
  * If the IDs are sorted, we can use the existing index.
41
88
  */
42
89
  buildIndex(): void;
90
+ /**
91
+ * Look up the internal array index for an OSM entity ID.
92
+ *
93
+ * @param id - The OSM entity ID to look up.
94
+ * @returns The internal array index, or -1 if not found.
95
+ * @throws If the index has not been built.
96
+ */
43
97
  getIndexFromId(id: number): number;
44
98
  /**
45
99
  * Pass an ID or an index, get both.
46
100
  */
47
101
  idOrIndex(i: IdOrIndex): [index: number, id: number];
102
+ /** Returns the sorted array of IDs for iteration. */
48
103
  get sorted(): Float64Array<ArrayBufferLike>;
104
+ /**
105
+ * Get transferable buffers for passing to another thread.
106
+ * @returns Serializable representation of this index.
107
+ */
108
+ transferables(): IdsTransferables;
109
+ /**
110
+ * Get the approximate memory requirements for a given number of IDs in bytes.
111
+ */
112
+ static getBytesRequired(count: number): number;
113
+ /**
114
+ * Update a ContentHasher with the IDs data.
115
+ * Uses the sorted IDs for consistent hashing regardless of insertion order.
116
+ */
117
+ updateHash(hasher: ContentHasher): ContentHasher;
49
118
  }
50
119
  //# sourceMappingURL=ids.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAI1D,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,UAAU,CAAA;IACf,SAAS,EAAE,UAAU,CAAA;IACrB,uBAAuB,EAAE,UAAU,CAAA;IACnC,OAAO,EAAE,UAAU,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;CACrB;AAED;;;;;GAKG;AACH,qBAAa,GAAG;IACf,OAAO,CAAC,GAAG,CAAoC;IAC/C,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,uBAAuB,CAAa;IAC5C,OAAO,CAAC,OAAO,CAAc;IAE7B,MAAM,CAAC,IAAI,CAAC,EACX,GAAG,EACH,SAAS,EACT,uBAAuB,EACvB,OAAO,EACP,YAAY,GACZ,EAAE,gBAAgB;;IAkBnB,aAAa,IAAI,gBAAgB;IAUjC,IAAI,IAAI,WAEP;IAED,IAAI,OAAO,YAEV;IAED,QAAQ;IAIR,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMrB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;;;OAKG;IACH,UAAU;IA8DV,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAqClC;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC;IAKpD,IAAI,MAAM,kCAET;CACD"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAS1D;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAClE,qCAAqC;IACrC,GAAG,EAAE,CAAC,CAAA;IACN,sEAAsE;IACtE,SAAS,EAAE,CAAC,CAAA;IACZ,uDAAuD;IACvD,uBAAuB,EAAE,CAAC,CAAA;IAC1B,mDAAmD;IACnD,OAAO,EAAE,CAAC,CAAA;IACV,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAA;CACrB;AAED;;;;;GAKG;AACH,qBAAa,GAAG;IACf,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAmB;IAC9B,2CAA2C;IAC3C,OAAO,CAAC,UAAU,CAAQ;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAAO;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,SAAS,CAAc;IAC/B,+DAA+D;IAC/D,OAAO,CAAC,uBAAuB,CAAa;IAC5C,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAc;IAE7B;;;OAGG;gBACS,aAAa,CAAC,EAAE,gBAAgB;IAkB5C,0CAA0C;IAC1C,IAAI,IAAI,WAEP;IAED,4EAA4E;IAC5E,OAAO;IAIP,4DAA4D;IAC5D,QAAQ;IAIR;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAMvB;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;;;OAKG;IACH,UAAU;IA6DV;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAqClC;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC;IAKpD,qDAAqD;IACrD,IAAI,MAAM,kCAET;IAED;;;OAGG;IACH,aAAa,IAAI,gBAAgB;IAUjC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAUrC;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAGhD"}
package/dist/src/ids.js CHANGED
@@ -1,63 +1,96 @@
1
+ /**
2
+ * ID storage and lookup for OSM entities.
3
+ *
4
+ * Uses a two-level binary search (anchor array + block search) to map 64-bit OSM IDs
5
+ * to internal array indices. Balances memory usage with O(log n) lookup speed.
6
+ *
7
+ * @module
8
+ */
1
9
  import { assertValue } from "@osmix/shared/assert";
2
- import { BufferConstructor, ResizeableTypedArray, } from "./typed-arrays";
10
+ import { BufferConstructor, ResizeableTypedArray as RTA, } from "./typed-arrays";
11
+ /**
12
+ * Number of IDs per anchor block for the two-level binary search.
13
+ * Smaller values increase anchor array size but speed up block-level search;
14
+ * larger values reduce anchor overhead but slow the final search.
15
+ */
3
16
  const BLOCK_SIZE = 256;
4
17
  /**
5
- * Efficiently store and lookup IDs.
18
+ * Efficiently store and lookup OSM entity IDs.
6
19
  *
7
- * This is used to store IDs in a sorted array and then use binary search to find the index of an ID.
8
- * Maps max out at 2^32 IDs.
20
+ * Stores 64-bit IDs in a Float64Array and maintains a sorted index for O(log n) lookups.
21
+ * Max capacity: ~2^32 entities.
9
22
  */
10
23
  export class Ids {
24
+ /** All IDs in insertion order */
11
25
  ids;
26
+ /** Whether buildIndex() has been called */
12
27
  indexBuilt = false;
28
+ /** True if IDs were added in ascending order (allows index optimization) */
13
29
  idsAreSorted = true;
30
+ /** Sorted view of IDs for binary search */
14
31
  idsSorted;
32
+ /** Maps position in sorted array → original insertion index */
15
33
  sortedIdPositionToIndex;
34
+ /** Anchor array for two-level binary search: every BLOCK_SIZE-th sorted ID */
16
35
  anchors;
17
- static from({ ids, sortedIds, sortedIdPositionToIndex, anchors, idsAreSorted, }) {
18
- const idIndex = new Ids();
19
- idIndex.ids = ResizeableTypedArray.from(Float64Array, ids);
20
- idIndex.idsSorted = new Float64Array(sortedIds);
21
- idIndex.sortedIdPositionToIndex = new Uint32Array(sortedIdPositionToIndex);
22
- idIndex.anchors = new Float64Array(anchors);
23
- idIndex.indexBuilt = true;
24
- idIndex.idsAreSorted = idsAreSorted;
25
- return idIndex;
26
- }
27
- constructor() {
28
- this.ids = new ResizeableTypedArray(Float64Array);
29
- this.idsSorted = new Float64Array(new BufferConstructor(0));
30
- this.sortedIdPositionToIndex = new Uint32Array(new BufferConstructor(0));
31
- this.anchors = new Float64Array(new BufferConstructor(0));
32
- }
33
- transferables() {
34
- return {
35
- ids: this.ids.array.buffer,
36
- sortedIds: this.idsSorted.buffer,
37
- sortedIdPositionToIndex: this.sortedIdPositionToIndex.buffer,
38
- anchors: this.anchors.buffer,
39
- idsAreSorted: this.idsAreSorted,
40
- };
36
+ /**
37
+ * Create a new Ids index.
38
+ * @param transferables - Optional serialized state to reconstruct from.
39
+ */
40
+ constructor(transferables) {
41
+ if (transferables) {
42
+ this.ids = RTA.from(Float64Array, transferables.ids);
43
+ this.idsSorted = new Float64Array(transferables.sortedIds);
44
+ this.sortedIdPositionToIndex = new Uint32Array(transferables.sortedIdPositionToIndex);
45
+ this.anchors = new Float64Array(transferables.anchors);
46
+ this.idsAreSorted = transferables.idsAreSorted;
47
+ this.indexBuilt = true;
48
+ }
49
+ else {
50
+ this.ids = new RTA(Float64Array);
51
+ this.idsSorted = new Float64Array(new BufferConstructor(0));
52
+ this.sortedIdPositionToIndex = new Uint32Array(new BufferConstructor(0));
53
+ this.anchors = new Float64Array(new BufferConstructor(0));
54
+ }
41
55
  }
56
+ /** Number of IDs stored in this index. */
42
57
  get size() {
43
58
  return this.ids.length;
44
59
  }
45
- get isReady() {
60
+ /** Returns true if buildIndex() has been called and lookups are enabled. */
61
+ isReady() {
46
62
  return this.indexBuilt;
47
63
  }
64
+ /** Returns true if IDs were inserted in ascending order. */
48
65
  isSorted() {
49
66
  return this.idsAreSorted;
50
67
  }
68
+ /**
69
+ * Add an ID to the index.
70
+ * @param id - The OSM entity ID to add.
71
+ * @returns The internal array index where this ID was stored.
72
+ * @throws If the index has already been built.
73
+ */
51
74
  add(id) {
52
75
  if (this.indexBuilt)
53
76
  throw Error("ID index already built.");
54
77
  if (this.ids.length > 0 && id < this.ids.at(-1))
55
78
  this.idsAreSorted = false;
56
- this.ids.push(id);
79
+ return this.ids.push(id);
57
80
  }
81
+ /**
82
+ * Get the ID at a specific internal index.
83
+ * @param index - The internal array index.
84
+ * @returns The OSM entity ID at that index.
85
+ */
58
86
  at(index) {
59
87
  return this.ids.at(index);
60
88
  }
89
+ /**
90
+ * Check if an ID exists in this index.
91
+ * @param id - The OSM entity ID to check.
92
+ * @returns True if the ID exists in this index.
93
+ */
61
94
  has(id) {
62
95
  return this.getIndexFromId(id) !== -1;
63
96
  }
@@ -116,7 +149,13 @@ export class Ids {
116
149
  }
117
150
  this.indexBuilt = true;
118
151
  }
119
- // Lookup id → index
152
+ /**
153
+ * Look up the internal array index for an OSM entity ID.
154
+ *
155
+ * @param id - The OSM entity ID to look up.
156
+ * @returns The internal array index, or -1 if not found.
157
+ * @throws If the index has not been built.
158
+ */
120
159
  getIndexFromId(id) {
121
160
  if (!this.indexBuilt)
122
161
  throw Error("IdIndex not built.");
@@ -164,8 +203,41 @@ export class Ids {
164
203
  return [this.getIndexFromId(i.id), i.id];
165
204
  return [i.index, this.at(i.index)];
166
205
  }
206
+ /** Returns the sorted array of IDs for iteration. */
167
207
  get sorted() {
168
208
  return this.idsSorted;
169
209
  }
210
+ /**
211
+ * Get transferable buffers for passing to another thread.
212
+ * @returns Serializable representation of this index.
213
+ */
214
+ transferables() {
215
+ return {
216
+ ids: this.ids.array.buffer,
217
+ sortedIds: this.idsSorted.buffer,
218
+ sortedIdPositionToIndex: this.sortedIdPositionToIndex.buffer,
219
+ anchors: this.anchors.buffer,
220
+ idsAreSorted: this.idsAreSorted,
221
+ };
222
+ }
223
+ /**
224
+ * Get the approximate memory requirements for a given number of IDs in bytes.
225
+ */
226
+ static getBytesRequired(count) {
227
+ if (count === 0)
228
+ return 0;
229
+ return (count * Float64Array.BYTES_PER_ELEMENT + // ids
230
+ count * Float64Array.BYTES_PER_ELEMENT + // sortedIds
231
+ count * Uint32Array.BYTES_PER_ELEMENT + // sortedIdPositionToIndex
232
+ Math.ceil(count / BLOCK_SIZE) * Float64Array.BYTES_PER_ELEMENT // anchors
233
+ );
234
+ }
235
+ /**
236
+ * Update a ContentHasher with the IDs data.
237
+ * Uses the sorted IDs for consistent hashing regardless of insertion order.
238
+ */
239
+ updateHash(hasher) {
240
+ return hasher.update(this.idsSorted);
241
+ }
170
242
  }
171
243
  //# sourceMappingURL=ids.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,32 @@
1
- export { Nodes } from "./nodes";
2
- export { Osmix } from "./osmix";
3
- export { Relations } from "./relations";
4
- export { throttle } from "./utils";
5
- export { Ways } from "./ways";
1
+ /**
2
+ * @osmix/core - In-memory OSM entity storage with spatial indexing.
3
+ *
4
+ * Efficiently stores and queries OpenStreetMap entities (nodes, ways, relations).
5
+ *
6
+ * Features:
7
+ * - **Memory-efficient**: Uses typed arrays and Int32Array microdegrees.
8
+ * - **Spatial indexing**: KDBush (points) and Flatbush (bboxes) for fast geographic queries.
9
+ * - **Worker-ready**: Zero-copy transfer via `transferables()`.
10
+ * - **Tag indexing**: Fast reverse lookup by tag key.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { Osm } from "@osmix/core"
15
+ * const osm = new Osm({ id: "example" })
16
+ * osm.nodes.addNode({ id: 1, lon: -122.4, lat: 47.6, tags: { name: "Seattle" } })
17
+ * osm.buildIndexes()
18
+ * osm.buildSpatialIndexes()
19
+ * const nearby = osm.nodes.findIndexesWithinRadius(-122.4, 47.6, 10)
20
+ * ```
21
+ *
22
+ * @module @osmix/core
23
+ */
24
+ export * from "./nodes";
25
+ export * from "./osm";
26
+ export * from "./relations";
27
+ export * from "./stringtable";
28
+ export * from "./tags";
29
+ export { BufferConstructor, type BufferType } from "./typed-arrays";
30
+ export * from "./utils";
31
+ export * from "./ways";
6
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACnE,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA"}
package/dist/src/index.js CHANGED
@@ -1,7 +1,35 @@
1
+ /**
2
+ * @osmix/core - In-memory OSM entity storage with spatial indexing.
3
+ *
4
+ * Efficiently stores and queries OpenStreetMap entities (nodes, ways, relations).
5
+ *
6
+ * Features:
7
+ * - **Memory-efficient**: Uses typed arrays and Int32Array microdegrees.
8
+ * - **Spatial indexing**: KDBush (points) and Flatbush (bboxes) for fast geographic queries.
9
+ * - **Worker-ready**: Zero-copy transfer via `transferables()`.
10
+ * - **Tag indexing**: Fast reverse lookup by tag key.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { Osm } from "@osmix/core"
15
+ * const osm = new Osm({ id: "example" })
16
+ * osm.nodes.addNode({ id: 1, lon: -122.4, lat: 47.6, tags: { name: "Seattle" } })
17
+ * osm.buildIndexes()
18
+ * osm.buildSpatialIndexes()
19
+ * const nearby = osm.nodes.findIndexesWithinRadius(-122.4, 47.6, 10)
20
+ * ```
21
+ *
22
+ * @module @osmix/core
23
+ */
1
24
  /// <reference path="./types/kdbush.d.ts" />
2
- export { Nodes } from "./nodes";
3
- export { Osmix } from "./osmix";
4
- export { Relations } from "./relations";
5
- export { throttle } from "./utils";
6
- export { Ways } from "./ways";
25
+ /// <reference path="./types/geokdbush.d.ts" />
26
+ /// <reference path="./types/geoflatbush.d.ts" />
27
+ export * from "./nodes";
28
+ export * from "./osm";
29
+ export * from "./relations";
30
+ export * from "./stringtable";
31
+ export * from "./tags";
32
+ export { BufferConstructor } from "./typed-arrays";
33
+ export * from "./utils"; // TODO Move into shared?
34
+ export * from "./ways";
7
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4CAA4C;AAC5C,+CAA+C;AAC/C,iDAAiD;AAEjD,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAA;AACnE,cAAc,SAAS,CAAA,CAAC,yBAAyB;AACjD,cAAc,QAAQ,CAAA"}
@@ -1,36 +1,106 @@
1
- import type { OsmNode, OsmTags } from "@osmix/json";
2
1
  import type { OsmPbfBlock, OsmPbfDenseNodes } from "@osmix/pbf";
3
- import type { GeoBbox2D } from "@osmix/shared/types";
4
- import KDBush from "kdbush";
2
+ import type { GeoBbox2D, OsmNode, OsmTags } from "@osmix/shared/types";
5
3
  import { Entities, type EntitiesTransferables } from "./entities";
6
- import { type IdOrIndex, Ids } from "./ids";
4
+ import { type IdOrIndex } from "./ids";
7
5
  import type StringTable from "./stringtable";
8
- import { Tags } from "./tags";
9
- import { type BufferType, ResizeableTypedArray } from "./typed-arrays";
10
- export interface NodesTransferables extends EntitiesTransferables {
11
- lons: BufferType;
12
- lats: BufferType;
6
+ import { type BufferType } from "./typed-arrays";
7
+ import type { ContentHasher } from "./utils";
8
+ export interface NodesTransferables<T extends BufferType = BufferType> extends EntitiesTransferables<T> {
9
+ lons: T;
10
+ lats: T;
13
11
  bbox: GeoBbox2D;
14
- spatialIndex: BufferType;
12
+ /** Optional - can be rebuilt via buildSpatialIndex() */
13
+ spatialIndex?: T;
15
14
  }
16
15
  export interface AddNodeOptions {
17
16
  filter?: (node: OsmNode) => boolean;
18
17
  }
19
18
  export declare class Nodes extends Entities<OsmNode> {
20
- lons: ResizeableTypedArray<Float64Array>;
21
- lats: ResizeableTypedArray<Float64Array>;
22
- bbox: GeoBbox2D;
23
- spatialIndex: KDBush;
24
- static from(stringTable: StringTable, nits: NodesTransferables): Nodes;
25
- constructor(stringTable: StringTable, idIndex?: Ids, tagIndex?: Tags);
26
- transferables(): NodesTransferables;
27
- addNode(node: OsmNode): void;
28
- addDenseNodes(dense: OsmPbfDenseNodes, block: OsmPbfBlock, blockStringIndexMap: Map<number, number>, filter?: (node: OsmNode) => boolean): number;
19
+ /**
20
+ * Coordinates are stored as integer microdegrees (Int32Array).
21
+ * Use OSM_COORD_SCALE (1e7) to convert between degrees and microdegrees.
22
+ */
23
+ private lons;
24
+ private lats;
25
+ private bbox;
26
+ private spatialIndex;
27
+ private spatialIndexBuilt;
28
+ /**
29
+ * Create a new Nodes index.
30
+ */
31
+ constructor(stringTable: StringTable, transferables?: NodesTransferables);
32
+ /**
33
+ * Add a single node to the index.
34
+ */
35
+ addNode(node: OsmNode): number;
36
+ /**
37
+ * Add dense nodes from a PBF block.
38
+ */
39
+ addDenseNodes(dense: OsmPbfDenseNodes, block: OsmPbfBlock, blockStringIndexMap: Uint32Array, filter?: (node: OsmNode) => boolean): number;
40
+ /**
41
+ * Compact the internal arrays to free up memory.
42
+ */
29
43
  buildEntityIndex(): void;
44
+ /**
45
+ * Build the spatial index for nodes.
46
+ * Spatial index stores degrees (Float64Array) for geokdbush compatibility.
47
+ */
30
48
  buildSpatialIndex(): void;
49
+ /**
50
+ * Check if the spatial index has been built.
51
+ */
52
+ hasSpatialIndex(): boolean;
53
+ /**
54
+ * Get the bounding box of all nodes.
55
+ */
56
+ getBbox(): GeoBbox2D;
57
+ /**
58
+ * Get the bounding box of a specific node.
59
+ */
60
+ getEntityBbox(i: IdOrIndex): GeoBbox2D;
61
+ /**
62
+ * Get the longitude and latitude of a specific node.
63
+ */
31
64
  getNodeLonLat(i: IdOrIndex): [number, number];
65
+ /**
66
+ * Get the full node entity.
67
+ */
32
68
  getFullEntity(index: number, id: number, tags?: OsmTags): OsmNode;
33
- withinBbox(bbox: GeoBbox2D): number[];
34
- withinRadius(x: number, y: number, radius: number): number[];
69
+ /**
70
+ * Find node indexes within a bounding box.
71
+ */
72
+ findIndexesWithinBbox(bbox: GeoBbox2D): number[];
73
+ /**
74
+ * Find node indexes within a radius of a point.
75
+ * Uses geokdbush for proper great-circle distance calculations.
76
+ * @param lon - Longitude in degrees.
77
+ * @param lat - Latitude in degrees.
78
+ * @param radiusKm - Radius in kilometers.
79
+ * @returns Array of node indexes within the radius.
80
+ */
81
+ findIndexesWithinRadius(lon: number, lat: number, radiusKm: number): number[];
82
+ /**
83
+ * Get nodes within a bounding box.
84
+ * @param bbox - The bounding box to search within.
85
+ * @param include - A function to filter nodes. If provided, only nodes for which the function returns true will be included.
86
+ * @returns An object containing the IDs and positions of the nodes within the bounding box.
87
+ */
88
+ withinBbox(bbox: GeoBbox2D, include?: (i: number) => boolean): {
89
+ ids: Float64Array;
90
+ positions: Float64Array;
91
+ };
92
+ /**
93
+ * Get transferable objects for passing to another thread.
94
+ * Only includes spatialIndex if it has been built.
95
+ */
96
+ transferables(): NodesTransferables;
97
+ /**
98
+ * Get the approximate memory requirements for a given number of nodes in bytes.
99
+ */
100
+ static getBytesRequired(count: number): number;
101
+ /**
102
+ * Update a ContentHasher with node-specific data (coordinates).
103
+ */
104
+ updateHash(hasher: ContentHasher): ContentHasher;
35
105
  }
36
106
  //# sourceMappingURL=nodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAEN,KAAK,UAAU,EAEf,oBAAoB,EACpB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAChE,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,SAAS,CAAA;IACf,YAAY,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;CACnC;AAED,qBAAa,KAAM,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAC3C,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,EAAE,SAAS,CAKd;IACD,YAAY,EAAE,MAAM,CAAsD;IAE1E,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB;gBAWlD,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAI;IAMpE,aAAa,IAAI,kBAAkB;IAWnC,OAAO,CAAC,IAAI,EAAE,OAAO;IAarB,aAAa,CACZ,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,WAAW,EAClB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACjC,MAAM;IA+ET,gBAAgB;IAKhB,iBAAiB;IAejB,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAK7C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBjE,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE;IAIrC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAG5D"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGtE,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,KAAK,SAAS,EAAO,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAA;AAE5C,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CACpE,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,SAAS,CAAA;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,CAAC,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;CACnC;AAED,qBAAa,KAAM,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAC3C;;;OAGG;IACH,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,IAAI,CAAiB;IAE7B,OAAO,CAAC,IAAI,CAUX;IAED,OAAO,CAAC,YAAY,CAKnB;IAED,OAAO,CAAC,iBAAiB,CAAQ;IAEjC;;OAEG;gBACS,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,kBAAkB;IAyBxE;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAiB9B;;OAEG;IACH,aAAa,CACZ,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,WAAW,EAClB,mBAAmB,EAAE,WAAW,EAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACjC,MAAM;IAqFT;;OAEG;IACH,gBAAgB;IAKhB;;;OAGG;IACH,iBAAiB;IAoBjB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS;IAOtC;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ7C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;IAkBjE;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE;IAKhD;;;;;;;OAOG;IACH,uBAAuB,CACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,EAAE;IAWX;;;;;OAKG;IACH,UAAU,CACT,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAC9B;QACF,GAAG,EAAE,YAAY,CAAA;QACjB,SAAS,EAAE,YAAY,CAAA;KACvB;IAyBD;;;OAGG;IACM,aAAa,IAAI,kBAAkB;IAc5C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAiBrC;;OAEG;IACM,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAMzD"}