@osmix/core 0.1.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +21 -0
  3. package/README.md +136 -72
  4. package/dist/contracts.d.ts +27 -0
  5. package/dist/contracts.d.ts.map +1 -0
  6. package/dist/contracts.js +1 -0
  7. package/dist/contracts.js.map +1 -0
  8. package/dist/entities.d.ts +22 -2
  9. package/dist/entities.d.ts.map +1 -1
  10. package/dist/entities.js +54 -10
  11. package/dist/entities.js.map +1 -1
  12. package/dist/ids.d.ts +20 -5
  13. package/dist/ids.d.ts.map +1 -1
  14. package/dist/ids.js +87 -29
  15. package/dist/ids.js.map +1 -1
  16. package/dist/index.d.ts +7 -4
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/indirect-kd-index.d.ts +28 -0
  21. package/dist/indirect-kd-index.d.ts.map +1 -0
  22. package/dist/indirect-kd-index.js +163 -0
  23. package/dist/indirect-kd-index.js.map +1 -0
  24. package/dist/limits.d.ts +30 -0
  25. package/dist/limits.d.ts.map +1 -0
  26. package/dist/limits.js +51 -0
  27. package/dist/limits.js.map +1 -0
  28. package/dist/mocks.d.ts.map +1 -1
  29. package/dist/mocks.js.map +1 -1
  30. package/dist/nodes.d.ts +36 -15
  31. package/dist/nodes.d.ts.map +1 -1
  32. package/dist/nodes.js +185 -62
  33. package/dist/nodes.js.map +1 -1
  34. package/dist/osm.d.ts +60 -4
  35. package/dist/osm.d.ts.map +1 -1
  36. package/dist/osm.js +32 -6
  37. package/dist/osm.js.map +1 -1
  38. package/dist/relations.d.ts +11 -4
  39. package/dist/relations.d.ts.map +1 -1
  40. package/dist/relations.js +73 -29
  41. package/dist/relations.js.map +1 -1
  42. package/dist/renumber.d.ts +23 -0
  43. package/dist/renumber.d.ts.map +1 -0
  44. package/dist/renumber.js +64 -0
  45. package/dist/renumber.js.map +1 -0
  46. package/dist/stringtable.d.ts +2 -1
  47. package/dist/stringtable.d.ts.map +1 -1
  48. package/dist/stringtable.js +9 -14
  49. package/dist/stringtable.js.map +1 -1
  50. package/dist/tags.d.ts +45 -12
  51. package/dist/tags.d.ts.map +1 -1
  52. package/dist/tags.js +153 -27
  53. package/dist/tags.js.map +1 -1
  54. package/dist/typed-arrays.d.ts +63 -48
  55. package/dist/typed-arrays.d.ts.map +1 -1
  56. package/dist/typed-arrays.js +184 -107
  57. package/dist/typed-arrays.js.map +1 -1
  58. package/dist/ways.d.ts +52 -3
  59. package/dist/ways.d.ts.map +1 -1
  60. package/dist/ways.js +223 -46
  61. package/dist/ways.js.map +1 -1
  62. package/package.json +45 -31
  63. package/src/contracts.ts +29 -0
  64. package/src/entities.ts +242 -194
  65. package/src/ids.ts +278 -235
  66. package/src/index.ts +22 -13
  67. package/src/indirect-kd-index.ts +212 -0
  68. package/src/limits.ts +73 -0
  69. package/src/mocks.ts +114 -113
  70. package/src/nodes.ts +538 -397
  71. package/src/osm.ts +282 -207
  72. package/src/relations.ts +580 -558
  73. package/src/renumber.ts +80 -0
  74. package/src/stringtable.ts +189 -184
  75. package/src/tags.ts +406 -272
  76. package/src/typed-arrays.ts +307 -205
  77. package/src/types/geoflatbush.d.ts +28 -33
  78. package/src/ways.ts +577 -406
  79. package/test/entity-index-errors.test.ts +41 -0
  80. package/test/ids.bench.ts +33 -0
  81. package/test/ids.test.ts +122 -0
  82. package/test/limits.test.ts +83 -0
  83. package/test/memory.test.ts +29 -30
  84. package/test/no-shared-array-buffer.test.ts +41 -0
  85. package/test/nodes-spatial-index.test.ts +261 -0
  86. package/test/osm-bbox.test.ts +30 -0
  87. package/test/relations.bench.ts +32 -0
  88. package/test/relations.test.ts +124 -0
  89. package/test/renumber.test.ts +54 -0
  90. package/test/spatial-index-rebuild.test.ts +33 -0
  91. package/test/storage-compaction.test.ts +269 -0
  92. package/test/tags-search.test.ts +89 -56
  93. package/test/typed-arrays.test.ts +252 -132
  94. package/tsconfig.build.json +6 -6
  95. package/tsconfig.json +7 -7
  96. package/src/types/geokdbush.d.ts +0 -37
  97. package/src/types/kdbush.d.ts +0 -47
package/dist/limits.js ADDED
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Hard capacity limits set by the typed-array layout of `Osm` storage.
3
+ *
4
+ * See `docs/limits.md` for the full list, including limits that come from the
5
+ * JavaScript engine rather than from this layout.
6
+ */
7
+ /** Largest number of node refs one way can hold (`Ways.refCount` is a `Uint16Array`). */
8
+ export const MAX_WAY_REFS = 0xffff;
9
+ /** Largest number of members one relation can hold (`Relations.memberCount` is a `Uint16Array`). */
10
+ export const MAX_RELATION_MEMBERS = 0xffff;
11
+ /** Largest UTF-8 byte length of one string (`StringTable.count` is a `Uint16Array`). */
12
+ export const MAX_STRING_BYTES = 0xffff;
13
+ /**
14
+ * Largest element offset a `Uint32Array` offset column can store. Bounds the total
15
+ * way refs, relation members and string-table bytes in one dataset.
16
+ */
17
+ export const MAX_UINT32_OFFSET = 0xffffffff;
18
+ /** Thrown when an entity or dataset is larger than the storage layout can hold. */
19
+ export class OsmCapacityError extends Error {
20
+ code = "OSM_CAPACITY_EXCEEDED";
21
+ limit;
22
+ value;
23
+ max;
24
+ constructor(limit, value, max, subject) {
25
+ super(`${subject} has ${value.toLocaleString("en-US")} ${capacityUnit(limit)}; ` +
26
+ `Osmix stores at most ${max.toLocaleString("en-US")}.`);
27
+ this.name = "OsmCapacityError";
28
+ this.limit = limit;
29
+ this.value = value;
30
+ this.max = max;
31
+ }
32
+ }
33
+ function capacityUnit(limit) {
34
+ switch (limit) {
35
+ case "way-refs":
36
+ case "total-way-refs":
37
+ return "node refs";
38
+ case "relation-members":
39
+ case "total-relation-members":
40
+ return "members";
41
+ case "string-bytes":
42
+ case "total-string-bytes":
43
+ return "UTF-8 bytes";
44
+ }
45
+ }
46
+ /** Throw {@link OsmCapacityError} when `value` is above `max`. */
47
+ export function assertCapacity(limit, value, max, subject) {
48
+ if (value > max)
49
+ throw new OsmCapacityError(limit, value, max, subject());
50
+ }
51
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,oGAAoG;AACpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE3C,wFAAwF;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAW5C,mFAAmF;AACnF,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,GAAG,uBAAuB,CAAC;IAC/B,KAAK,CAAmB;IACxB,KAAK,CAAS;IACd,GAAG,CAAS;IAErB,YAAY,KAAuB,EAAE,KAAa,EAAE,GAAW,EAAE,OAAe;QAC9E,KAAK,CACH,GAAG,OAAO,QAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI;YACxE,wBAAwB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CACzD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAuB;IAC3C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,WAAW,CAAC;QACrB,KAAK,kBAAkB,CAAC;QACxB,KAAK,wBAAwB;YAC3B,OAAO,SAAS,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,oBAAoB;YACvB,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAC5B,KAAuB,EACvB,KAAa,EACb,GAAW,EACX,OAAqB;IAErB,IAAI,KAAK,GAAG,GAAG;QAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAmC9B;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAOvC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAqFxC"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAmC/B;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAOvC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAqFxC"}
package/dist/mocks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
package/dist/nodes.d.ts CHANGED
@@ -1,16 +1,25 @@
1
1
  import type { OsmPbfBlock, OsmPbfDenseNodes } from "@osmix/pbf";
2
2
  import type { ContentHasher } from "@osmix/shared/content-hasher";
3
- import type { GeoBbox2D, OsmNode, OsmTags } from "@osmix/shared/types";
3
+ import type { GeoBbox2D, OsmNode, OsmTags } from "@osmix/types";
4
4
  import { Entities, type EntitiesTransferables } from "./entities.ts";
5
5
  import { type IdOrIndex } from "./ids.ts";
6
6
  import type StringTable from "./stringtable.ts";
7
7
  import { type BufferType } from "./typed-arrays.ts";
8
+ export type NodeSpatialIndexKind = "all" | "tagged";
9
+ export declare class SpatialIndexNotBuiltError extends Error {
10
+ readonly code = "SPATIAL_INDEX_NOT_BUILT";
11
+ readonly entityType = "node";
12
+ readonly indexKind: NodeSpatialIndexKind;
13
+ constructor(indexKind: NodeSpatialIndexKind);
14
+ }
8
15
  export interface NodesTransferables<T extends BufferType = BufferType> extends EntitiesTransferables<T> {
9
16
  lons: T;
10
17
  lats: T;
11
18
  bbox: GeoBbox2D;
12
- /** Optional - can be rebuilt via buildSpatialIndex() */
13
- spatialIndex?: T;
19
+ /** Optional all-node Uint32 permutation; can be rebuilt via buildSpatialIndex("all"). */
20
+ allSpatialIndex?: T;
21
+ /** Optional tagged-node Uint32 permutation; can be rebuilt via buildSpatialIndex("tagged"). */
22
+ taggedSpatialIndex?: T;
14
23
  }
15
24
  export interface AddNodeOptions {
16
25
  filter?: (node: OsmNode) => boolean;
@@ -23,8 +32,8 @@ export declare class Nodes extends Entities<OsmNode> {
23
32
  private lons;
24
33
  private lats;
25
34
  private bbox;
26
- private spatialIndex;
27
- private spatialIndexBuilt;
35
+ private allSpatialIndex?;
36
+ private taggedSpatialIndex?;
28
37
  /**
29
38
  * Create a new Nodes index.
30
39
  */
@@ -42,26 +51,33 @@ export declare class Nodes extends Entities<OsmNode> {
42
51
  */
43
52
  buildEntityIndex(): void;
44
53
  /**
45
- * Build the spatial index for nodes.
46
- * Spatial index stores degrees (Float64Array) for geokdbush compatibility.
54
+ * Build one of the independent node spatial indexes.
47
55
  */
48
- buildSpatialIndex(): void;
56
+ buildSpatialIndex(kind?: NodeSpatialIndexKind): void;
49
57
  /**
50
58
  * Check if the spatial index has been built.
51
59
  */
52
- hasSpatialIndex(): boolean;
60
+ hasSpatialIndex(kind?: NodeSpatialIndexKind): boolean;
61
+ /** Number of nodes that carry at least one tag. */
62
+ get taggedSize(): number;
53
63
  /**
54
- * Get the bounding box of all nodes.
64
+ * Get the bounding box of all nodes, or `null` when there are no nodes.
55
65
  */
56
- getBbox(): GeoBbox2D;
66
+ getBbox(): GeoBbox2D | null;
57
67
  /**
58
68
  * Get the bounding box of a specific node.
59
69
  */
60
70
  getEntityBbox(i: IdOrIndex): GeoBbox2D;
61
71
  /**
62
72
  * Get the longitude and latitude of a specific node.
73
+ * ID lookups return `null` when the node is not present; index lookups remain strict.
63
74
  */
64
- getNodeLonLat(i: IdOrIndex): [number, number];
75
+ getNodeLonLat(i: {
76
+ index: number;
77
+ }): [number, number];
78
+ getNodeLonLat(i: {
79
+ id: number;
80
+ }): [number, number] | null;
65
81
  /**
66
82
  * Get the full node entity.
67
83
  */
@@ -70,9 +86,11 @@ export declare class Nodes extends Entities<OsmNode> {
70
86
  * Find node indexes within a bounding box.
71
87
  */
72
88
  findIndexesWithinBbox(bbox: GeoBbox2D): number[];
89
+ /** Find tagged node indexes within a bounding box. */
90
+ findTaggedIndexesWithinBbox(bbox: GeoBbox2D): number[];
73
91
  /**
74
92
  * Find node indexes within a radius of a point.
75
- * Uses geokdbush for proper great-circle distance calculations.
93
+ * Uses an exact haversine-distance filter over a conservative KD bbox query.
76
94
  * @param lon - Longitude in degrees.
77
95
  * @param lat - Latitude in degrees.
78
96
  * @param radiusKm - Radius in kilometers.
@@ -91,16 +109,19 @@ export declare class Nodes extends Entities<OsmNode> {
91
109
  };
92
110
  /**
93
111
  * Get transferable objects for passing to another thread.
94
- * Only includes spatialIndex if it has been built.
112
+ * Only includes spatial indexes that have been built.
95
113
  */
96
114
  transferables(): NodesTransferables;
97
115
  /**
98
116
  * Get the approximate memory requirements for a given number of nodes in bytes.
99
117
  */
100
- static getBytesRequired(count: number): number;
118
+ static getBytesRequired(count: number, taggedCount?: number, tagCount?: number): number;
119
+ /** Exact bytes in an indirect node spatial-index permutation. */
120
+ static getSpatialIndexBytesRequired(count: number): number;
101
121
  /**
102
122
  * Update a ContentHasher with node-specific data (coordinates).
103
123
  */
104
124
  updateHash(hasher: ContentHasher): ContentHasher;
125
+ private getSpatialIndex;
105
126
  }
106
127
  //# 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,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGtE,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,KAAK,SAAS,EAAO,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,mBAAmB,CAAA;AAE1B,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;IACH,YAAY,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,kBAAkB,EAuBvE;IAED;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAe7B;IAED;;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,CAmFR;IAED;;OAEG;IACH,gBAAgB,SAGf;IAED;;;OAGG;IACH,iBAAiB,SAkBhB;IAED;;OAEG;IACH,eAAe,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,OAAO,IAAI,SAAS,CAEnB;IAED;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAKrC;IAED;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM5C;IAED;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAehE;IAGD;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAG/C;IAED;;;;;;;OAOG;IACH,uBAAuB,CACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,EAAE,CASV;IAED;;;;;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,CAuBA;IAED;;;OAGG;IACM,aAAa,IAAI,kBAAkB,CAY3C;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,UAepC;IAED;;OAEG;IACM,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAKxD;CACD"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"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"}
package/dist/nodes.js CHANGED
@@ -1,11 +1,22 @@
1
+ import { microToDegrees, OSM_COORD_SCALE, toMicroDegrees } from "@osmix/geo/coordinates";
1
2
  import { assertValue } from "@osmix/shared/assert";
2
- import { microToDegrees, toMicroDegrees } from "@osmix/shared/coordinates";
3
- import { around as geoAround } from "geokdbush";
4
- import KDBush from "kdbush";
5
3
  import { Entities } from "./entities.js";
6
4
  import { Ids } from "./ids.js";
5
+ import { IndirectKdIndex } from "./indirect-kd-index.js";
7
6
  import { Tags } from "./tags.js";
8
- import { BufferConstructor, ResizeableTypedArray as RTA, } from "./typed-arrays.js";
7
+ import { ResizeableTypedArray as RTA } from "./typed-arrays.js";
8
+ const EARTH_RADIUS_KM = 6371.0088;
9
+ const COORDINATE_PADDING_DEGREES = 1 / OSM_COORD_SCALE;
10
+ export class SpatialIndexNotBuiltError extends Error {
11
+ code = "SPATIAL_INDEX_NOT_BUILT";
12
+ entityType = "node";
13
+ indexKind;
14
+ constructor(indexKind) {
15
+ super(`The ${indexKind} node spatial index has not been built.`);
16
+ this.name = "SpatialIndexNotBuiltError";
17
+ this.indexKind = indexKind;
18
+ }
19
+ }
9
20
  export class Nodes extends Entities {
10
21
  /**
11
22
  * Coordinates are stored as integer microdegrees (Int32Array).
@@ -13,17 +24,15 @@ export class Nodes extends Entities {
13
24
  */
14
25
  lons;
15
26
  lats;
16
- // Bbox stored in microdegrees internally
27
+ // Bounding box is exposed and transferred in degrees.
17
28
  bbox = [
18
29
  Number.MAX_SAFE_INTEGER,
19
30
  Number.MAX_SAFE_INTEGER,
20
31
  Number.MIN_SAFE_INTEGER,
21
32
  Number.MIN_SAFE_INTEGER,
22
33
  ];
23
- // Spatial index stores coordinates in degrees (Float64Array) for geokdbush compatibility
24
- spatialIndex = new KDBush(0, 128, Float64Array, BufferConstructor);
25
- // Track if spatial index was properly built (vs default empty)
26
- spatialIndexBuilt = false;
34
+ allSpatialIndex;
35
+ taggedSpatialIndex;
27
36
  /**
28
37
  * Create a new Nodes index.
29
38
  */
@@ -32,10 +41,11 @@ export class Nodes extends Entities {
32
41
  super("node", new Ids(transferables), new Tags(stringTable, transferables));
33
42
  this.lons = RTA.from(Int32Array, transferables.lons);
34
43
  this.lats = RTA.from(Int32Array, transferables.lats);
35
- // Only load spatial index if provided (not stored in IndexedDB)
36
- if (transferables.spatialIndex?.byteLength) {
37
- this.spatialIndex = KDBush.from(transferables.spatialIndex);
38
- this.spatialIndexBuilt = true;
44
+ if (transferables.allSpatialIndex !== undefined) {
45
+ this.allSpatialIndex = IndirectKdIndex.from(this.lons.array, this.lats.array, transferables.allSpatialIndex);
46
+ }
47
+ if (transferables.taggedSpatialIndex !== undefined) {
48
+ this.taggedSpatialIndex = IndirectKdIndex.from(this.lons.array, this.lats.array, transferables.taggedSpatialIndex);
39
49
  }
40
50
  this.bbox = transferables.bbox;
41
51
  this.indexBuilt = true;
@@ -44,8 +54,6 @@ export class Nodes extends Entities {
44
54
  super("node", new Ids(), new Tags(stringTable));
45
55
  this.lons = new RTA(Int32Array);
46
56
  this.lats = new RTA(Int32Array);
47
- // Spatial index uses Float64Array with degrees for geokdbush compatibility
48
- this.spatialIndex = new KDBush(0, 128, Float64Array, BufferConstructor);
49
57
  }
50
58
  }
51
59
  /**
@@ -156,33 +164,50 @@ export class Nodes extends Entities {
156
164
  this.lats.compact();
157
165
  }
158
166
  /**
159
- * Build the spatial index for nodes.
160
- * Spatial index stores degrees (Float64Array) for geokdbush compatibility.
167
+ * Build one of the independent node spatial indexes.
161
168
  */
162
- buildSpatialIndex() {
163
- console.time("NodeIndex.buildSpatialIndex");
164
- // Use Float64Array with degrees for geokdbush geographic queries
165
- this.spatialIndex = new KDBush(this.size, 64, Float64Array, BufferConstructor);
166
- for (let i = 0; i < this.size; i++) {
167
- // Convert microdegrees to degrees for spatial index
168
- const lon = microToDegrees(this.lons.at(i));
169
- const lat = microToDegrees(this.lats.at(i));
170
- this.spatialIndex.add(lon, lat);
169
+ buildSpatialIndex(kind = "all") {
170
+ if (this.hasSpatialIndex(kind))
171
+ return;
172
+ console.time(`NodeIndex.buildSpatialIndex.${kind}`);
173
+ if (kind === "all") {
174
+ this.allSpatialIndex = IndirectKdIndex.build(this.lons.array, this.lats.array, this.size, (indexes) => {
175
+ for (let i = 0; i < indexes.length; i++)
176
+ indexes[i] = i;
177
+ });
178
+ }
179
+ else {
180
+ this.taggedSpatialIndex = IndirectKdIndex.build(this.lons.array, this.lats.array, this.taggedSize, (indexes) => {
181
+ let position = 0;
182
+ for (const entityIndex of this.tags.taggedEntityIndexes()) {
183
+ indexes[position++] = entityIndex;
184
+ }
185
+ if (position !== indexes.length) {
186
+ throw new Error(`Expected ${indexes.length} tagged nodes while building index, received ${position}`);
187
+ }
188
+ });
171
189
  }
172
- this.spatialIndex.finish();
173
- this.spatialIndexBuilt = true;
174
- console.timeEnd("NodeIndex.buildSpatialIndex");
190
+ console.timeEnd(`NodeIndex.buildSpatialIndex.${kind}`);
175
191
  }
176
192
  /**
177
193
  * Check if the spatial index has been built.
178
194
  */
179
- hasSpatialIndex() {
180
- return this.spatialIndexBuilt;
195
+ hasSpatialIndex(kind = "all") {
196
+ return kind === "all"
197
+ ? this.allSpatialIndex !== undefined
198
+ : this.taggedSpatialIndex !== undefined;
199
+ }
200
+ /** Number of nodes that carry at least one tag. */
201
+ get taggedSize() {
202
+ return this.tags.taggedEntityCount;
181
203
  }
182
204
  /**
183
- * Get the bounding box of all nodes.
205
+ * Get the bounding box of all nodes, or `null` when there are no nodes.
184
206
  */
185
207
  getBbox() {
208
+ // The bbox starts inverted and only becomes valid once a node extends it.
209
+ if (this.bbox[0] > this.bbox[2] || this.bbox[1] > this.bbox[3])
210
+ return null;
186
211
  return this.bbox;
187
212
  }
188
213
  /**
@@ -194,15 +219,11 @@ export class Nodes extends Entities {
194
219
  const lat = microToDegrees(this.lats.at(index));
195
220
  return [lon, lat, lon, lat];
196
221
  }
197
- /**
198
- * Get the longitude and latitude of a specific node.
199
- */
200
222
  getNodeLonLat(i) {
201
223
  const index = "index" in i ? i.index : this.ids.idOrIndex(i)[0];
202
- return [
203
- microToDegrees(this.lons.at(index)),
204
- microToDegrees(this.lats.at(index)),
205
- ];
224
+ if (index === -1)
225
+ return null;
226
+ return [microToDegrees(this.lons.at(index)), microToDegrees(this.lats.at(index))];
206
227
  }
207
228
  /**
208
229
  * Get the full node entity.
@@ -228,20 +249,42 @@ export class Nodes extends Entities {
228
249
  * Find node indexes within a bounding box.
229
250
  */
230
251
  findIndexesWithinBbox(bbox) {
231
- // Spatial index stores degrees, so query with degrees directly
232
- return this.spatialIndex.range(bbox[0], bbox[1], bbox[2], bbox[3]);
252
+ return findIndexesWithinBbox(this.getSpatialIndex("all"), bbox);
253
+ }
254
+ /** Find tagged node indexes within a bounding box. */
255
+ findTaggedIndexesWithinBbox(bbox) {
256
+ return findIndexesWithinBbox(this.getSpatialIndex("tagged"), bbox);
233
257
  }
234
258
  /**
235
259
  * Find node indexes within a radius of a point.
236
- * Uses geokdbush for proper great-circle distance calculations.
260
+ * Uses an exact haversine-distance filter over a conservative KD bbox query.
237
261
  * @param lon - Longitude in degrees.
238
262
  * @param lat - Latitude in degrees.
239
263
  * @param radiusKm - Radius in kilometers.
240
264
  * @returns Array of node indexes within the radius.
241
265
  */
242
266
  findIndexesWithinRadius(lon, lat, radiusKm) {
243
- // Use geokdbush for proper geographic distance calculations
244
- return geoAround(this.spatialIndex, lon, lat, Number.POSITIVE_INFINITY, radiusKm);
267
+ const spatialIndex = this.getSpatialIndex("all");
268
+ if (!Number.isFinite(lon) || !Number.isFinite(lat)) {
269
+ throw new RangeError("Longitude and latitude must be finite numbers");
270
+ }
271
+ if (lat < -90 || lat > 90)
272
+ throw new RangeError("Latitude must be between -90 and 90");
273
+ if (Number.isNaN(radiusKm) || radiusKm < 0)
274
+ return [];
275
+ const normalizedLon = normalizeLongitude(lon);
276
+ const bbox = radiusBoundingBox(normalizedLon, lat, radiusKm);
277
+ const candidates = findIndexesWithinBbox(spatialIndex, bbox);
278
+ const matches = [];
279
+ for (const index of candidates) {
280
+ const nodeLon = microToDegrees(this.lons.at(index));
281
+ const nodeLat = microToDegrees(this.lats.at(index));
282
+ const distance = haversineDistanceKm(normalizedLon, lat, nodeLon, nodeLat);
283
+ if (distance <= radiusKm)
284
+ matches.push({ distance, index });
285
+ }
286
+ matches.sort((a, b) => a.distance - b.distance || a.index - b.index);
287
+ return matches.map(({ index }) => index);
245
288
  }
246
289
  /**
247
290
  * Get nodes within a bounding box.
@@ -273,7 +316,7 @@ export class Nodes extends Entities {
273
316
  }
274
317
  /**
275
318
  * Get transferable objects for passing to another thread.
276
- * Only includes spatialIndex if it has been built.
319
+ * Only includes spatial indexes that have been built.
277
320
  */
278
321
  transferables() {
279
322
  const base = {
@@ -282,37 +325,117 @@ export class Nodes extends Entities {
282
325
  lats: this.lats.array.buffer,
283
326
  bbox: this.bbox,
284
327
  };
285
- // Only include spatial index if it was built
286
- if (this.spatialIndexBuilt) {
287
- return { ...base, spatialIndex: this.spatialIndex.data };
288
- }
289
- return base;
328
+ return {
329
+ ...base,
330
+ ...(this.allSpatialIndex ? { allSpatialIndex: this.allSpatialIndex.buffer } : {}),
331
+ ...(this.taggedSpatialIndex ? { taggedSpatialIndex: this.taggedSpatialIndex.buffer } : {}),
332
+ };
290
333
  }
291
334
  /**
292
335
  * Get the approximate memory requirements for a given number of nodes in bytes.
293
336
  */
294
- static getBytesRequired(count) {
337
+ static getBytesRequired(count, taggedCount = count, tagCount = 0) {
295
338
  if (count === 0)
296
339
  return 0;
297
- const indexBytes = (count < 65536 ? 2 : 4) * count;
298
- // Spatial index stores coordinates in degrees (Float64Array)
299
- const coordsBytes = count * 2 * Float64Array.BYTES_PER_ELEMENT;
300
- const padding = (8 - (indexBytes % 8)) % 8;
301
- const spatialIndexBytes = 8 + indexBytes + coordsBytes + padding;
302
340
  return (Ids.getBytesRequired(count) +
303
- Tags.getBytesRequired(count) +
341
+ Tags.getBytesRequired(count, taggedCount, tagCount) +
304
342
  count * Int32Array.BYTES_PER_ELEMENT + // lons (stored in microdegrees)
305
343
  count * Int32Array.BYTES_PER_ELEMENT + // lats (stored in microdegrees)
306
- spatialIndexBytes);
344
+ Nodes.getSpatialIndexBytesRequired(count) +
345
+ Nodes.getSpatialIndexBytesRequired(taggedCount));
346
+ }
347
+ /** Exact bytes in an indirect node spatial-index permutation. */
348
+ static getSpatialIndexBytesRequired(count) {
349
+ return count * Uint32Array.BYTES_PER_ELEMENT;
307
350
  }
308
351
  /**
309
352
  * Update a ContentHasher with node-specific data (coordinates).
310
353
  */
311
354
  updateHash(hasher) {
312
- return super
313
- .updateHash(hasher)
314
- .update(this.lons.array)
315
- .update(this.lats.array);
355
+ return super.updateHash(hasher).update(this.lons.array).update(this.lats.array);
356
+ }
357
+ getSpatialIndex(kind) {
358
+ const index = kind === "all" ? this.allSpatialIndex : this.taggedSpatialIndex;
359
+ if (!index)
360
+ throw new SpatialIndexNotBuiltError(kind);
361
+ return index;
362
+ }
363
+ }
364
+ /**
365
+ * Round-trip float error tolerance for degree → microdegree conversion.
366
+ * `microToDegrees(x) * OSM_COORD_SCALE` can differ from `x` by a few ulps
367
+ * (~1e-6 at ±1.8e9), so ceil/floor without a tolerance could exclude a node
368
+ * whose exact stored coordinate sits on the query boundary.
369
+ */
370
+ const MICRO_EPSILON = 1e-5;
371
+ /** Smallest microdegree integer inside an inclusive degree lower bound. */
372
+ function microLowerBound(degrees) {
373
+ return Math.ceil(degrees * OSM_COORD_SCALE - MICRO_EPSILON);
374
+ }
375
+ /** Largest microdegree integer inside an inclusive degree upper bound. */
376
+ function microUpperBound(degrees) {
377
+ return Math.floor(degrees * OSM_COORD_SCALE + MICRO_EPSILON);
378
+ }
379
+ function findIndexesWithinBbox(index, bbox) {
380
+ const [minLon, minLat, maxLon, maxLat] = bbox;
381
+ if (minLat > maxLat)
382
+ return [];
383
+ const microMinLat = microLowerBound(minLat);
384
+ const microMaxLat = microUpperBound(maxLat);
385
+ if (microMinLat > microMaxLat)
386
+ return [];
387
+ let result;
388
+ if (minLon <= maxLon) {
389
+ result = index.range(microLowerBound(minLon), microMinLat, microUpperBound(maxLon), microMaxLat);
316
390
  }
391
+ else {
392
+ result = index
393
+ .range(microLowerBound(minLon), microMinLat, 180 * OSM_COORD_SCALE, microMaxLat)
394
+ .concat(index.range(-180 * OSM_COORD_SCALE, microMinLat, microUpperBound(maxLon), microMaxLat));
395
+ }
396
+ return result;
397
+ }
398
+ function radiusBoundingBox(lon, lat, radiusKm) {
399
+ if (!Number.isFinite(radiusKm))
400
+ return [-180, -90, 180, 90];
401
+ const angularRadius = radiusKm / EARTH_RADIUS_KM;
402
+ if (angularRadius >= Math.PI)
403
+ return [-180, -90, 180, 90];
404
+ const latRadians = degreesToRadians(lat);
405
+ const minLatRadians = Math.max(-Math.PI / 2, latRadians - angularRadius);
406
+ const maxLatRadians = Math.min(Math.PI / 2, latRadians + angularRadius);
407
+ const minLat = Math.max(-90, radiansToDegrees(minLatRadians) - COORDINATE_PADDING_DEGREES);
408
+ const maxLat = Math.min(90, radiansToDegrees(maxLatRadians) + COORDINATE_PADDING_DEGREES);
409
+ if (angularRadius >= Math.PI / 2 ||
410
+ minLatRadians <= -Math.PI / 2 ||
411
+ maxLatRadians >= Math.PI / 2) {
412
+ return [-180, minLat, 180, maxLat];
413
+ }
414
+ const ratio = Math.sin(angularRadius) / Math.cos(latRadians);
415
+ const deltaLon = radiansToDegrees(Math.asin(Math.min(1, Math.max(-1, ratio)))) + COORDINATE_PADDING_DEGREES;
416
+ const rawMinLon = lon - deltaLon;
417
+ const rawMaxLon = lon + deltaLon;
418
+ return [normalizeLongitude(rawMinLon), minLat, normalizeLongitude(rawMaxLon), maxLat];
419
+ }
420
+ function haversineDistanceKm(lon1, lat1, lon2, lat2) {
421
+ const latDelta = degreesToRadians(lat2 - lat1);
422
+ const lonDelta = degreesToRadians(lon2 - lon1);
423
+ const lat1Radians = degreesToRadians(lat1);
424
+ const lat2Radians = degreesToRadians(lat2);
425
+ const a = Math.sin(latDelta / 2) ** 2 +
426
+ Math.sin(lonDelta / 2) ** 2 * Math.cos(lat1Radians) * Math.cos(lat2Radians);
427
+ return 2 * EARTH_RADIUS_KM * Math.atan2(Math.sqrt(a), Math.sqrt(Math.max(0, 1 - a)));
428
+ }
429
+ function normalizeLongitude(lon) {
430
+ if (lon >= -180 && lon <= 180)
431
+ return lon;
432
+ const normalized = ((((lon + 180) % 360) + 360) % 360) - 180;
433
+ return normalized === -180 && lon > 0 ? 180 : normalized;
434
+ }
435
+ function degreesToRadians(value) {
436
+ return value * (Math.PI / 180);
437
+ }
438
+ function radiansToDegrees(value) {
439
+ return value * (180 / Math.PI);
317
440
  }
318
441
  //# sourceMappingURL=nodes.js.map
package/dist/nodes.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"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"}