@osmix/core 0.0.1 → 0.0.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 (74) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/src/entities.d.ts +26 -0
  3. package/dist/src/entities.d.ts.map +1 -0
  4. package/dist/src/entities.js +69 -0
  5. package/dist/src/entities.js.map +1 -0
  6. package/dist/src/ids.d.ts +50 -0
  7. package/dist/src/ids.d.ts.map +1 -0
  8. package/dist/src/ids.js +171 -0
  9. package/dist/src/ids.js.map +1 -0
  10. package/dist/src/index.d.ts +6 -0
  11. package/dist/src/index.d.ts.map +1 -0
  12. package/dist/src/index.js +7 -0
  13. package/dist/src/index.js.map +1 -0
  14. package/dist/src/nodes.d.ts +36 -0
  15. package/dist/src/nodes.d.ts.map +1 -0
  16. package/dist/src/nodes.js +171 -0
  17. package/dist/src/nodes.js.map +1 -0
  18. package/dist/src/osmix.d.ts +88 -0
  19. package/dist/src/osmix.d.ts.map +1 -0
  20. package/dist/src/osmix.js +438 -0
  21. package/dist/src/osmix.js.map +1 -0
  22. package/dist/src/relations.d.ts +31 -0
  23. package/dist/src/relations.d.ts.map +1 -0
  24. package/dist/src/relations.js +161 -0
  25. package/dist/src/relations.js.map +1 -0
  26. package/dist/src/stringtable.d.ts +37 -0
  27. package/dist/src/stringtable.d.ts.map +1 -0
  28. package/dist/src/stringtable.js +101 -0
  29. package/dist/src/stringtable.js.map +1 -0
  30. package/dist/src/tags.d.ts +33 -0
  31. package/dist/src/tags.d.ts.map +1 -0
  32. package/dist/src/tags.js +92 -0
  33. package/dist/src/tags.js.map +1 -0
  34. package/dist/src/typed-arrays.d.ts +50 -0
  35. package/dist/src/typed-arrays.d.ts.map +1 -0
  36. package/dist/src/typed-arrays.js +119 -0
  37. package/dist/src/typed-arrays.js.map +1 -0
  38. package/dist/src/utils.d.ts +4 -0
  39. package/dist/src/utils.d.ts.map +1 -0
  40. package/dist/src/utils.js +28 -0
  41. package/dist/src/utils.js.map +1 -0
  42. package/dist/src/ways.d.ts +42 -0
  43. package/dist/src/ways.d.ts.map +1 -0
  44. package/dist/src/ways.js +186 -0
  45. package/dist/src/ways.js.map +1 -0
  46. package/dist/test/extract.bench.d.ts +2 -0
  47. package/dist/test/extract.bench.d.ts.map +1 -0
  48. package/dist/test/extract.bench.js +23 -0
  49. package/dist/test/extract.bench.js.map +1 -0
  50. package/dist/test/extract.test.d.ts +2 -0
  51. package/dist/test/extract.test.d.ts.map +1 -0
  52. package/dist/test/extract.test.js +127 -0
  53. package/dist/test/extract.test.js.map +1 -0
  54. package/dist/test/mock-osm.d.ts +13 -0
  55. package/dist/test/mock-osm.d.ts.map +1 -0
  56. package/dist/test/mock-osm.js +122 -0
  57. package/dist/test/mock-osm.js.map +1 -0
  58. package/dist/test/read.test.d.ts +2 -0
  59. package/dist/test/read.test.d.ts.map +1 -0
  60. package/dist/test/read.test.js +17 -0
  61. package/dist/test/read.test.js.map +1 -0
  62. package/dist/test/typed-arrays.test.d.ts +2 -0
  63. package/dist/test/typed-arrays.test.d.ts.map +1 -0
  64. package/dist/test/typed-arrays.test.js +100 -0
  65. package/dist/test/typed-arrays.test.js.map +1 -0
  66. package/dist/test/write.test.d.ts +2 -0
  67. package/dist/test/write.test.d.ts.map +1 -0
  68. package/dist/test/write.test.js +55 -0
  69. package/dist/test/write.test.js.map +1 -0
  70. package/package.json +3 -1
  71. package/src/osmix.ts +2 -2
  72. package/test/extract.bench.ts +1 -1
  73. package/test/extract.test.ts +8 -3
  74. package/test/write.test.ts +4 -1
@@ -0,0 +1,88 @@
1
+ import { type OsmEntity, type OsmEntityType, type OsmEntityTypeMap, type OsmixGeoJSONFeature, type OsmNode, type OsmRelation, type OsmWay } from "@osmix/json";
2
+ import { type AsyncGeneratorValue, type OsmPbfBlock, type OsmPbfHeaderBlock } from "@osmix/pbf";
3
+ import type { GeoBbox2D } from "@osmix/shared/types";
4
+ import { Nodes, type NodesTransferables } from "./nodes";
5
+ import { Relations, type RelationsTransferables } from "./relations";
6
+ import StringTable, { type StringTableTransferables } from "./stringtable";
7
+ import { Ways, type WaysTransferables } from "./ways";
8
+ export interface OsmixTransferables {
9
+ id: string;
10
+ header: OsmPbfHeaderBlock;
11
+ stringTable: StringTableTransferables;
12
+ nodes: NodesTransferables;
13
+ ways: WaysTransferables;
14
+ relations: RelationsTransferables;
15
+ parsingTimeMs: number;
16
+ }
17
+ export interface OsmixOptions {
18
+ id: string;
19
+ extractBbox: GeoBbox2D;
20
+ logger: (message: string, type?: LogLevel) => void;
21
+ filter<T extends OsmEntityType>(type: T, entity: OsmEntityTypeMap[T], osmix: Osmix): boolean;
22
+ header: OsmPbfHeaderBlock;
23
+ buildSpatialIndexes: OsmEntityType[];
24
+ }
25
+ export type LogLevel = "debug" | "info" | "warn" | "error";
26
+ /**
27
+ * OSM Entity Index.
28
+ */
29
+ export declare class Osmix {
30
+ #private;
31
+ id: string;
32
+ header: OsmPbfHeaderBlock;
33
+ blocksGenerator: AsyncGenerator<OsmPbfBlock> | null;
34
+ stringTable: StringTable;
35
+ nodes: Nodes;
36
+ ways: Ways;
37
+ relations: Relations;
38
+ log: (message: string, type?: LogLevel) => void;
39
+ buildTimeMs: number;
40
+ static from({ id, header, stringTable, nodes, ways, relations, parsingTimeMs, }: OsmixTransferables): Osmix;
41
+ /**
42
+ * Easiest way to get started with Osmix. Reads a PBF file into an Osmix index. Logs progress to the console.
43
+ */
44
+ static fromPbf(data: AsyncGeneratorValue<Uint8Array<ArrayBufferLike>>, options?: Partial<OsmixOptions>): Promise<Osmix>;
45
+ constructor(options?: Partial<OsmixOptions>);
46
+ setLogger(listener: (message: string, type?: LogLevel) => void): void;
47
+ createThrottledLog(interval: number): (message: string, type?: LogLevel | undefined) => void;
48
+ buildIndexes(): void;
49
+ isReady(): boolean;
50
+ transferables(): OsmixTransferables;
51
+ readPbf(data: AsyncGeneratorValue<Uint8Array<ArrayBufferLike>>, options?: Partial<OsmixOptions>): Promise<void>;
52
+ buildSpatialIndexes(): void;
53
+ extract(bbox: GeoBbox2D): Osmix;
54
+ get<T extends OsmEntityType>(type: T, id: number): OsmEntityTypeMap[T] | undefined;
55
+ getById(eid: string): OsmEntity | null;
56
+ getNodesInBbox(bbox: GeoBbox2D, allNodes?: boolean): {
57
+ ids: Float64Array<ArrayBuffer>;
58
+ positions: Float64Array<ArrayBuffer>;
59
+ };
60
+ getWaysInBbox(bbox: GeoBbox2D): {
61
+ ids: Float64Array<ArrayBuffer>;
62
+ positions: Float64Array<ArrayBuffer>;
63
+ startIndices: Uint32Array<ArrayBuffer>;
64
+ };
65
+ getEntityGeoJson(entity: OsmNode | OsmWay | OsmRelation): OsmixGeoJSONFeature<GeoJSON.Point | GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.MultiPolygon>;
66
+ getEntityBbox(entity: OsmNode | OsmWay | OsmRelation): GeoBbox2D;
67
+ /**
68
+ * Get the bounding box of all entities in the OSM index.
69
+ */
70
+ bbox(): GeoBbox2D;
71
+ /**
72
+ * Create a generator that yields all entities in the OSM index, sorted by type and id.
73
+ */
74
+ allEntitiesSorted(): Generator<OsmEntity>;
75
+ /**
76
+ * Convert the OSM index to a `ReadableStream<OsmPbfHeaderBlock | OsmEntity>`.
77
+ */
78
+ toEntityStream(): import("stream/web").ReadableStream<OsmPbfHeaderBlock | OsmEntity>;
79
+ /**
80
+ * Convert the OSM index to a `ReadableStream<Uint8Array>` of PBF bytes.
81
+ */
82
+ toPbfStream(): import("stream/web").ReadableStream<Uint8Array<ArrayBufferLike>>;
83
+ /**
84
+ * Convert the OSM index to an in memory PBF ArrayBuffer.
85
+ */
86
+ toPbfBuffer(): Promise<ArrayBuffer>;
87
+ }
88
+ //# sourceMappingURL=osmix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osmix.d.ts","sourceRoot":"","sources":["../../src/osmix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ import { isNode, isRelation, isWay, nodeToFeature, OsmJsonToBlocksTransformStream, relationToFeature, wayToFeature, } from "@osmix/json";
2
+ import { OsmBlocksToPbfBytesTransformStream, readOsmPbf, } from "@osmix/pbf";
3
+ import { Nodes } from "./nodes";
4
+ import { Relations } from "./relations";
5
+ import StringTable, {} from "./stringtable";
6
+ import { IdArrayType } from "./typed-arrays";
7
+ import { bboxFromLonLats, throttle } from "./utils";
8
+ import { Ways } from "./ways";
9
+ /**
10
+ * OSM Entity Index.
11
+ */
12
+ export class Osmix {
13
+ // Filename or ID of this OSM Entity index.
14
+ id = "unknown";
15
+ header = {
16
+ required_features: [],
17
+ optional_features: [],
18
+ };
19
+ blocksGenerator = null;
20
+ // Shared string lookup table for all nodes, ways, and relations
21
+ stringTable;
22
+ nodes;
23
+ ways;
24
+ relations;
25
+ log = (message, type) => type === "error" ? console.error(message) : console.log(message);
26
+ #indexBuilt = false;
27
+ #startTime = performance.now();
28
+ buildTimeMs = 0;
29
+ static from({ id, header, stringTable, nodes, ways, relations, parsingTimeMs, }) {
30
+ const osm = new Osmix({ id, header });
31
+ osm.stringTable = StringTable.from(stringTable);
32
+ osm.nodes = Nodes.from(osm.stringTable, nodes);
33
+ osm.ways = Ways.from(osm.stringTable, ways);
34
+ osm.relations = Relations.from(osm.stringTable, relations);
35
+ osm.buildTimeMs = parsingTimeMs;
36
+ osm.#indexBuilt = true;
37
+ return osm;
38
+ }
39
+ /**
40
+ * Easiest way to get started with Osmix. Reads a PBF file into an Osmix index. Logs progress to the console.
41
+ */
42
+ static async fromPbf(data, options = {}) {
43
+ const osm = new Osmix(options);
44
+ await osm.readPbf(data, options);
45
+ // By default, build all spatial indexes.
46
+ if (!Array.isArray(options.buildSpatialIndexes)) {
47
+ osm.buildSpatialIndexes();
48
+ }
49
+ else if (options.buildSpatialIndexes.includes("node")) {
50
+ osm.nodes.buildSpatialIndex();
51
+ }
52
+ else if (options.buildSpatialIndexes.includes("way")) {
53
+ osm.ways.buildSpatialIndex(osm.nodes);
54
+ }
55
+ return osm;
56
+ }
57
+ constructor(options = {}) {
58
+ if (options.header)
59
+ this.header = options.header;
60
+ if (options.id)
61
+ this.id = options.id;
62
+ if (options.logger)
63
+ this.log = options.logger;
64
+ this.stringTable = new StringTable();
65
+ this.nodes = new Nodes(this.stringTable);
66
+ this.ways = new Ways(this.stringTable);
67
+ this.relations = new Relations(this.stringTable);
68
+ }
69
+ setLogger(listener) {
70
+ this.log = listener;
71
+ }
72
+ createThrottledLog(interval) {
73
+ return throttle(this.log, interval);
74
+ }
75
+ buildIndexes() {
76
+ if (!this.nodes.isReady)
77
+ this.nodes.buildIndex();
78
+ if (!this.ways.isReady)
79
+ this.ways.buildIndex();
80
+ if (!this.relations.isReady)
81
+ this.relations.buildIndex();
82
+ this.stringTable.buildIndex();
83
+ this.#indexBuilt = true;
84
+ this.buildTimeMs = performance.now() - this.#startTime;
85
+ }
86
+ isReady() {
87
+ return this.#indexBuilt;
88
+ }
89
+ transferables() {
90
+ return {
91
+ id: this.id,
92
+ header: this.header,
93
+ stringTable: this.stringTable.transferables(),
94
+ nodes: this.nodes.transferables(),
95
+ ways: this.ways.transferables(),
96
+ relations: this.relations.transferables(),
97
+ parsingTimeMs: this.buildTimeMs,
98
+ };
99
+ }
100
+ async readPbf(data, options = {}) {
101
+ if (this.#indexBuilt)
102
+ throw Error("Osmix built. Create new instance.");
103
+ const { extractBbox } = options;
104
+ const { header, blocks } = await readOsmPbf(data);
105
+ this.header = header;
106
+ if (extractBbox) {
107
+ this.header.bbox = {
108
+ left: extractBbox[0],
109
+ bottom: extractBbox[1],
110
+ right: extractBbox[2],
111
+ top: extractBbox[3],
112
+ };
113
+ }
114
+ const logEverySecond = this.createThrottledLog(1_000);
115
+ for await (const block of blocks) {
116
+ const blockStringIndexMap = this.stringTable.createBlockIndexMap(block);
117
+ for (const group of block.primitivegroup) {
118
+ const { nodes, ways, relations, dense } = group;
119
+ if (nodes && nodes.length > 0) {
120
+ throw Error("Nodes must be dense!");
121
+ }
122
+ if (dense) {
123
+ this.nodes.addDenseNodes(dense, block, blockStringIndexMap, extractBbox
124
+ ? (node) => {
125
+ return (node.lon >= extractBbox[0] &&
126
+ node.lon <= extractBbox[2] &&
127
+ node.lat >= extractBbox[1] &&
128
+ node.lat <= extractBbox[3]);
129
+ }
130
+ : undefined);
131
+ logEverySecond(`${this.nodes.size.toLocaleString()} nodes added`);
132
+ }
133
+ if (ways.length > 0) {
134
+ // Nodes are finished, build their index.
135
+ if (!this.nodes.isReady)
136
+ this.nodes.buildIndex();
137
+ this.ways.addWays(ways, blockStringIndexMap, extractBbox
138
+ ? (way) => {
139
+ const refs = way.refs.filter((ref) => this.nodes.ids.has(ref));
140
+ if (refs.length === 0)
141
+ return null;
142
+ return {
143
+ ...way,
144
+ refs,
145
+ };
146
+ }
147
+ : undefined);
148
+ logEverySecond(`${this.ways.size.toLocaleString()} ways added`);
149
+ }
150
+ if (relations.length > 0) {
151
+ if (!this.ways.isReady)
152
+ this.ways.buildIndex();
153
+ this.relations.addRelations(relations, blockStringIndexMap, extractBbox
154
+ ? (relation) => {
155
+ const members = relation.members.filter((member) => {
156
+ if (member.type === "node")
157
+ return this.nodes.ids.has(member.ref);
158
+ if (member.type === "way")
159
+ return this.ways.ids.has(member.ref);
160
+ return false;
161
+ });
162
+ if (members.length === 0)
163
+ return null;
164
+ return {
165
+ ...relation,
166
+ members,
167
+ };
168
+ }
169
+ : undefined);
170
+ logEverySecond(`${this.relations.size.toLocaleString()} relations added`);
171
+ }
172
+ }
173
+ }
174
+ this.log(`${this.nodes.size.toLocaleString()} nodes, ${this.ways.size.toLocaleString()} ways, and ${this.relations.size.toLocaleString()} relations added.`);
175
+ this.log("Building remaining id and tag indexes...");
176
+ this.buildIndexes();
177
+ }
178
+ buildSpatialIndexes() {
179
+ this.nodes.buildSpatialIndex();
180
+ this.ways.buildSpatialIndex(this.nodes);
181
+ }
182
+ extract(bbox) {
183
+ if (!this.#indexBuilt)
184
+ this.buildIndexes();
185
+ const [minLon, minLat, maxLon, maxLat] = bbox;
186
+ const extracted = new Osmix({
187
+ id: this.id,
188
+ header: {
189
+ ...this.header,
190
+ bbox: {
191
+ left: minLon,
192
+ bottom: minLat,
193
+ right: maxLon,
194
+ top: maxLat,
195
+ },
196
+ },
197
+ });
198
+ this.log("Selecting nodes within bounding box...");
199
+ this.buildSpatialIndexes();
200
+ for (const node of this.nodes.sorted()) {
201
+ if (node.lon >= minLon &&
202
+ node.lon <= maxLon &&
203
+ node.lat >= minLat &&
204
+ node.lat <= maxLat) {
205
+ extracted.nodes.addNode(node);
206
+ }
207
+ }
208
+ extracted.nodes.buildIndex();
209
+ this.log("Selecting ways within bounding box...");
210
+ for (const way of this.ways.sorted()) {
211
+ const refs = way.refs.filter((ref) => extracted.nodes.ids.has(ref));
212
+ if (refs.length > 0) {
213
+ extracted.ways.addWay({
214
+ ...way,
215
+ refs,
216
+ });
217
+ }
218
+ }
219
+ extracted.ways.buildIndex();
220
+ this.log("Selecting relations within bounding box...");
221
+ for (const relation of this.relations.sorted()) {
222
+ const members = relation.members.filter((m) => {
223
+ if (m.type === "node")
224
+ return extracted.nodes.ids.has(m.ref);
225
+ if (m.type === "way")
226
+ return extracted.ways.ids.has(m.ref);
227
+ return false;
228
+ });
229
+ if (members.length > 0) {
230
+ extracted.relations.addRelation({
231
+ ...relation,
232
+ members,
233
+ });
234
+ }
235
+ }
236
+ extracted.buildIndexes();
237
+ return extracted;
238
+ }
239
+ get(type, id) {
240
+ if (type === "node")
241
+ return this.nodes.get({ id });
242
+ if (type === "way")
243
+ return this.ways.get({ id });
244
+ if (type === "relation")
245
+ return this.relations.get({ id });
246
+ }
247
+ getById(eid) {
248
+ const [type, sid] = eid.split("/");
249
+ const id = Number(sid);
250
+ switch (type) {
251
+ case "node":
252
+ return this.nodes.getById(id);
253
+ case "way":
254
+ return this.ways.getById(id);
255
+ case "relation":
256
+ return this.relations.getById(id);
257
+ default: {
258
+ return null;
259
+ }
260
+ }
261
+ }
262
+ getNodesInBbox(bbox, allNodes = false) {
263
+ if (!this.#indexBuilt)
264
+ throw new Error("Osm not finished");
265
+ console.time("Osm.getNodesInBbox");
266
+ const nodeCandidates = this.nodes.withinBbox(bbox);
267
+ const nodePositions = new Float64Array(nodeCandidates.length * 2);
268
+ const ids = new IdArrayType(nodeCandidates.length);
269
+ let skipped = 0;
270
+ nodeCandidates.forEach((nodeIndex, i) => {
271
+ // Skip nodes with no tags, likely just a way node
272
+ if (!allNodes && this.nodes.tags.cardinality(nodeIndex) === 0) {
273
+ skipped++;
274
+ return;
275
+ }
276
+ const [lon, lat] = this.nodes.getNodeLonLat({ index: nodeIndex });
277
+ ids[i - skipped] = this.nodes.ids.at(nodeIndex);
278
+ nodePositions[(i - skipped) * 2] = lon;
279
+ nodePositions[(i - skipped) * 2 + 1] = lat;
280
+ });
281
+ console.timeEnd("Osm.getNodesInBbox");
282
+ return {
283
+ ids: ids.subarray(0, nodeCandidates.length - skipped),
284
+ positions: nodePositions.slice(0, (nodeCandidates.length - skipped) * 2),
285
+ };
286
+ }
287
+ getWaysInBbox(bbox) {
288
+ console.time("Osm.getWaysInBbox");
289
+ const wayCandidates = this.ways.intersects(bbox);
290
+ const ids = new IdArrayType(wayCandidates.length);
291
+ const wayPositions = [];
292
+ const wayStartIndices = new Uint32Array(wayCandidates.length + 1);
293
+ wayStartIndices[0] = 0;
294
+ console.time("Osm.getWaysInBbox.loop");
295
+ let size = 0;
296
+ wayCandidates.forEach((wayIndex, i) => {
297
+ ids[i] = this.ways.ids.at(wayIndex);
298
+ const way = this.ways.getLine(wayIndex, this.nodes);
299
+ size += way.length;
300
+ wayPositions.push(way);
301
+ const prevIndex = wayStartIndices[i];
302
+ if (prevIndex === undefined)
303
+ throw Error("Previous index is undefined");
304
+ wayStartIndices[i + 1] = prevIndex + way.length / 2;
305
+ });
306
+ console.timeEnd("Osm.getWaysInBbox.loop");
307
+ const wayPositionsArray = new Float64Array(size);
308
+ let pIndex = 0;
309
+ for (const way of wayPositions) {
310
+ wayPositionsArray.set(way, pIndex);
311
+ pIndex += way.length;
312
+ }
313
+ console.timeEnd("Osm.getWaysInBbox");
314
+ return {
315
+ ids,
316
+ positions: wayPositionsArray,
317
+ startIndices: wayStartIndices,
318
+ };
319
+ }
320
+ getEntityGeoJson(entity) {
321
+ if (isNode(entity)) {
322
+ return nodeToFeature(entity);
323
+ }
324
+ if (isWay(entity)) {
325
+ return wayToFeature(entity, (ref) => this.nodes.getNodeLonLat({ id: ref }));
326
+ }
327
+ if (isRelation(entity)) {
328
+ return relationToFeature(entity, (ref) => this.nodes.getNodeLonLat({ id: ref }));
329
+ }
330
+ throw new Error("Unknown entity type");
331
+ }
332
+ getEntityBbox(entity) {
333
+ if (isNode(entity)) {
334
+ const [lon, lat] = this.nodes.getNodeLonLat({ id: entity.id });
335
+ return [lon, lat, lon, lat];
336
+ }
337
+ if (isWay(entity)) {
338
+ return this.ways.getBbox({ id: entity.id });
339
+ }
340
+ if (isRelation(entity)) {
341
+ const relation = this.relations.getById(entity.id);
342
+ if (!relation)
343
+ throw Error("Relation not found");
344
+ const lls = [];
345
+ for (const member of relation.members) {
346
+ if (member.type === "node") {
347
+ const ll = this.nodes.getNodeLonLat({ id: member.ref });
348
+ lls.push(ll);
349
+ }
350
+ else if (member.type === "way") {
351
+ const wayIndex = this.ways.ids.getIndexFromId(member.ref);
352
+ if (wayIndex === -1)
353
+ throw Error("Way not found");
354
+ const wayPositions = this.ways.getCoordinates(wayIndex, this.nodes);
355
+ lls.push(...wayPositions);
356
+ }
357
+ }
358
+ return bboxFromLonLats(lls);
359
+ }
360
+ throw Error("Unknown entity type");
361
+ }
362
+ /**
363
+ * Get the bounding box of all entities in the OSM index.
364
+ */
365
+ bbox() {
366
+ return this.nodes.bbox;
367
+ }
368
+ /**
369
+ * Create a generator that yields all entities in the OSM index, sorted by type and id.
370
+ */
371
+ *allEntitiesSorted() {
372
+ for (const node of this.nodes.sorted()) {
373
+ yield node;
374
+ }
375
+ for (const way of this.ways.sorted()) {
376
+ yield way;
377
+ }
378
+ for (const relation of this.relations.sorted()) {
379
+ yield relation;
380
+ }
381
+ }
382
+ /**
383
+ * Convert the OSM index to a `ReadableStream<OsmPbfHeaderBlock | OsmEntity>`.
384
+ */
385
+ toEntityStream() {
386
+ let headerEnqueued = false;
387
+ const entityGenerator = this.allEntitiesSorted();
388
+ return new ReadableStream({
389
+ pull: async (controller) => {
390
+ if (!headerEnqueued) {
391
+ controller.enqueue({
392
+ ...this.header,
393
+ writingprogram: "@osmix/core",
394
+ osmosis_replication_timestamp: Date.now(),
395
+ });
396
+ headerEnqueued = true;
397
+ }
398
+ const block = entityGenerator.next();
399
+ if (block.done) {
400
+ controller.close();
401
+ }
402
+ else {
403
+ controller.enqueue(block.value);
404
+ }
405
+ },
406
+ });
407
+ }
408
+ /**
409
+ * Convert the OSM index to a `ReadableStream<Uint8Array>` of PBF bytes.
410
+ */
411
+ toPbfStream() {
412
+ return this.toEntityStream()
413
+ .pipeThrough(new OsmJsonToBlocksTransformStream())
414
+ .pipeThrough(new OsmBlocksToPbfBytesTransformStream());
415
+ }
416
+ /**
417
+ * Convert the OSM index to an in memory PBF ArrayBuffer.
418
+ */
419
+ async toPbfBuffer() {
420
+ const chunks = [];
421
+ let byteLength = 0;
422
+ const writable = new WritableStream({
423
+ write(chunk) {
424
+ chunks.push(chunk);
425
+ byteLength += chunk.byteLength;
426
+ },
427
+ });
428
+ await this.toPbfStream().pipeTo(writable);
429
+ const combined = new Uint8Array(byteLength);
430
+ let offset = 0;
431
+ for (const chunk of chunks) {
432
+ combined.set(chunk, offset);
433
+ offset += chunk.byteLength;
434
+ }
435
+ return combined.buffer;
436
+ }
437
+ }
438
+ //# sourceMappingURL=osmix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osmix.js","sourceRoot":"","sources":["../../src/osmix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { OsmEntityType, OsmRelation, OsmRelationMember, OsmTags } from "@osmix/json";
2
+ import type { OsmPbfRelation } from "@osmix/pbf";
3
+ import { Entities, type EntitiesTransferables } from "./entities";
4
+ import { Ids } from "./ids";
5
+ import type StringTable from "./stringtable";
6
+ import { Tags } from "./tags";
7
+ import { type BufferType, ResizeableTypedArray } from "./typed-arrays";
8
+ export interface RelationsTransferables extends EntitiesTransferables {
9
+ memberStart: BufferType;
10
+ memberCount: BufferType;
11
+ memberRefs: BufferType;
12
+ memberTypes: BufferType;
13
+ memberRoles: BufferType;
14
+ }
15
+ export declare class Relations extends Entities<OsmRelation> {
16
+ memberStart: ResizeableTypedArray<Uint32Array>;
17
+ memberCount: ResizeableTypedArray<Uint16Array>;
18
+ memberRefs: ResizeableTypedArray<Float64Array>;
19
+ memberTypes: ResizeableTypedArray<Uint8Array>;
20
+ memberRoles: ResizeableTypedArray<Uint32Array>;
21
+ static from(stringTable: StringTable, rit: RelationsTransferables): Relations;
22
+ constructor(stringTable: StringTable, idIndex?: Ids, tagIndex?: Tags);
23
+ transferables(): RelationsTransferables;
24
+ addRelation(relation: OsmRelation): void;
25
+ addRelations(relations: OsmPbfRelation[], blockStringIndexMap: Map<number, number>, filter?: (relation: OsmRelation) => OsmRelation | null): number;
26
+ buildEntityIndex(): void;
27
+ getFullEntity(index: number, id: number, tags?: OsmTags): OsmRelation;
28
+ getMembersByIndex(index: number, relationMemberTypes?: OsmEntityType[]): OsmRelationMember[];
29
+ includesMember(index: number, memberRef: number, memberType: OsmEntityType, memberRole?: string): boolean;
30
+ }
31
+ //# sourceMappingURL=relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/relations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,KAAK,WAAW,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EACN,KAAK,UAAU,EAEf,oBAAoB,EACpB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACpE,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;CACvB;AAED,qBAAa,SAAU,SAAQ,QAAQ,CAAC,WAAW,CAAC;IACnD,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAC9C,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAG9C,UAAU,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC9C,WAAW,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAA;IAC7C,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAE9C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAsB;gBAYrD,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAI;IASpE,aAAa,IAAI,sBAAsB;IAYvC,WAAW,CAAC,QAAQ,EAAE,WAAW;IAYjC,YAAY,CACX,SAAS,EAAE,cAAc,EAAE,EAC3B,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,WAAW,GAAG,IAAI,GACpD,MAAM;IA8ET,gBAAgB;IAQhB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW;IAQrE,iBAAiB,CAChB,KAAK,EAAE,MAAM,EACb,mBAAmB,kBAAwB;IAgB5C,cAAc,CACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,EACzB,UAAU,CAAC,EAAE,MAAM;CAkBpB"}