@osmix/vt 0.0.1 → 0.0.6

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.
@@ -0,0 +1,430 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { pointToTile } from "@mapbox/tilebelt";
3
+ import { VectorTile } from "@mapbox/vector-tile";
4
+ import { Osm } from "@osmix/core";
5
+ import { llToTilePx } from "@osmix/shared/tile";
6
+ import { decodeZigzag } from "@osmix/shared/zigzag";
7
+ import Protobuf from "pbf";
8
+ import { OsmixVtEncoder } from "./encode";
9
+ const osm = new Osm();
10
+ osm.nodes.addNode({
11
+ id: 1,
12
+ lat: 40,
13
+ lon: -74,
14
+ tags: {
15
+ name: "Test Node",
16
+ },
17
+ });
18
+ // Add nodes for way
19
+ osm.nodes.addNode({
20
+ id: 2,
21
+ lat: 40.72,
22
+ lon: -74.01,
23
+ });
24
+ osm.nodes.addNode({
25
+ id: 3,
26
+ lat: 40.715,
27
+ lon: -74.005,
28
+ });
29
+ osm.nodes.addNode({
30
+ id: 4,
31
+ lat: 40.7122,
32
+ lon: -74.001,
33
+ });
34
+ osm.ways.addWay({
35
+ id: 5,
36
+ refs: [1, 2],
37
+ tags: { highway: "primary" },
38
+ });
39
+ osm.buildIndexes();
40
+ osm.buildSpatialIndexes();
41
+ const WAY_LAYER_ID = `@osmix:${osm.id}:ways`;
42
+ const NODE_LAYER_ID = `@osmix:${osm.id}:nodes`;
43
+ function decodeTile(data) {
44
+ const tile = new VectorTile(new Protobuf(data));
45
+ return tile.layers;
46
+ }
47
+ const extent = 4096;
48
+ function bboxToTile(bbox, z = 8) {
49
+ const [minX, minY, maxX, maxY] = bbox;
50
+ const centerLon = (minX + maxX) / 2;
51
+ const centerLat = (minY + maxY) / 2;
52
+ return pointToTile(centerLon, centerLat, z);
53
+ }
54
+ describe("OsmixVtEncoder", () => {
55
+ it("encodes nodes and ways with expected metadata", () => {
56
+ const bbox = osm.bbox();
57
+ const tile = bboxToTile(bbox);
58
+ const encoder = new OsmixVtEncoder(osm);
59
+ const result = encoder.getTile(tile);
60
+ expect(result.byteLength).toBeGreaterThan(0);
61
+ const layers = decodeTile(result);
62
+ expect(layers[NODE_LAYER_ID]).toBeDefined();
63
+ expect(layers[NODE_LAYER_ID]?.length).toBe(1);
64
+ expect(layers[WAY_LAYER_ID]).toBeDefined();
65
+ expect(layers[WAY_LAYER_ID]?.length).toBe(1);
66
+ const nodeLayer = layers[NODE_LAYER_ID];
67
+ const wayLayer = layers[WAY_LAYER_ID];
68
+ if (!nodeLayer || !wayLayer)
69
+ throw new Error("Layers not found");
70
+ const features = [nodeLayer.feature(0), wayLayer.feature(0)];
71
+ const node = features.find((feature) => feature.properties["type"] === "node");
72
+ // IDs are zigzag-encoded, so decode them
73
+ if (node?.id !== undefined) {
74
+ const decodedId = decodeZigzag(node.id);
75
+ expect(decodedId).toBe(1);
76
+ }
77
+ expect(node?.type).toBe(1);
78
+ const nodeGeom = node?.loadGeometry();
79
+ expect(nodeGeom?.[0]?.[0]?.x).toBeTypeOf("number");
80
+ expect(nodeGeom?.[0]?.[0]?.y).toBeTypeOf("number");
81
+ const way = features.find((feature) => feature.properties["type"] === "way");
82
+ // IDs are zigzag-encoded, so decode them
83
+ if (way?.id !== undefined) {
84
+ const decodedId = decodeZigzag(way.id);
85
+ expect(decodedId).toBe(5);
86
+ }
87
+ expect(way?.type).toBe(2);
88
+ const wayGeom = way?.loadGeometry();
89
+ expect(wayGeom?.[0]?.length).toBeGreaterThanOrEqual(2);
90
+ });
91
+ it("encodes area ways as polygons with proper winding order", () => {
92
+ const testOsm = new Osm();
93
+ // Create a closed way that should be treated as an area
94
+ testOsm.nodes.addNode({ id: 10, lat: 40.7, lon: -74.0 });
95
+ testOsm.nodes.addNode({ id: 11, lat: 40.71, lon: -74.0 });
96
+ testOsm.nodes.addNode({ id: 12, lat: 40.71, lon: -74.01 });
97
+ testOsm.nodes.addNode({ id: 13, lat: 40.7, lon: -74.01 });
98
+ testOsm.ways.addWay({
99
+ id: 20,
100
+ refs: [10, 11, 12, 13, 10], // Closed ring
101
+ tags: { building: "yes", area: "yes" },
102
+ });
103
+ testOsm.buildIndexes();
104
+ testOsm.buildSpatialIndexes();
105
+ const bbox = testOsm.bbox();
106
+ const tile = bboxToTile(bbox);
107
+ const encoder = new OsmixVtEncoder(testOsm);
108
+ const result = encoder.getTile(tile);
109
+ const layers = decodeTile(result);
110
+ const wayLayer = layers[`@osmix:${testOsm.id}:ways`];
111
+ expect(wayLayer?.length).toBe(1);
112
+ const feature = wayLayer?.feature(0);
113
+ if (!feature)
114
+ throw new Error("Feature not found");
115
+ expect(feature.type).toBe(3); // POLYGON type
116
+ expect(feature.properties["type"]).toBe("way");
117
+ expect(feature.properties["building"]).toBe("yes");
118
+ const geometry = feature.loadGeometry();
119
+ expect(geometry.length).toBeGreaterThan(0);
120
+ // Should have at least one ring (outer ring)
121
+ expect(geometry[0]?.length).toBeGreaterThanOrEqual(4); // At least 4 points for a polygon
122
+ });
123
+ it("handles multiple rings for polygons (infrastructure for holes)", () => {
124
+ const testOsm = new Osm();
125
+ // Create an area way
126
+ testOsm.nodes.addNode({ id: 20, lat: 40.7, lon: -74.0 });
127
+ testOsm.nodes.addNode({ id: 21, lat: 40.71, lon: -74.0 });
128
+ testOsm.nodes.addNode({ id: 22, lat: 40.71, lon: -74.01 });
129
+ testOsm.nodes.addNode({ id: 23, lat: 40.7, lon: -74.01 });
130
+ testOsm.ways.addWay({
131
+ id: 30,
132
+ refs: [20, 21, 22, 23, 20],
133
+ tags: { building: "yes", area: "yes" },
134
+ });
135
+ testOsm.buildIndexes();
136
+ testOsm.buildSpatialIndexes();
137
+ const bbox = testOsm.bbox();
138
+ const tile = bboxToTile(bbox);
139
+ const encoder = new OsmixVtEncoder(testOsm);
140
+ // Test that clipProjectedPolygon returns array of rings
141
+ const way = testOsm.ways.getById(30);
142
+ expect(way).toBeDefined();
143
+ const points = way.refs.map((ref) => {
144
+ const node = testOsm.nodes.getById(ref);
145
+ return llToTilePx([node.lon, node.lat], tile, extent);
146
+ });
147
+ const clippedRings = encoder["clipProjectedPolygon"](points);
148
+ expect(Array.isArray(clippedRings)).toBe(true);
149
+ expect(clippedRings.length).toBeGreaterThan(0);
150
+ expect(Array.isArray(clippedRings[0])).toBe(true);
151
+ });
152
+ it("processes polygon rings with correct winding order (outer clockwise, inner counterclockwise)", () => {
153
+ const testOsm = new Osm();
154
+ testOsm.nodes.addNode({ id: 30, lat: 40.7, lon: -74.0 });
155
+ testOsm.nodes.addNode({ id: 31, lat: 40.71, lon: -74.0 });
156
+ testOsm.nodes.addNode({ id: 32, lat: 40.71, lon: -74.01 });
157
+ testOsm.nodes.addNode({ id: 33, lat: 40.7, lon: -74.01 });
158
+ testOsm.ways.addWay({
159
+ id: 40,
160
+ refs: [30, 31, 32, 33, 30],
161
+ tags: { building: "yes", area: "yes" },
162
+ });
163
+ testOsm.buildIndexes();
164
+ testOsm.buildSpatialIndexes();
165
+ const bbox = testOsm.bbox();
166
+ const tile = bboxToTile(bbox);
167
+ const encoder = new OsmixVtEncoder(testOsm);
168
+ const way = testOsm.ways.getById(40);
169
+ const points = way.refs.map((ref) => {
170
+ const node = testOsm.nodes.getById(ref);
171
+ return llToTilePx([node.lon, node.lat], tile, extent);
172
+ });
173
+ const clippedRings = encoder["clipProjectedPolygon"](points);
174
+ const outerRing = clippedRings[0];
175
+ expect(outerRing).toBeDefined();
176
+ // Process as outer ring (should be clockwise)
177
+ const processedOuter = encoder["processClippedPolygonRing"](outerRing, true);
178
+ expect(processedOuter.length).toBeGreaterThan(0);
179
+ // Process as inner ring (should be counterclockwise)
180
+ const processedInner = encoder["processClippedPolygonRing"](outerRing, false);
181
+ expect(processedInner.length).toBeGreaterThan(0);
182
+ // Verify they have opposite winding (area should have opposite signs)
183
+ const outerArea = processedOuter.reduce((sum, p, i) => {
184
+ const next = processedOuter[(i + 1) % processedOuter.length];
185
+ if (!next)
186
+ return sum;
187
+ return sum + (p[0] * next[1] - next[0] * p[1]);
188
+ }, 0);
189
+ const innerArea = processedInner.reduce((sum, p, i) => {
190
+ const next = processedInner[(i + 1) % processedInner.length];
191
+ if (!next)
192
+ return sum;
193
+ return sum + (p[0] * next[1] - next[0] * p[1]);
194
+ }, 0);
195
+ // Outer should be clockwise (negative area), inner should be counterclockwise (positive area)
196
+ expect(outerArea).toBeLessThan(0);
197
+ expect(innerArea).toBeGreaterThan(0);
198
+ });
199
+ it("encodes multipolygon relation with correct winding order", () => {
200
+ const testOsm = new Osm();
201
+ // Create nodes for outer square
202
+ testOsm.nodes.addNode({ id: 1, lat: -1.0, lon: -1.0 });
203
+ testOsm.nodes.addNode({ id: 2, lat: -1.0, lon: 1.0 });
204
+ testOsm.nodes.addNode({ id: 3, lat: 1.0, lon: 1.0 });
205
+ testOsm.nodes.addNode({ id: 4, lat: 1.0, lon: -1.0 });
206
+ // Create nodes for inner triangle
207
+ testOsm.nodes.addNode({ id: 5, lat: -0.5, lon: 0.0 });
208
+ testOsm.nodes.addNode({ id: 6, lat: 0.5, lon: 0.0 });
209
+ testOsm.nodes.addNode({ id: 7, lat: 0.0, lon: 0.5 });
210
+ // Create outer way
211
+ testOsm.ways.addWay({
212
+ id: 10,
213
+ refs: [1, 2, 3, 4, 1],
214
+ tags: {},
215
+ });
216
+ // Create inner way
217
+ testOsm.ways.addWay({
218
+ id: 11,
219
+ refs: [5, 6, 7, 5],
220
+ tags: {},
221
+ });
222
+ // Create multipolygon relation
223
+ testOsm.relations.addRelation({
224
+ id: 20,
225
+ tags: { type: "multipolygon", name: "test" },
226
+ members: [
227
+ { type: "way", ref: 10, role: "outer" },
228
+ { type: "way", ref: 11, role: "inner" },
229
+ ],
230
+ });
231
+ testOsm.buildIndexes();
232
+ testOsm.buildSpatialIndexes();
233
+ const bbox = [-2, -2, 2, 2];
234
+ const tile = bboxToTile(bbox);
235
+ const encoder = new OsmixVtEncoder(testOsm);
236
+ const features = Array.from(encoder.relationFeatures(bbox, (ll) => llToTilePx(ll, tile, extent)));
237
+ expect(features.length).toBeGreaterThan(0);
238
+ const relationFeature = features[0];
239
+ expect(relationFeature).toBeDefined();
240
+ expect(relationFeature?.type).toBe(3); // POLYGON
241
+ const geometry = relationFeature?.geometry;
242
+ expect(geometry).toBeDefined();
243
+ expect(Array.isArray(geometry)).toBe(true);
244
+ if (geometry && Array.isArray(geometry) && geometry.length > 0) {
245
+ const outerRing = geometry[0];
246
+ expect(outerRing).toBeDefined();
247
+ if (outerRing && Array.isArray(outerRing) && outerRing.length > 0) {
248
+ // Verify outer ring is clockwise (negative signed area)
249
+ const outerArea = outerRing.reduce((sum, p, i) => {
250
+ const next = outerRing[(i + 1) % outerRing.length];
251
+ if (!next)
252
+ return sum;
253
+ return sum + (p[0] * next[1] - next[0] * p[1]);
254
+ }, 0);
255
+ expect(outerArea).toBeLessThan(0); // Clockwise
256
+ // If there's an inner ring, verify it's counterclockwise
257
+ if (geometry.length > 1) {
258
+ const innerRing = geometry[1];
259
+ if (innerRing && Array.isArray(innerRing) && innerRing.length > 0) {
260
+ const innerArea = innerRing.reduce((sum, p, i) => {
261
+ const next = innerRing[(i + 1) % innerRing.length];
262
+ if (!next)
263
+ return sum;
264
+ return sum + (p[0] * next[1] - next[0] * p[1]);
265
+ }, 0);
266
+ expect(innerArea).toBeGreaterThan(0); // Counterclockwise
267
+ }
268
+ }
269
+ }
270
+ }
271
+ });
272
+ it("encodes area way as polygon with correct winding order", () => {
273
+ const testOsm = new Osm();
274
+ // Create a square polygon
275
+ testOsm.nodes.addNode({ id: 1, lat: 40.7, lon: -74.0 });
276
+ testOsm.nodes.addNode({ id: 2, lat: 40.71, lon: -74.0 });
277
+ testOsm.nodes.addNode({ id: 3, lat: 40.71, lon: -74.01 });
278
+ testOsm.nodes.addNode({ id: 4, lat: 40.7, lon: -74.01 });
279
+ testOsm.ways.addWay({
280
+ id: 10,
281
+ refs: [1, 2, 3, 4, 1],
282
+ tags: { area: "yes", building: "yes" },
283
+ });
284
+ testOsm.buildIndexes();
285
+ testOsm.buildSpatialIndexes();
286
+ const bbox = testOsm.bbox();
287
+ const tile = bboxToTile(bbox);
288
+ const encoder = new OsmixVtEncoder(testOsm);
289
+ const features = Array.from(encoder.wayFeatures(bbox, (ll) => llToTilePx(ll, tile, extent)));
290
+ const polygonFeature = features.find((f) => f.type === 3); // POLYGON
291
+ expect(polygonFeature).toBeDefined();
292
+ if (polygonFeature?.geometry) {
293
+ const geometry = polygonFeature.geometry;
294
+ if (Array.isArray(geometry) && geometry.length > 0) {
295
+ const ring = geometry[0];
296
+ if (ring && Array.isArray(ring) && ring.length > 0) {
297
+ // Verify clockwise winding (negative area)
298
+ const area = ring.reduce((sum, p, i) => {
299
+ const next = ring[(i + 1) % ring.length];
300
+ if (!next)
301
+ return sum;
302
+ return sum + (p[0] * next[1] - next[0] * p[1]);
303
+ }, 0);
304
+ expect(area).toBeLessThan(0); // Should be clockwise for MVT
305
+ }
306
+ }
307
+ }
308
+ });
309
+ it("encodes negative IDs correctly", () => {
310
+ const testOsm = new Osm();
311
+ // Create nodes with negative IDs (like from GeoJSON import)
312
+ testOsm.nodes.addNode({
313
+ id: -1,
314
+ lat: 40.7,
315
+ lon: -74.0,
316
+ tags: { name: "Negative Node" },
317
+ });
318
+ testOsm.nodes.addNode({
319
+ id: -2,
320
+ lat: 40.71,
321
+ lon: -74.01,
322
+ tags: { name: "Another Negative Node" },
323
+ });
324
+ testOsm.ways.addWay({
325
+ id: -10,
326
+ refs: [-1, -2],
327
+ tags: { highway: "primary" },
328
+ });
329
+ testOsm.buildIndexes();
330
+ testOsm.buildSpatialIndexes();
331
+ const bbox = testOsm.bbox();
332
+ const tile = bboxToTile(bbox);
333
+ const encoder = new OsmixVtEncoder(testOsm);
334
+ const result = encoder.getTile(tile);
335
+ expect(result.byteLength).toBeGreaterThan(0);
336
+ const layers = decodeTile(result);
337
+ const nodeLayer = layers[NODE_LAYER_ID];
338
+ const wayLayer = layers[WAY_LAYER_ID];
339
+ expect(nodeLayer).toBeDefined();
340
+ expect(wayLayer).toBeDefined();
341
+ // Check that negative IDs are zigzag-encoded and can be decoded back
342
+ if (nodeLayer && nodeLayer.length > 0) {
343
+ const nodeFeature = nodeLayer.feature(0);
344
+ // IDs are zigzag-encoded, so decode them
345
+ if (nodeFeature.id !== undefined) {
346
+ const decodedId = decodeZigzag(nodeFeature.id);
347
+ expect(decodedId).toBe(-1);
348
+ }
349
+ }
350
+ if (wayLayer && wayLayer.length > 0) {
351
+ const wayFeature = wayLayer.feature(0);
352
+ // IDs are zigzag-encoded, so decode them
353
+ if (wayFeature.id !== undefined) {
354
+ const decodedId = decodeZigzag(wayFeature.id);
355
+ expect(decodedId).toBe(-10);
356
+ }
357
+ }
358
+ });
359
+ it("accepts IDs at the boundaries of safe integer range", () => {
360
+ const testOsm = new Osm();
361
+ // Add nodes for ways to reference
362
+ testOsm.nodes.addNode({ id: 1, lat: 40.7, lon: -74.0 });
363
+ testOsm.nodes.addNode({ id: 2, lat: 40.71, lon: -74.01 });
364
+ // Test minimum valid ID (way)
365
+ testOsm.ways.addWay({
366
+ id: -Number.MAX_SAFE_INTEGER,
367
+ refs: [1, 2],
368
+ tags: { highway: "primary" },
369
+ });
370
+ // Test maximum valid ID (node with tags)
371
+ testOsm.nodes.addNode({
372
+ id: Number.MAX_SAFE_INTEGER,
373
+ lat: 40.72,
374
+ lon: -74.02,
375
+ tags: { name: "Max ID" },
376
+ });
377
+ testOsm.buildIndexes();
378
+ testOsm.buildSpatialIndexes();
379
+ const bbox = testOsm.bbox();
380
+ const tile = bboxToTile(bbox);
381
+ const encoder = new OsmixVtEncoder(testOsm);
382
+ // Should not throw - this verifies the IDs are within the valid range
383
+ const result = encoder.getTile(tile);
384
+ expect(result.byteLength).toBeGreaterThan(0);
385
+ });
386
+ it("encodes and decodes large negative IDs correctly", () => {
387
+ const testOsm = new Osm();
388
+ // Test with a large negative ID (much larger than 32-bit range)
389
+ const largeNegativeId = -1000000000; // -1 billion
390
+ // Add a node for the way to reference
391
+ testOsm.nodes.addNode({ id: 1, lat: 40.71, lon: -74.01 });
392
+ testOsm.nodes.addNode({
393
+ id: largeNegativeId,
394
+ lat: 40.7,
395
+ lon: -74.0,
396
+ tags: { name: "Large Negative ID" },
397
+ });
398
+ // Add a dummy way so way spatial index can be built
399
+ testOsm.ways.addWay({
400
+ id: 100,
401
+ refs: [1],
402
+ tags: {},
403
+ });
404
+ testOsm.buildIndexes();
405
+ testOsm.buildSpatialIndexes();
406
+ const bbox = testOsm.bbox();
407
+ const tile = bboxToTile(bbox);
408
+ const encoder = new OsmixVtEncoder(testOsm);
409
+ const result = encoder.getTile(tile);
410
+ const layers = decodeTile(result);
411
+ const nodeLayer = layers[NODE_LAYER_ID];
412
+ expect(nodeLayer).toBeDefined();
413
+ if (nodeLayer && nodeLayer.length > 0) {
414
+ // Find the node with the large negative ID
415
+ let found = false;
416
+ for (let i = 0; i < nodeLayer.length; i++) {
417
+ const nodeFeature = nodeLayer.feature(i);
418
+ if (nodeFeature.id !== undefined) {
419
+ const decodedId = decodeZigzag(nodeFeature.id);
420
+ if (decodedId === largeNegativeId) {
421
+ found = true;
422
+ break;
423
+ }
424
+ }
425
+ }
426
+ expect(found).toBe(true);
427
+ }
428
+ });
429
+ });
430
+ //# sourceMappingURL=encode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.test.js","sourceRoot":"","sources":["../src/encode.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @osmix/vt - Mapbox Vector Tile encoding for OSM data.
3
+ *
4
+ * Converts `@osmix/core` OSM datasets into Mapbox Vector Tiles (MVT) format.
5
+ * Generates PBF-encoded tiles with separate layers for nodes, ways, and relations.
6
+ *
7
+ * Key features:
8
+ * - **Per-entity layers**: Separate layers for nodes, ways, and relations.
9
+ * - **Geometry conversion**: Ways become lines or polygons based on area heuristics.
10
+ * - **Multipolygon support**: Renders multipolygon relations as proper polygons with holes.
11
+ * - **Clipping**: Geometry is clipped to tile bounds with configurable buffer.
12
+ * - **Winding order**: Automatically enforces MVT spec (CW outer, CCW inner rings).
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { OsmixVtEncoder } from "@osmix/vt"
17
+ *
18
+ * const encoder = new OsmixVtEncoder(osm)
19
+ * const pbfBuffer = encoder.getTile([9372, 12535, 15])
20
+ *
21
+ * // Use with MapLibre or other vector tile renderers
22
+ * map.addSource("osmix", {
23
+ * type: "vector",
24
+ * tiles: [/* ... generate tile URLs ... *\/]
25
+ * })
26
+ * ```
27
+ *
28
+ * @module @osmix/vt
29
+ */
30
+ export { OsmixVtEncoder, projectToTile } from "./encode";
31
+ export * from "./types";
32
+ export { default as writeVtPbf } from "./write-vt-pbf";
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxD,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @osmix/vt - Mapbox Vector Tile encoding for OSM data.
3
+ *
4
+ * Converts `@osmix/core` OSM datasets into Mapbox Vector Tiles (MVT) format.
5
+ * Generates PBF-encoded tiles with separate layers for nodes, ways, and relations.
6
+ *
7
+ * Key features:
8
+ * - **Per-entity layers**: Separate layers for nodes, ways, and relations.
9
+ * - **Geometry conversion**: Ways become lines or polygons based on area heuristics.
10
+ * - **Multipolygon support**: Renders multipolygon relations as proper polygons with holes.
11
+ * - **Clipping**: Geometry is clipped to tile bounds with configurable buffer.
12
+ * - **Winding order**: Automatically enforces MVT spec (CW outer, CCW inner rings).
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { OsmixVtEncoder } from "@osmix/vt"
17
+ *
18
+ * const encoder = new OsmixVtEncoder(osm)
19
+ * const pbfBuffer = encoder.getTile([9372, 12535, 15])
20
+ *
21
+ * // Use with MapLibre or other vector tile renderers
22
+ * map.addSource("osmix", {
23
+ * type: "vector",
24
+ * tiles: [/* ... generate tile URLs ... *\/]
25
+ * })
26
+ * ```
27
+ *
28
+ * @module @osmix/vt
29
+ */
30
+ export { OsmixVtEncoder, projectToTile } from "./encode";
31
+ export * from "./types";
32
+ export { default as writeVtPbf } from "./write-vt-pbf";
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxD,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Type definitions for vector tile encoding.
3
+ *
4
+ * These types represent the intermediate format used when converting
5
+ * OSM entities to Mapbox Vector Tile features.
6
+ *
7
+ * @module
8
+ */
9
+ import type { OsmTags, XY } from "@osmix/shared/types";
10
+ /**
11
+ * Geometry for a vector tile feature.
12
+ * Array of rings/segments, where each ring/segment is an array of [x, y] coordinates.
13
+ */
14
+ export type VtSimpleFeatureGeometry = XY[][];
15
+ /**
16
+ * Properties attached to a vector tile feature.
17
+ * Includes OSM tags plus optional source metadata.
18
+ */
19
+ export type VtSimpleFeatureProperties = {
20
+ sourceId?: string;
21
+ tileKey?: string;
22
+ } & OsmTags;
23
+ /**
24
+ * MVT geometry type constants.
25
+ * Point = 1, Line = 2, Polygon = 3.
26
+ */
27
+ export type VtSimpleFeatureType = {
28
+ POINT: 1;
29
+ LINE: 2;
30
+ POLYGON: 3;
31
+ };
32
+ /**
33
+ * A simplified vector tile feature ready for encoding.
34
+ * Geometry coordinates are in tile extent units (typically 0-4096).
35
+ */
36
+ export interface VtSimpleFeature {
37
+ id: number;
38
+ type: VtSimpleFeatureType[keyof VtSimpleFeatureType];
39
+ properties: VtSimpleFeatureProperties;
40
+ geometry: VtSimpleFeatureGeometry;
41
+ }
42
+ /**
43
+ * A layer to be written to the vector tile PBF.
44
+ * Features are provided via a generator to support lazy evaluation.
45
+ */
46
+ export type VtPbfLayer = {
47
+ name: string;
48
+ version: number;
49
+ extent: number;
50
+ features: Generator<VtSimpleFeature>;
51
+ };
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAEtD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,EAAE,EAAE,EAAE,CAAA;AAE5C;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAA;AAEX;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,EAAE,CAAC,CAAA;CACV,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,mBAAmB,CAAC,MAAM,mBAAmB,CAAC,CAAA;IACpD,UAAU,EAAE,yBAAyB,CAAA;IACrC,QAAQ,EAAE,uBAAuB,CAAA;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAA;CACpC,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type definitions for vector tile encoding.
3
+ *
4
+ * These types represent the intermediate format used when converting
5
+ * OSM entities to Mapbox Vector Tile features.
6
+ *
7
+ * @module
8
+ */
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vector tile PBF writer.
3
+ *
4
+ * Encodes vector tile layers and features into the Mapbox Vector Tile
5
+ * binary format (PBF/protobuf). Handles key/value deduplication,
6
+ * geometry encoding with delta compression, and proper command sequences.
7
+ *
8
+ * @see https://github.com/mapbox/vector-tile-spec
9
+ *
10
+ * @module
11
+ */
12
+ import type { VtPbfLayer } from "./types";
13
+ /**
14
+ * Write vector tile layers to a PBF buffer.
15
+ *
16
+ * @param layers - Array of layers to encode.
17
+ * @returns ArrayBuffer containing the encoded vector tile.
18
+ */
19
+ export default function writeVtPbf(layers: VtPbfLayer[]): ArrayBuffer;
20
+ //# sourceMappingURL=write-vt-pbf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-vt-pbf.d.ts","sourceRoot":"","sources":["../src/write-vt-pbf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAA;AAW1D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAKxB,WAAW,CACzC"}