@osmix/core 0.0.6 → 0.1.2

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 (169) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/{core/src/entities.d.ts → entities.d.ts} +6 -0
  3. package/dist/entities.d.ts.map +1 -0
  4. package/dist/{core/src/entities.js → entities.js} +7 -0
  5. package/dist/entities.js.map +1 -0
  6. package/dist/{core/src/ids.d.ts → ids.d.ts} +6 -0
  7. package/dist/ids.d.ts.map +1 -0
  8. package/dist/{core/src/ids.js → ids.js} +7 -0
  9. package/dist/ids.js.map +1 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/{core/src/nodes.d.ts → nodes.d.ts} +5 -0
  13. package/dist/nodes.d.ts.map +1 -0
  14. package/dist/{core/src/nodes.js → nodes.js} +9 -0
  15. package/dist/nodes.js.map +1 -0
  16. package/dist/{core/src/osm.d.ts → osm.d.ts} +25 -0
  17. package/dist/osm.d.ts.map +1 -0
  18. package/dist/{core/src/osm.js → osm.js} +45 -0
  19. package/dist/osm.js.map +1 -0
  20. package/dist/{core/src/relations.d.ts → relations.d.ts} +5 -0
  21. package/dist/relations.d.ts.map +1 -0
  22. package/dist/{core/src/relations.js → relations.js} +12 -0
  23. package/dist/relations.js.map +1 -0
  24. package/dist/src/entities.d.ts +120 -0
  25. package/dist/src/entities.d.ts.map +1 -0
  26. package/dist/src/entities.js +159 -0
  27. package/dist/src/entities.js.map +1 -0
  28. package/dist/src/ids.d.ts +119 -0
  29. package/dist/src/ids.d.ts.map +1 -0
  30. package/dist/src/ids.js +243 -0
  31. package/dist/src/ids.js.map +1 -0
  32. package/dist/src/index.d.ts +32 -0
  33. package/dist/src/index.d.ts.map +1 -0
  34. package/dist/src/index.js +35 -0
  35. package/dist/src/index.js.map +1 -0
  36. package/dist/src/nodes.d.ts +106 -0
  37. package/dist/src/nodes.d.ts.map +1 -0
  38. package/dist/src/nodes.js +318 -0
  39. package/dist/src/nodes.js.map +1 -0
  40. package/dist/src/osm.d.ts +99 -0
  41. package/dist/src/osm.d.ts.map +1 -0
  42. package/dist/src/osm.js +165 -0
  43. package/dist/src/osm.js.map +1 -0
  44. package/dist/src/relations.d.ts +123 -0
  45. package/dist/src/relations.d.ts.map +1 -0
  46. package/dist/src/relations.js +424 -0
  47. package/dist/src/relations.js.map +1 -0
  48. package/dist/{core/src → src}/stringtable.d.ts +6 -0
  49. package/dist/src/stringtable.d.ts.map +1 -0
  50. package/dist/{core/src → src}/stringtable.js +10 -0
  51. package/dist/src/stringtable.js.map +1 -0
  52. package/dist/{core/src → src}/tags.d.ts +6 -0
  53. package/dist/src/tags.d.ts.map +1 -0
  54. package/dist/{core/src → src}/tags.js +11 -0
  55. package/dist/src/tags.js.map +1 -0
  56. package/dist/src/typed-arrays.d.ts.map +1 -0
  57. package/dist/src/typed-arrays.js.map +1 -0
  58. package/dist/src/utils.d.ts +38 -0
  59. package/dist/src/utils.d.ts.map +1 -0
  60. package/dist/src/utils.js +87 -0
  61. package/dist/src/utils.js.map +1 -0
  62. package/dist/{core/src → src}/ways.d.ts +5 -0
  63. package/dist/src/ways.d.ts.map +1 -0
  64. package/dist/{core/src → src}/ways.js +10 -0
  65. package/dist/src/ways.js.map +1 -0
  66. package/dist/stringtable.d.ts +101 -0
  67. package/dist/stringtable.d.ts.map +1 -0
  68. package/dist/stringtable.js +180 -0
  69. package/dist/stringtable.js.map +1 -0
  70. package/dist/tags.d.ts +132 -0
  71. package/dist/tags.d.ts.map +1 -0
  72. package/dist/tags.js +239 -0
  73. package/dist/tags.js.map +1 -0
  74. package/dist/test/memory.test.d.ts.map +1 -0
  75. package/dist/test/memory.test.js.map +1 -0
  76. package/dist/test/mock-osm.d.ts.map +1 -0
  77. package/dist/test/mock-osm.js.map +1 -0
  78. package/dist/test/tags-search.test.d.ts.map +1 -0
  79. package/dist/test/tags-search.test.js.map +1 -0
  80. package/dist/test/typed-arrays.test.d.ts.map +1 -0
  81. package/dist/test/typed-arrays.test.js.map +1 -0
  82. package/dist/typed-arrays.d.ts +124 -0
  83. package/dist/typed-arrays.d.ts.map +1 -0
  84. package/dist/typed-arrays.js +198 -0
  85. package/dist/typed-arrays.js.map +1 -0
  86. package/dist/utils.d.ts +38 -0
  87. package/dist/utils.d.ts.map +1 -0
  88. package/dist/utils.js +87 -0
  89. package/dist/utils.js.map +1 -0
  90. package/dist/ways.d.ts +106 -0
  91. package/dist/ways.d.ts.map +1 -0
  92. package/dist/ways.js +346 -0
  93. package/dist/ways.js.map +1 -0
  94. package/package.json +10 -8
  95. package/src/entities.ts +9 -0
  96. package/src/ids.ts +9 -0
  97. package/src/nodes.ts +11 -0
  98. package/src/osm.ts +48 -0
  99. package/src/relations.ts +14 -1
  100. package/src/stringtable.ts +12 -0
  101. package/src/tags.ts +13 -0
  102. package/src/utils.ts +71 -0
  103. package/src/ways.ts +12 -0
  104. package/tsconfig.build.json +5 -0
  105. package/tsconfig.json +1 -7
  106. package/dist/core/src/entities.d.ts.map +0 -1
  107. package/dist/core/src/entities.js.map +0 -1
  108. package/dist/core/src/ids.d.ts.map +0 -1
  109. package/dist/core/src/ids.js.map +0 -1
  110. package/dist/core/src/index.d.ts.map +0 -1
  111. package/dist/core/src/index.js.map +0 -1
  112. package/dist/core/src/nodes.d.ts.map +0 -1
  113. package/dist/core/src/nodes.js.map +0 -1
  114. package/dist/core/src/osm.d.ts.map +0 -1
  115. package/dist/core/src/osm.js.map +0 -1
  116. package/dist/core/src/relations.d.ts.map +0 -1
  117. package/dist/core/src/relations.js.map +0 -1
  118. package/dist/core/src/stringtable.d.ts.map +0 -1
  119. package/dist/core/src/stringtable.js.map +0 -1
  120. package/dist/core/src/tags.d.ts.map +0 -1
  121. package/dist/core/src/tags.js.map +0 -1
  122. package/dist/core/src/typed-arrays.d.ts.map +0 -1
  123. package/dist/core/src/typed-arrays.js.map +0 -1
  124. package/dist/core/src/utils.d.ts +0 -11
  125. package/dist/core/src/utils.d.ts.map +0 -1
  126. package/dist/core/src/utils.js +0 -26
  127. package/dist/core/src/utils.js.map +0 -1
  128. package/dist/core/src/ways.d.ts.map +0 -1
  129. package/dist/core/src/ways.js.map +0 -1
  130. package/dist/core/test/memory.test.d.ts.map +0 -1
  131. package/dist/core/test/memory.test.js.map +0 -1
  132. package/dist/core/test/mock-osm.d.ts.map +0 -1
  133. package/dist/core/test/mock-osm.js.map +0 -1
  134. package/dist/core/test/tags-search.test.d.ts.map +0 -1
  135. package/dist/core/test/tags-search.test.js.map +0 -1
  136. package/dist/core/test/typed-arrays.test.d.ts.map +0 -1
  137. package/dist/core/test/typed-arrays.test.js.map +0 -1
  138. package/dist/osmix/src/extract.d.ts +0 -43
  139. package/dist/osmix/src/extract.d.ts.map +0 -1
  140. package/dist/osmix/src/extract.js +0 -156
  141. package/dist/osmix/src/extract.js.map +0 -1
  142. package/dist/osmix/src/pbf.d.ts +0 -55
  143. package/dist/osmix/src/pbf.d.ts.map +0 -1
  144. package/dist/osmix/src/pbf.js +0 -187
  145. package/dist/osmix/src/pbf.js.map +0 -1
  146. package/dist/osmix/src/utils.d.ts +0 -36
  147. package/dist/osmix/src/utils.d.ts.map +0 -1
  148. package/dist/osmix/src/utils.js +0 -108
  149. package/dist/osmix/src/utils.js.map +0 -1
  150. package/dist/osmix/test/extract.bench.d.ts +0 -2
  151. package/dist/osmix/test/extract.bench.d.ts.map +0 -1
  152. package/dist/osmix/test/extract.bench.js +0 -26
  153. package/dist/osmix/test/extract.bench.js.map +0 -1
  154. package/dist/osmix/test/extract.test.d.ts +0 -2
  155. package/dist/osmix/test/extract.test.d.ts.map +0 -1
  156. package/dist/osmix/test/extract.test.js +0 -392
  157. package/dist/osmix/test/extract.test.js.map +0 -1
  158. /package/dist/{core/src/index.d.ts → index.d.ts} +0 -0
  159. /package/dist/{core/src/index.js → index.js} +0 -0
  160. /package/dist/{core/src → src}/typed-arrays.d.ts +0 -0
  161. /package/dist/{core/src → src}/typed-arrays.js +0 -0
  162. /package/dist/{core/test → test}/memory.test.d.ts +0 -0
  163. /package/dist/{core/test → test}/memory.test.js +0 -0
  164. /package/dist/{core/test → test}/mock-osm.d.ts +0 -0
  165. /package/dist/{core/test → test}/mock-osm.js +0 -0
  166. /package/dist/{core/test → test}/tags-search.test.d.ts +0 -0
  167. /package/dist/{core/test → test}/tags-search.test.js +0 -0
  168. /package/dist/{core/test → test}/typed-arrays.test.d.ts +0 -0
  169. /package/dist/{core/test → test}/typed-arrays.test.js +0 -0
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Utility functions for @osmix/core.
3
+ * @module
4
+ */
5
+ import type { GeoBbox2D, LonLat } from "@osmix/shared/types";
6
+ /**
7
+ * Compute the bounding box of a set of coordinates.
8
+ * Returns `[minLon, minLat, maxLon, maxLat]`.
9
+ */
10
+ export declare function bboxFromLonLats(lonLats: LonLat[]): GeoBbox2D;
11
+ /**
12
+ * Hash state that can be incrementally updated with multiple buffers.
13
+ */
14
+ export declare class ContentHasher {
15
+ private hash;
16
+ /**
17
+ * Update the hash with a typed array's underlying bytes.
18
+ */
19
+ update(data: ArrayBufferView | ArrayBuffer): this;
20
+ /**
21
+ * Update the hash with a number (as 8 bytes).
22
+ */
23
+ updateNumber(n: number): this;
24
+ /**
25
+ * Get the final hash as a hex string.
26
+ */
27
+ digest(): string;
28
+ /**
29
+ * Get the raw hash value.
30
+ */
31
+ digestNumber(): number;
32
+ }
33
+ /**
34
+ * Create a content hash from multiple typed arrays.
35
+ * Returns a hex string suitable for use as a content identifier.
36
+ */
37
+ export declare function hashBuffers(...buffers: (ArrayBufferView | ArrayBuffer)[]): string;
38
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAY5D;AAmBD;;GAEG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,IAAI,CAAmB;IAE/B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI;IAOjD;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGtB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,WAAW,CAAC,EAAE,GAC3C,MAAM,CAMR"}
package/dist/utils.js ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Utility functions for @osmix/core.
3
+ * @module
4
+ */
5
+ /**
6
+ * Compute the bounding box of a set of coordinates.
7
+ * Returns `[minLon, minLat, maxLon, maxLat]`.
8
+ */
9
+ export function bboxFromLonLats(lonLats) {
10
+ let minLon = Number.POSITIVE_INFINITY;
11
+ let minLat = Number.POSITIVE_INFINITY;
12
+ let maxLon = Number.NEGATIVE_INFINITY;
13
+ let maxLat = Number.NEGATIVE_INFINITY;
14
+ for (const [lon, lat] of lonLats) {
15
+ if (lon < minLon)
16
+ minLon = lon;
17
+ if (lat < minLat)
18
+ minLat = lat;
19
+ if (lon > maxLon)
20
+ maxLon = lon;
21
+ if (lat > maxLat)
22
+ maxLat = lat;
23
+ }
24
+ return [minLon, minLat, maxLon, maxLat];
25
+ }
26
+ // FNV-1a hash constants (32-bit)
27
+ const FNV_OFFSET_BASIS = 2166136261;
28
+ const FNV_PRIME = 16777619;
29
+ /**
30
+ * FNV-1a hash implementation for Uint8Array.
31
+ * Fast, non-cryptographic hash suitable for content comparison.
32
+ */
33
+ function fnv1aHash(data, initialHash = FNV_OFFSET_BASIS) {
34
+ let hash = initialHash;
35
+ for (let i = 0; i < data.length; i++) {
36
+ hash ^= data[i];
37
+ hash = Math.imul(hash, FNV_PRIME) >>> 0;
38
+ }
39
+ return hash >>> 0;
40
+ }
41
+ /**
42
+ * Hash state that can be incrementally updated with multiple buffers.
43
+ */
44
+ export class ContentHasher {
45
+ hash = FNV_OFFSET_BASIS;
46
+ /**
47
+ * Update the hash with a typed array's underlying bytes.
48
+ */
49
+ update(data) {
50
+ const buffer = data instanceof ArrayBuffer ? data : data.buffer;
51
+ const bytes = new Uint8Array(buffer);
52
+ this.hash = fnv1aHash(bytes, this.hash);
53
+ return this;
54
+ }
55
+ /**
56
+ * Update the hash with a number (as 8 bytes).
57
+ */
58
+ updateNumber(n) {
59
+ const buffer = new ArrayBuffer(8);
60
+ new Float64Array(buffer)[0] = n;
61
+ return this.update(buffer);
62
+ }
63
+ /**
64
+ * Get the final hash as a hex string.
65
+ */
66
+ digest() {
67
+ return this.hash.toString(16).padStart(8, "0");
68
+ }
69
+ /**
70
+ * Get the raw hash value.
71
+ */
72
+ digestNumber() {
73
+ return this.hash;
74
+ }
75
+ }
76
+ /**
77
+ * Create a content hash from multiple typed arrays.
78
+ * Returns a hex string suitable for use as a content identifier.
79
+ */
80
+ export function hashBuffers(...buffers) {
81
+ const hasher = new ContentHasher();
82
+ for (const buffer of buffers) {
83
+ hasher.update(buffer);
84
+ }
85
+ return hasher.digest();
86
+ }
87
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAiB;IAChD,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACrC,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACrC,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACrC,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;QAClC,IAAI,GAAG,GAAG,MAAM;YAAE,MAAM,GAAG,GAAG,CAAA;QAC9B,IAAI,GAAG,GAAG,MAAM;YAAE,MAAM,GAAG,GAAG,CAAA;QAC9B,IAAI,GAAG,GAAG,MAAM;YAAE,MAAM,GAAG,GAAG,CAAA;QAC9B,IAAI,GAAG,GAAG,MAAM;YAAE,MAAM,GAAG,GAAG,CAAA;IAC/B,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC;AAED,iCAAiC;AACjC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACnC,MAAM,SAAS,GAAG,QAAQ,CAAA;AAE1B;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAgB,EAAE,WAAW,GAAG,gBAAgB;IAClE,IAAI,IAAI,GAAG,WAAW,CAAA;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAW,CAAA;QACzB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IACjB,IAAI,GAAG,gBAAgB,CAAA;IAE/B;;OAEG;IACH,MAAM,CAAC,IAAmC;QACzC,MAAM,MAAM,GAAG,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAC/D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,CAAS;QACrB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,YAAY;QACX,OAAO,IAAI,CAAC,IAAI,CAAA;IACjB,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAC1B,GAAG,OAA0C;IAE7C,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AACvB,CAAC"}
package/dist/ways.d.ts ADDED
@@ -0,0 +1,106 @@
1
+ import type { OsmPbfWay } from "@osmix/pbf";
2
+ import type { GeoBbox2D, LonLat, OsmTags, OsmWay } from "@osmix/shared/types";
3
+ import Flatbush from "flatbush";
4
+ import { Entities, type EntitiesTransferables } from "./entities";
5
+ import { type IdOrIndex } from "./ids";
6
+ import type { Nodes } from "./nodes";
7
+ import type StringTable from "./stringtable";
8
+ import { type BufferType } from "./typed-arrays";
9
+ import type { ContentHasher } from "./utils";
10
+ export interface WaysTransferables<T extends BufferType = BufferType> extends EntitiesTransferables<T> {
11
+ refStart: T;
12
+ refCount: T;
13
+ refs: T;
14
+ bbox: T;
15
+ /** Optional - can be rebuilt via buildSpatialIndex() */
16
+ spatialIndex?: T;
17
+ }
18
+ export declare class Ways extends Entities<OsmWay> {
19
+ private spatialIndex;
20
+ private spatialIndexBuilt;
21
+ private refStart;
22
+ private refCount;
23
+ private refs;
24
+ private bbox;
25
+ private nodes;
26
+ /**
27
+ * Create a new Ways index.
28
+ */
29
+ constructor(stringTable: StringTable, nodes: Nodes, transferables?: WaysTransferables);
30
+ /**
31
+ * Add a single way to the index.
32
+ */
33
+ addWay(way: OsmWay): number;
34
+ /**
35
+ * Bulk add ways directly from a PBF PrimitiveBlock.
36
+ */
37
+ addWays(ways: OsmPbfWay[], blockStringIndexMap: Uint32Array, filter?: (way: OsmWay) => OsmWay | null): number;
38
+ /**
39
+ * Compact the internal arrays to free up memory.
40
+ */
41
+ buildEntityIndex(): void;
42
+ /**
43
+ * Build the spatial index for ways.
44
+ * If bbox data already exists (e.g., loaded from storage), reuses it.
45
+ */
46
+ buildSpatialIndex(): Flatbush;
47
+ /**
48
+ * Check if the spatial index has been built.
49
+ */
50
+ hasSpatialIndex(): boolean;
51
+ /**
52
+ * Get the full way entity.
53
+ */
54
+ getFullEntity(index: number, id: number, tags?: OsmTags): OsmWay;
55
+ /**
56
+ * Get the node IDs referenced by a way.
57
+ */
58
+ getRefIds(index: number): number[];
59
+ /**
60
+ * Get the bounding box of a way.
61
+ */
62
+ getEntityBbox(idOrIndex: IdOrIndex): GeoBbox2D;
63
+ /**
64
+ * Get the coordinates of a way as a flat array.
65
+ */
66
+ getLine(index: number): Float64Array<ArrayBuffer>;
67
+ /**
68
+ * Get the coordinates of a way as an array of [lon, lat] pairs.
69
+ */
70
+ getCoordinates(index: number): LonLat[];
71
+ /**
72
+ * Find way indexes that intersect a bounding box.
73
+ */
74
+ intersects(bbox: GeoBbox2D, filterFn?: (index: number) => boolean): number[];
75
+ /**
76
+ * Find way indexes near a point using great-circle distance.
77
+ * @param lon - Longitude in degrees.
78
+ * @param lat - Latitude in degrees.
79
+ * @param maxResults - Maximum number of results to return.
80
+ * @param maxDistanceKm - Maximum distance in kilometers.
81
+ * @returns Array of way indexes sorted by distance.
82
+ */
83
+ neighbors(lon: number, lat: number, maxResults?: number, maxDistanceKm?: number): number[];
84
+ /**
85
+ * Get ways within a bounding box.
86
+ */
87
+ withinBbox(bbox: GeoBbox2D, include?: (index: number) => boolean): {
88
+ ids: Float64Array;
89
+ positions: Float64Array;
90
+ startIndices: Uint32Array;
91
+ };
92
+ /**
93
+ * Get transferable objects for passing to another thread.
94
+ * Only includes spatialIndex if it has been built.
95
+ */
96
+ transferables(): WaysTransferables;
97
+ /**
98
+ * Get the approximate memory requirements for a given number of ways in bytes.
99
+ */
100
+ static getBytesRequired(count: number): number;
101
+ /**
102
+ * Update a ContentHasher with way-specific data (node references).
103
+ */
104
+ updateHash(hasher: ContentHasher): ContentHasher;
105
+ }
106
+ //# sourceMappingURL=ways.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ways.d.ts","sourceRoot":"","sources":["../src/ways.ts"],"names":[],"mappings":"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"}
package/dist/ways.js ADDED
@@ -0,0 +1,346 @@
1
+ import Flatbush from "flatbush";
2
+ import { around as geoAround } from "geoflatbush";
3
+ import { Entities } from "./entities";
4
+ import { Ids } from "./ids";
5
+ import { Tags } from "./tags";
6
+ import { BufferConstructor, IdArrayType, ResizeableTypedArray as RTA, } from "./typed-arrays";
7
+ export class Ways extends Entities {
8
+ spatialIndex = new Flatbush(1);
9
+ // Track if spatial index was properly built (vs default empty)
10
+ spatialIndexBuilt = false;
11
+ refStart;
12
+ refCount; // Maximum 2,000 nodes per way
13
+ // Node IDs
14
+ refs;
15
+ // Bounding box of the way in geographic coordinates
16
+ bbox;
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;
44
+ }
45
+ /**
46
+ * Add a single way to the index.
47
+ */
48
+ addWay(way) {
49
+ const wayIndex = this.addEntity(way.id, way.tags ?? {});
50
+ this.refStart.push(this.refs.length);
51
+ this.refCount.push(way.refs.length);
52
+ for (const ref of way.refs)
53
+ this.refs.push(ref);
54
+ return wayIndex;
55
+ }
56
+ /**
57
+ * Bulk add ways directly from a PBF PrimitiveBlock.
58
+ */
59
+ addWays(ways, blockStringIndexMap, filter) {
60
+ let added = 0;
61
+ for (const way of ways) {
62
+ let prevRefId = 0;
63
+ const refs = way.refs.map((refId) => {
64
+ prevRefId += refId;
65
+ return prevRefId;
66
+ });
67
+ const filteredWay = filter
68
+ ? filter({
69
+ id: way.id,
70
+ refs,
71
+ tags: this.tags.getTagsFromIndices(way.keys, way.vals),
72
+ })
73
+ : null;
74
+ if (filter && filteredWay === null)
75
+ continue;
76
+ const tagKeys = way.keys.map((key) => {
77
+ const index = blockStringIndexMap[key];
78
+ if (index === undefined)
79
+ throw Error("Tag key not found");
80
+ return index;
81
+ });
82
+ const tagValues = way.vals.map((val) => {
83
+ const index = blockStringIndexMap[val];
84
+ if (index === undefined)
85
+ throw Error("Tag value not found");
86
+ return index;
87
+ });
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);
92
+ added++;
93
+ }
94
+ return added;
95
+ }
96
+ /**
97
+ * Compact the internal arrays to free up memory.
98
+ */
99
+ buildEntityIndex() {
100
+ this.refStart.compact();
101
+ this.refCount.compact();
102
+ this.refs.compact();
103
+ }
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;
113
+ console.time("WayIndex.buildSpatialIndex");
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;
117
+ for (let i = 0; i < this.size; i++) {
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);
153
+ }
154
+ this.spatialIndex.add(minX, minY, maxX, maxY);
155
+ }
156
+ // Compact bbox if we just calculated it
157
+ if (!hasBboxData) {
158
+ this.bbox.compact();
159
+ }
160
+ this.spatialIndex.finish();
161
+ this.spatialIndexBuilt = true;
162
+ console.timeEnd("WayIndex.buildSpatialIndex");
163
+ return this.spatialIndex;
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
+ */
174
+ getFullEntity(index, id, tags) {
175
+ return {
176
+ id,
177
+ refs: [...this.getRefIds(index)],
178
+ tags,
179
+ };
180
+ }
181
+ /**
182
+ * Get the node IDs referenced by a way.
183
+ */
184
+ getRefIds(index) {
185
+ const start = this.refStart.at(index);
186
+ const count = this.refCount.at(index);
187
+ return Array.from(this.refs.slice(start, start + count));
188
+ }
189
+ /**
190
+ * Get the bounding box of a way.
191
+ */
192
+ getEntityBbox(idOrIndex) {
193
+ const index = "index" in idOrIndex ? idOrIndex.index : this.ids.idOrIndex(idOrIndex)[0];
194
+ return [
195
+ this.bbox.at(index * 4),
196
+ this.bbox.at(index * 4 + 1),
197
+ this.bbox.at(index * 4 + 2),
198
+ this.bbox.at(index * 4 + 3),
199
+ ];
200
+ }
201
+ /**
202
+ * Get the coordinates of a way as a flat array.
203
+ */
204
+ getLine(index) {
205
+ const count = this.refCount.at(index);
206
+ const start = this.refStart.at(index);
207
+ const line = new Float64Array(count * 2);
208
+ for (let i = 0; i < count; i++) {
209
+ const ref = this.refs.at(start + i);
210
+ const [lon, lat] = this.nodes.getNodeLonLat({ id: ref });
211
+ line[i * 2] = lon;
212
+ line[i * 2 + 1] = lat;
213
+ }
214
+ return line;
215
+ }
216
+ /**
217
+ * Get the coordinates of a way as an array of [lon, lat] pairs.
218
+ */
219
+ getCoordinates(index) {
220
+ const count = this.refCount.at(index);
221
+ const start = this.refStart.at(index);
222
+ const coords = [];
223
+ for (let refIndex = start; refIndex < start + count; refIndex++) {
224
+ const ref = this.refs.at(refIndex);
225
+ const coord = this.nodes.getNodeLonLat({ id: ref });
226
+ if (coord === undefined ||
227
+ coord[0] === undefined ||
228
+ coord[1] === undefined) {
229
+ console.error("node index has ref", this.nodes.ids.has(ref));
230
+ throw Error(`Invalid coordinate for way id ${this.ids.at(index)}, index ${index}, node ref ${ref}, ref index ${refIndex}`);
231
+ }
232
+ coords.push(coord);
233
+ }
234
+ return coords;
235
+ }
236
+ /**
237
+ * Find way indexes that intersect a bounding box.
238
+ */
239
+ intersects(bbox, filterFn) {
240
+ if (this.size === 0)
241
+ return [];
242
+ return this.spatialIndex.search(bbox[0], bbox[1], bbox[2], bbox[3], filterFn);
243
+ }
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);
344
+ }
345
+ }
346
+ //# sourceMappingURL=ways.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ways.js","sourceRoot":"","sources":["../src/ways.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,11 +2,12 @@
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@osmix/core",
4
4
  "type": "module",
5
- "version": "0.0.6",
5
+ "version": "0.1.2",
6
6
  "description": "An OSM PBF reader, writer, and merge tool written in TypeScript",
7
7
  "main": "./src/index.ts",
8
8
  "publishConfig": {
9
9
  "access": "public",
10
+ "registry": "https://registry.npmjs.org/",
10
11
  "main": "./dist/index.js",
11
12
  "types": "./dist/index.d.ts",
12
13
  "exports": {
@@ -32,21 +33,22 @@
32
33
  },
33
34
  "sideEffects": false,
34
35
  "scripts": {
35
- "build": "tsc",
36
+ "build": "tsc -p tsconfig.build.json",
36
37
  "bench": "bun test --bench",
37
- "prepublishOnly": "tsc",
38
+ "prepare": "bun run build",
39
+ "release": "bun publish",
38
40
  "test": "bun test",
39
41
  "typecheck": "tsgo --noEmit"
40
42
  },
41
43
  "devDependencies": {
42
- "@osmix/pbf": "workspace:*",
43
- "@types/bun": "catalog:",
44
- "typescript": "catalog:"
44
+ "@osmix/pbf": "0.0.4",
45
+ "@types/bun": "^1.3.3",
46
+ "typescript": "^5.9.0"
45
47
  },
46
48
  "dependencies": {
47
- "@osmix/shared": "workspace:*",
49
+ "@osmix/shared": "0.0.7",
48
50
  "flatbush": "^4.4.1",
49
- "geoflatbush": "^2.0.0",
51
+ "geoflatbush": "^2.1.0",
50
52
  "geokdbush": "^2.0.1",
51
53
  "kdbush": "mourner/kdbush#16416cd"
52
54
  }