@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,165 @@
1
+ import { Nodes } from "./nodes";
2
+ import { Relations } from "./relations";
3
+ import StringTable, {} from "./stringtable";
4
+ import { ContentHasher } from "./utils";
5
+ import { Ways } from "./ways";
6
+ /**
7
+ * OSM Entity Index.
8
+ */
9
+ export class Osm {
10
+ // Filename or ID of this OSM Entity index.
11
+ id;
12
+ header;
13
+ // Shared string lookup table for all nodes, ways, and relations
14
+ stringTable;
15
+ nodes;
16
+ ways;
17
+ relations;
18
+ indexBuilt = false;
19
+ _contentHash = "";
20
+ /**
21
+ * Create a new OSM Entity index.
22
+ */
23
+ constructor(opts) {
24
+ this.id = opts?.id ?? "unknown";
25
+ this.header = opts?.header ?? {
26
+ required_features: [],
27
+ optional_features: [],
28
+ };
29
+ if (opts && "stringTable" in opts) {
30
+ if (opts instanceof Osm) {
31
+ this.stringTable = new StringTable(opts.stringTable.transferables());
32
+ this.nodes = new Nodes(this.stringTable, opts.nodes.transferables());
33
+ this.ways = new Ways(this.stringTable, this.nodes, opts.ways.transferables());
34
+ this.relations = new Relations(this.stringTable, this.nodes, this.ways, opts.relations.transferables());
35
+ this._contentHash = opts._contentHash;
36
+ this.indexBuilt = true;
37
+ }
38
+ else {
39
+ this.stringTable = new StringTable(opts.stringTable);
40
+ this.nodes = new Nodes(this.stringTable, opts.nodes);
41
+ this.ways = new Ways(this.stringTable, this.nodes, opts.ways);
42
+ this.relations = new Relations(this.stringTable, this.nodes, this.ways, opts.relations);
43
+ this._contentHash = opts.contentHash;
44
+ this.indexBuilt = true;
45
+ }
46
+ }
47
+ else {
48
+ this.stringTable = new StringTable();
49
+ this.nodes = new Nodes(this.stringTable);
50
+ this.ways = new Ways(this.stringTable, this.nodes);
51
+ this.relations = new Relations(this.stringTable, this.nodes, this.ways);
52
+ }
53
+ }
54
+ /**
55
+ * Build the internal indexes for all entities.
56
+ * Also computes the content hash after indexes are built.
57
+ */
58
+ buildIndexes() {
59
+ this.stringTable.buildIndex();
60
+ this.nodes.buildIndex();
61
+ this.ways.buildIndex();
62
+ this.relations.buildIndex();
63
+ this.indexBuilt = true;
64
+ // Compute content hash after indexes are built
65
+ this._contentHash = this.computeContentHash();
66
+ }
67
+ /**
68
+ * Check if the index is built and ready for use.
69
+ */
70
+ isReady() {
71
+ return (this.nodes.isReady() &&
72
+ this.ways.isReady() &&
73
+ this.relations.isReady() &&
74
+ this.indexBuilt);
75
+ }
76
+ /**
77
+ * Build spatial indexes for all entities.
78
+ */
79
+ buildSpatialIndexes() {
80
+ this.nodes.buildSpatialIndex();
81
+ this.ways.buildSpatialIndex();
82
+ this.relations.buildSpatialIndex();
83
+ }
84
+ /**
85
+ * Check if spatial indexes have been built for all entity types.
86
+ */
87
+ hasSpatialIndexes() {
88
+ return (this.nodes.hasSpatialIndex() &&
89
+ this.ways.hasSpatialIndex() &&
90
+ this.relations.hasSpatialIndex());
91
+ }
92
+ /**
93
+ * Get the bounding box of all entities in the OSM index.
94
+ */
95
+ bbox() {
96
+ return this.nodes.getBbox();
97
+ }
98
+ /**
99
+ * Get information about the OSM index.
100
+ */
101
+ info() {
102
+ return {
103
+ id: this.id,
104
+ bbox: this.bbox(),
105
+ header: this.header,
106
+ stats: {
107
+ nodes: this.nodes.size,
108
+ ways: this.ways.size,
109
+ relations: this.relations.size,
110
+ },
111
+ };
112
+ }
113
+ /**
114
+ * Get transferable objects for passing to another thread.
115
+ */
116
+ transferables() {
117
+ return {
118
+ id: this.id,
119
+ header: this.header,
120
+ contentHash: this._contentHash,
121
+ stringTable: this.stringTable.transferables(),
122
+ nodes: this.nodes.transferables(),
123
+ ways: this.ways.transferables(),
124
+ relations: this.relations.transferables(),
125
+ };
126
+ }
127
+ /**
128
+ * Get the content hash of this OSM dataset.
129
+ * The hash is computed when indexes are built.
130
+ *
131
+ * @returns A hex string hash uniquely identifying the content.
132
+ */
133
+ contentHash() {
134
+ return this._contentHash;
135
+ }
136
+ /**
137
+ * Check if this OSM dataset has identical content to another.
138
+ * Uses the pre-computed content hash for fast comparison.
139
+ *
140
+ * @param other - The other Osm instance to compare with.
141
+ * @returns True if both datasets have identical content.
142
+ */
143
+ isEqual(other) {
144
+ if (!other)
145
+ return false;
146
+ return this._contentHash === other._contentHash;
147
+ }
148
+ /**
149
+ * Compute a content hash of all underlying data.
150
+ * This hash uniquely identifies the dataset content regardless of metadata.
151
+ *
152
+ * @returns A hex string hash of the content.
153
+ */
154
+ computeContentHash() {
155
+ const hasher = new ContentHasher();
156
+ // Hash string table first (shared by all entities)
157
+ this.stringTable.updateHash(hasher);
158
+ // Hash each entity collection
159
+ this.nodes.updateHash(hasher);
160
+ this.ways.updateHash(hasher);
161
+ this.relations.updateHash(hasher);
162
+ return hasher.digest();
163
+ }
164
+ }
165
+ //# sourceMappingURL=osm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osm.js","sourceRoot":"","sources":["../../src/osm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { OsmPbfRelation } from "@osmix/pbf";
2
+ import type { GeoBbox2D, LonLat, OsmEntityType, OsmRelation, OsmRelationMember, OsmTags } 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
+ import type { Ways } from "./ways";
11
+ export interface RelationsTransferables<T extends BufferType = BufferType> extends EntitiesTransferables<T> {
12
+ memberStart: T;
13
+ memberCount: T;
14
+ memberRefs: T;
15
+ memberTypes: T;
16
+ memberRoles: T;
17
+ bbox: T;
18
+ /** Optional - can be rebuilt via buildSpatialIndex() */
19
+ spatialIndex?: T;
20
+ }
21
+ export declare class Relations extends Entities<OsmRelation> {
22
+ private stringTable;
23
+ private memberStart;
24
+ private memberCount;
25
+ private memberRefs;
26
+ private memberTypes;
27
+ private memberRoles;
28
+ private spatialIndex;
29
+ private spatialIndexBuilt;
30
+ private bbox;
31
+ private nodes;
32
+ private ways;
33
+ /**
34
+ * Create a new Relations index.
35
+ */
36
+ constructor(stringTable: StringTable, nodes: Nodes, ways: Ways, transferables?: RelationsTransferables);
37
+ /**
38
+ * Add a single relation to the index.
39
+ */
40
+ addRelation(relation: OsmRelation): number;
41
+ /**
42
+ * Bulk add relations directly from a PBF PrimitiveBlock.
43
+ */
44
+ addRelations(relations: OsmPbfRelation[], blockStringIndexMap: Uint32Array, filter?: (relation: OsmRelation) => OsmRelation | null): number;
45
+ /**
46
+ * Compact the internal arrays to free up memory.
47
+ */
48
+ buildEntityIndex(): void;
49
+ /**
50
+ * Build the spatial index for relations.
51
+ * Handles nested relations by resolving all descendant nodes and ways.
52
+ * If bbox data already exists (e.g., loaded from storage), reuses it.
53
+ */
54
+ buildSpatialIndex(): Flatbush;
55
+ /**
56
+ * Check if the spatial index has been built.
57
+ */
58
+ hasSpatialIndex(): boolean;
59
+ /**
60
+ * Collect all coordinates from a relation, including nested relations.
61
+ * Used for building bounding boxes and spatial indexes.
62
+ */
63
+ private collectRelationCoordinates;
64
+ /**
65
+ * Get the bounding box of a relation.
66
+ */
67
+ getEntityBbox(i: IdOrIndex): GeoBbox2D;
68
+ /**
69
+ * Get the full relation entity.
70
+ */
71
+ getFullEntity(index: number, id: number, tags?: OsmTags): OsmRelation;
72
+ /**
73
+ * Get the members of a relation.
74
+ */
75
+ getMembersByIndex(index: number, relationMemberTypes?: OsmEntityType[]): OsmRelationMember[];
76
+ /**
77
+ * Check if a relation includes a specific member.
78
+ */
79
+ includesMember(index: number, memberRef: number, memberType: OsmEntityType, memberRole?: string): boolean;
80
+ /**
81
+ * Get all way IDs that are members of relations, including nested relations.
82
+ * Used to exclude these ways from individual rendering.
83
+ */
84
+ getWayMemberIds(): Set<number>;
85
+ /**
86
+ * Get relation geometry based on its kind.
87
+ * Returns coordinates suitable for rendering based on relation type.
88
+ * @param index - Relation index
89
+ * @returns Object with geometry data based on relation kind
90
+ */
91
+ getRelationGeometry(index: number): {
92
+ points?: LonLat[];
93
+ lineStrings?: LonLat[][];
94
+ rings?: LonLat[][][];
95
+ };
96
+ /**
97
+ * Find relations that intersect a bounding box.
98
+ */
99
+ intersects(bbox: GeoBbox2D, filterFn?: (index: number) => boolean): number[];
100
+ /**
101
+ * Find relation indexes near a point using great-circle distance.
102
+ * @param lon - Longitude in degrees.
103
+ * @param lat - Latitude in degrees.
104
+ * @param maxResults - Maximum number of results to return.
105
+ * @param maxDistanceKm - Maximum distance in kilometers.
106
+ * @returns Array of relation indexes sorted by distance.
107
+ */
108
+ neighbors(lon: number, lat: number, maxResults?: number, maxDistanceKm?: number): number[];
109
+ /**
110
+ * Get transferable objects for passing to another thread.
111
+ * Only includes spatialIndex if it has been built.
112
+ */
113
+ transferables(): RelationsTransferables;
114
+ /**
115
+ * Get the approximate memory requirements for a given number of relations in bytes.
116
+ */
117
+ static getBytesRequired(count: number): number;
118
+ /**
119
+ * Update a ContentHasher with relation-specific data (members).
120
+ */
121
+ updateHash(hasher: ContentHasher): ContentHasher;
122
+ }
123
+ //# sourceMappingURL=relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"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"}