@osmix/geoparquet 0.1.2 → 0.1.5

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 (40) hide show
  1. package/dist/from-geoparquet.d.ts.map +1 -1
  2. package/dist/from-geoparquet.js +10 -10
  3. package/dist/from-geoparquet.js.map +1 -1
  4. package/package.json +24 -25
  5. package/src/from-geoparquet.ts +16 -12
  6. package/CHANGELOG.md +0 -39
  7. package/dist/src/from-geoparquet.d.ts +0 -68
  8. package/dist/src/from-geoparquet.d.ts.map +0 -1
  9. package/dist/src/from-geoparquet.js +0 -455
  10. package/dist/src/from-geoparquet.js.map +0 -1
  11. package/dist/src/index.d.ts +0 -27
  12. package/dist/src/index.d.ts.map +0 -1
  13. package/dist/src/index.js +0 -27
  14. package/dist/src/index.js.map +0 -1
  15. package/dist/src/types.d.ts +0 -47
  16. package/dist/src/types.d.ts.map +0 -1
  17. package/dist/src/types.js +0 -6
  18. package/dist/src/types.js.map +0 -1
  19. package/dist/src/wkb.d.ts +0 -22
  20. package/dist/src/wkb.d.ts.map +0 -1
  21. package/dist/src/wkb.js +0 -181
  22. package/dist/src/wkb.js.map +0 -1
  23. package/dist/test/from-geoparquet.test.d.ts +0 -2
  24. package/dist/test/from-geoparquet.test.d.ts.map +0 -1
  25. package/dist/test/from-geoparquet.test.js +0 -445
  26. package/dist/test/from-geoparquet.test.js.map +0 -1
  27. package/dist/test/monaco-parquet.test.d.ts +0 -2
  28. package/dist/test/monaco-parquet.test.d.ts.map +0 -1
  29. package/dist/test/monaco-parquet.test.js +0 -200
  30. package/dist/test/monaco-parquet.test.js.map +0 -1
  31. package/dist/test/wkb.test.d.ts +0 -2
  32. package/dist/test/wkb.test.d.ts.map +0 -1
  33. package/dist/test/wkb.test.js +0 -234
  34. package/dist/test/wkb.test.js.map +0 -1
  35. package/test/download-monaco-highways.sh +0 -40
  36. package/test/from-geoparquet.test.ts +0 -520
  37. package/test/monaco-parquet.test.ts +0 -249
  38. package/test/wkb.test.ts +0 -296
  39. package/tsconfig.build.json +0 -5
  40. package/tsconfig.json +0 -9
@@ -1,455 +0,0 @@
1
- /**
2
- * GeoParquet to OSM conversion utilities.
3
- *
4
- * Imports GeoParquet files into Osm indexes, mapping geometry
5
- * types to appropriate OSM entity structures.
6
- *
7
- * @module
8
- */
9
- import { Osm } from "@osmix/core";
10
- import { logProgress, progressEvent, } from "@osmix/shared/progress";
11
- import { rewindFeature } from "@placemarkio/geojson-rewind";
12
- import { asyncBufferFromUrl, parquetReadObjects, } from "hyparquet";
13
- import { parseWkb } from "./wkb";
14
- /**
15
- * Create an Osm index from GeoParquet data.
16
- *
17
- * Accepts various input formats (file path, URL, or buffer) and converts
18
- * features to OSM entities:
19
- * - Point → Node
20
- * - LineString → Way with nodes
21
- * - Polygon → Way (simple) or Relation (with holes)
22
- * - MultiPolygon → Relation
23
- *
24
- * Feature IDs are preserved if available; otherwise sequential negative IDs
25
- * are assigned. Feature tags become OSM tags.
26
- *
27
- * @param source - GeoParquet data source (file path, URL, or buffer)
28
- * @param options - Osm index options (id, header)
29
- * @param readOptions - Options for reading the parquet file
30
- * @param onProgress - Progress callback for UI feedback
31
- * @returns Populated Osm index with built indexes
32
- *
33
- * @example
34
- * ```ts
35
- * import { fromGeoParquet } from "@osmix/geoparquet"
36
- *
37
- * // From file
38
- * const osm = await fromGeoParquet("./roads.parquet")
39
- *
40
- * // Query the imported data
41
- * const highways = osm.ways.search("highway")
42
- * ```
43
- */
44
- export async function fromGeoParquet(source, options = {}, readOptions = {}, onProgress = logProgress) {
45
- const builder = new GeoParquetOsmBuilder(options, readOptions, onProgress);
46
- onProgress(progressEvent("Loading GeoParquet file..."));
47
- // Read rows from parquet file
48
- const rows = await builder.readParquetRows(source);
49
- onProgress(progressEvent(`Processing ${rows.length} features...`));
50
- // Convert to OSM entities
51
- builder.processGeoParquetRows(rows);
52
- return builder.buildOsm();
53
- }
54
- export class GeoParquetOsmBuilder {
55
- osm;
56
- readOptions;
57
- onProgress;
58
- constructor(osmOptions = {}, readOptions = {}, onProgress = logProgress) {
59
- this.osm = new Osm(osmOptions);
60
- this.readOptions = readOptions;
61
- this.onProgress = onProgress;
62
- }
63
- async readParquetRows(source) {
64
- let file;
65
- if (typeof source === "string") {
66
- // String sources are treated as URLs
67
- this.onProgress(progressEvent(`Fetching from URL: ${source}`));
68
- file = await asyncBufferFromUrl({ url: source });
69
- }
70
- else if (source instanceof URL) {
71
- this.onProgress(progressEvent(`Fetching from URL: ${source.href}`));
72
- file = await asyncBufferFromUrl({ url: source.href });
73
- }
74
- else if (source instanceof ArrayBuffer) {
75
- // Wrap ArrayBuffer as AsyncBuffer
76
- file = {
77
- byteLength: source.byteLength,
78
- slice: (start, end) => source.slice(start, end),
79
- };
80
- }
81
- else {
82
- // Assume it's already an AsyncBuffer
83
- file = source;
84
- }
85
- const readConfig = {
86
- file,
87
- ...this.readOptions,
88
- columns: [
89
- this.readOptions.typeColumn ?? "type",
90
- this.readOptions.idColumn ?? "id",
91
- this.readOptions.geometryColumn ?? "geometry",
92
- this.readOptions.tagsColumn ?? "tags",
93
- this.readOptions.bboxColumn ?? "bbox",
94
- ],
95
- };
96
- this.onProgress(progressEvent("Reading parquet data..."));
97
- return parquetReadObjects(readConfig);
98
- }
99
- /**
100
- * Converts GeoParquet rows to OSM entities.
101
- */
102
- processGeoParquetRows(rows) {
103
- this.onProgress(progressEvent("Converting GeoParquet to Osmix..."));
104
- const idColumn = this.readOptions.idColumn ?? "id";
105
- const typeColumn = this.readOptions.typeColumn ?? "type";
106
- const geometryColumn = this.readOptions.geometryColumn ?? "geometry";
107
- const tagsColumn = this.readOptions.tagsColumn ?? "tags";
108
- const bboxColumn = this.readOptions.bboxColumn ?? "bbox";
109
- // Process each row
110
- let count = 0;
111
- for (const row of rows) {
112
- // Extract values using column names
113
- // biome-ignore lint/suspicious/noExplicitAny: dynamic column access
114
- const rowAny = row;
115
- const id = rowAny[idColumn];
116
- const type = rowAny[typeColumn];
117
- const geometryData = rowAny[geometryColumn];
118
- const tagsData = rowAny[tagsColumn];
119
- // bboxData is read but currently unused - reserved for future optimization
120
- void rowAny[bboxColumn];
121
- if (!geometryData) {
122
- count++;
123
- continue;
124
- }
125
- // Parse WKB geometry
126
- let geometry;
127
- try {
128
- if (geometryData instanceof Uint8Array) {
129
- geometry = parseWkb(geometryData);
130
- }
131
- else if (typeof geometryData === "string") {
132
- geometry = JSON.parse(geometryData);
133
- }
134
- else {
135
- geometry = geometryData;
136
- }
137
- }
138
- catch (_e) {
139
- // Skip invalid geometries
140
- count++;
141
- continue;
142
- }
143
- // Parse tags
144
- const tags = parseTags(tagsData);
145
- // Get numeric ID from bigint or generate one
146
- const numericId = id !== undefined
147
- ? typeof id === "bigint"
148
- ? Number(id)
149
- : id
150
- : undefined;
151
- // Normalize geometry winding order
152
- const normalizedGeometry = normalizeGeometry(geometry);
153
- if (normalizedGeometry.type === "Point") {
154
- this.processPoint(normalizedGeometry, numericId, tags);
155
- }
156
- else if (normalizedGeometry.type === "LineString") {
157
- this.processLineString(normalizedGeometry, numericId, tags);
158
- }
159
- else if (normalizedGeometry.type === "Polygon") {
160
- if (type === "node")
161
- throw Error(`ID: ${numericId} has type 'node' but geometry is a polygon`);
162
- // Infer type from geometry if missing: relation if has holes, way otherwise
163
- const polygonType = type ??
164
- (normalizedGeometry.coordinates.length > 1 ? "relation" : "way");
165
- this.processPolygon(normalizedGeometry, polygonType, numericId, tags);
166
- }
167
- else if (normalizedGeometry.type === "MultiPolygon") {
168
- this.processMultiPolygon(normalizedGeometry, numericId, tags);
169
- }
170
- else if (normalizedGeometry.type === "MultiLineString") {
171
- this.processMultiLineString(normalizedGeometry, numericId, tags);
172
- }
173
- else {
174
- throw Error(`Unsupported geometry type: ${normalizedGeometry.type}`);
175
- }
176
- count++;
177
- if (count % 10000 === 0) {
178
- this.onProgress(progressEvent(`Processed ${count} features...`));
179
- }
180
- }
181
- this.onProgress(progressEvent(`Imported ${count} features`));
182
- }
183
- buildOsm() {
184
- this.onProgress(progressEvent("Finished converting GeoParquet to Osmix, building indexes..."));
185
- this.osm.buildIndexes();
186
- this.osm.buildSpatialIndexes();
187
- return this.osm;
188
- }
189
- nextNodeId = -1;
190
- nextWayId = -1;
191
- nextRelationId = -1;
192
- getNextRelationId() {
193
- return this.nextRelationId--;
194
- }
195
- getNextWayId() {
196
- return this.nextWayId--;
197
- }
198
- getNextNodeId() {
199
- return this.nextNodeId--;
200
- }
201
- // Map to track nodes by coordinate string for reuse when creating ways
202
- nodeMap = new Map();
203
- // Helper to get or create a node for a coordinate
204
- getOrCreateNode(lon, lat) {
205
- const coordKey = `${lon},${lat}`;
206
- const existingNodeId = this.nodeMap.get(coordKey);
207
- if (existingNodeId !== undefined) {
208
- return existingNodeId;
209
- }
210
- const nodeId = this.getNextNodeId();
211
- this.nodeMap.set(coordKey, nodeId);
212
- this.osm.nodes.addNode({
213
- id: nodeId,
214
- lon,
215
- lat,
216
- });
217
- return nodeId;
218
- }
219
- processPoint(geometry, featureId, tags) {
220
- const [lon, lat] = geometry.coordinates;
221
- if (lon === undefined || lat === undefined)
222
- throw Error("Point must have lon and lat coordinates");
223
- const nodeId = featureId ?? this.getNextNodeId();
224
- this.osm.nodes.addNode({
225
- id: nodeId,
226
- lon,
227
- lat,
228
- tags,
229
- });
230
- this.nodeMap.set(`${lon},${lat}`, nodeId);
231
- return nodeId;
232
- }
233
- processLineString(geometry, featureId, tags) {
234
- const coordinates = geometry.coordinates;
235
- if (coordinates.length < 2)
236
- throw Error("LineString must have at least 2 coordinates");
237
- const nodeRefs = [];
238
- for (const [lon, lat] of coordinates) {
239
- if (lon === undefined || lat === undefined)
240
- throw Error("LineString coordinates must have lon and lat");
241
- nodeRefs.push(this.getOrCreateNode(lon, lat));
242
- }
243
- if (nodeRefs.length < 2)
244
- throw Error("LineString must have at least 2 coordinates");
245
- const wayId = featureId ?? this.getNextWayId();
246
- this.osm.ways.addWay({
247
- id: wayId,
248
- refs: nodeRefs,
249
- tags,
250
- });
251
- return wayId;
252
- }
253
- processMultiLineString(geometry, featureId, tags) {
254
- const coordinates = geometry.coordinates;
255
- if (coordinates.length === 0)
256
- throw Error("MultiLineString must have at least one LineString");
257
- const wayIds = [];
258
- for (const line of coordinates) {
259
- if (line.length < 2)
260
- throw Error("LineString must have at least 2 coordinates");
261
- const wayId = this.processLineString({ type: "LineString", coordinates: line }, this.getNextWayId());
262
- wayIds.push(wayId);
263
- }
264
- this.osm.relations.addRelation({
265
- id: featureId ?? this.getNextRelationId(),
266
- members: wayIds.map((id) => ({ type: "way", ref: id })),
267
- tags: { type: "multilinestring", ...tags },
268
- });
269
- }
270
- processPolygon(geometry, type, featureId, tags) {
271
- const coordinates = geometry.coordinates;
272
- if (coordinates.length === 0)
273
- return;
274
- const outerRing = coordinates[0];
275
- if (!outerRing || outerRing.length < 3)
276
- return;
277
- // Create nodes for outer ring
278
- const outerNodeRefs = [];
279
- for (const [lon, lat] of outerRing) {
280
- if (lon === undefined || lat === undefined)
281
- continue;
282
- const nodeId = this.getOrCreateNode(lon, lat);
283
- outerNodeRefs.push(nodeId);
284
- }
285
- if (outerNodeRefs.length < 3)
286
- return;
287
- // Ensure the outer ring is closed
288
- if (outerNodeRefs[0] !== outerNodeRefs[outerNodeRefs.length - 1]) {
289
- outerNodeRefs.push(outerNodeRefs[0]);
290
- }
291
- const outerWayId = type === "relation"
292
- ? this.getNextWayId()
293
- : (featureId ?? this.getNextWayId());
294
- this.osm.ways.addWay({
295
- id: outerWayId,
296
- refs: outerNodeRefs,
297
- tags: type === "relation" ? { area: "yes" } : { area: "yes", ...tags },
298
- });
299
- if (type === "way")
300
- return;
301
- // Create separate ways for holes
302
- const holeWayIds = [];
303
- for (let i = 1; i < coordinates.length; i++) {
304
- const holeRing = coordinates[i];
305
- if (!holeRing || holeRing.length < 3)
306
- continue;
307
- const holeNodeRefs = [];
308
- for (const [lon, lat] of holeRing) {
309
- if (lon === undefined || lat === undefined)
310
- continue;
311
- const nodeId = this.getOrCreateNode(lon, lat);
312
- holeNodeRefs.push(nodeId);
313
- }
314
- if (holeNodeRefs.length < 3)
315
- continue;
316
- // Ensure the ring is closed
317
- if (holeNodeRefs[0] !== holeNodeRefs[holeNodeRefs.length - 1]) {
318
- holeNodeRefs.push(holeNodeRefs[0]);
319
- }
320
- const holeWayId = this.getNextWayId();
321
- this.osm.ways.addWay({
322
- id: holeWayId,
323
- refs: holeNodeRefs,
324
- tags: { area: "yes" },
325
- });
326
- holeWayIds.push(holeWayId);
327
- }
328
- this.osm.relations.addRelation({
329
- id: featureId ?? this.getNextRelationId(),
330
- members: [
331
- { type: "way", ref: outerWayId, role: "outer" },
332
- ...holeWayIds.map((id) => ({ type: "way", ref: id, role: "inner" })),
333
- ],
334
- tags: {
335
- type: "multipolygon",
336
- ...tags,
337
- },
338
- });
339
- }
340
- processMultiPolygon(geometry, featureId, tags) {
341
- const coordinates = geometry.coordinates;
342
- if (coordinates.length === 0)
343
- return;
344
- const relationMembers = [];
345
- for (const polygon of coordinates) {
346
- if (polygon.length === 0)
347
- continue;
348
- const outerRing = polygon[0];
349
- if (!outerRing || outerRing.length < 3)
350
- continue;
351
- // Create nodes for outer ring
352
- const outerNodeRefs = [];
353
- for (const [lon, lat] of outerRing) {
354
- if (lon === undefined || lat === undefined)
355
- continue;
356
- const nodeId = this.getOrCreateNode(lon, lat);
357
- outerNodeRefs.push(nodeId);
358
- }
359
- if (outerNodeRefs.length < 3)
360
- continue;
361
- // Ensure the ring is closed
362
- if (outerNodeRefs[0] !== outerNodeRefs[outerNodeRefs.length - 1]) {
363
- outerNodeRefs.push(outerNodeRefs[0]);
364
- }
365
- const outerWayId = this.getNextWayId();
366
- this.osm.ways.addWay({
367
- id: outerWayId,
368
- refs: outerNodeRefs,
369
- tags: { area: "yes" },
370
- });
371
- relationMembers.push({ type: "way", ref: outerWayId, role: "outer" });
372
- // Create separate ways for holes
373
- for (let i = 1; i < polygon.length; i++) {
374
- const holeRing = polygon[i];
375
- if (!holeRing || holeRing.length < 3)
376
- continue;
377
- const holeNodeRefs = [];
378
- for (const [lon, lat] of holeRing) {
379
- if (lon === undefined || lat === undefined)
380
- continue;
381
- const nodeId = this.getOrCreateNode(lon, lat);
382
- holeNodeRefs.push(nodeId);
383
- }
384
- if (holeNodeRefs.length < 3)
385
- continue;
386
- // Ensure the ring is closed
387
- if (holeNodeRefs[0] !== holeNodeRefs[holeNodeRefs.length - 1]) {
388
- holeNodeRefs.push(holeNodeRefs[0]);
389
- }
390
- const holeWayId = this.getNextWayId();
391
- this.osm.ways.addWay({
392
- id: holeWayId,
393
- refs: holeNodeRefs,
394
- tags: { area: "yes" },
395
- });
396
- relationMembers.push({ type: "way", ref: holeWayId, role: "inner" });
397
- }
398
- }
399
- if (relationMembers.length > 0) {
400
- this.osm.relations.addRelation({
401
- id: featureId ?? this.getNextRelationId(),
402
- members: relationMembers,
403
- tags: { type: "multipolygon", ...tags },
404
- });
405
- }
406
- }
407
- }
408
- /**
409
- * Parse tags from various formats.
410
- */
411
- function parseTags(tagsData) {
412
- if (!tagsData)
413
- return undefined;
414
- if (typeof tagsData === "string") {
415
- try {
416
- const parsed = JSON.parse(tagsData);
417
- if (typeof parsed === "object" && parsed !== null) {
418
- return parsed;
419
- }
420
- }
421
- catch {
422
- return undefined;
423
- }
424
- }
425
- if (typeof tagsData === "object") {
426
- const tags = {};
427
- for (const [key, value] of Object.entries(tagsData)) {
428
- if (typeof value === "string" || typeof value === "number") {
429
- tags[key] = value;
430
- }
431
- else if (value != null) {
432
- tags[key] = String(value);
433
- }
434
- }
435
- return Object.keys(tags).length > 0 ? tags : undefined;
436
- }
437
- return undefined;
438
- }
439
- /**
440
- * Normalize geometry winding order for OSM conventions.
441
- */
442
- function normalizeGeometry(geometry) {
443
- if (geometry.type === "Polygon" || geometry.type === "MultiPolygon") {
444
- // Use rewind to ensure correct winding order
445
- const feature = {
446
- type: "Feature",
447
- geometry,
448
- properties: {},
449
- };
450
- const rewound = rewindFeature(feature);
451
- return rewound.geometry ?? geometry;
452
- }
453
- return geometry;
454
- }
455
- //# sourceMappingURL=from-geoparquet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"from-geoparquet.js","sourceRoot":"","sources":["../../src/from-geoparquet.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * @osmix/geoparquet - Import OSM data from GeoParquet files.
3
- *
4
- * Provides import functionality for GeoParquet files including OpenStreetMap US Layercake,
5
- * converting geometry data to Osmix's in-memory format.
6
- *
7
- * Handles geometry mapping:
8
- * - Point → Node
9
- * - LineString → Way with nodes
10
- * - Polygon → Way (simple) or Relation (with holes)
11
- * - MultiPolygon → Multipolygon relation
12
- *
13
- * @example
14
- * ```ts
15
- * // Import GeoParquet data to Osm index
16
- * import { fromGeoParquet } from "@osmix/geoparquet"
17
- *
18
- * const osm = await fromGeoParquet("./data.parquet")
19
- * const highways = osm.ways.search("highway")
20
- * ```
21
- *
22
- * @module @osmix/geoparquet
23
- */
24
- export * from "./from-geoparquet";
25
- export * from "./types";
26
- export { parseWkb } from "./wkb";
27
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA"}
package/dist/src/index.js DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * @osmix/geoparquet - Import OSM data from GeoParquet files.
3
- *
4
- * Provides import functionality for GeoParquet files including OpenStreetMap US Layercake,
5
- * converting geometry data to Osmix's in-memory format.
6
- *
7
- * Handles geometry mapping:
8
- * - Point → Node
9
- * - LineString → Way with nodes
10
- * - Polygon → Way (simple) or Relation (with holes)
11
- * - MultiPolygon → Multipolygon relation
12
- *
13
- * @example
14
- * ```ts
15
- * // Import GeoParquet data to Osm index
16
- * import { fromGeoParquet } from "@osmix/geoparquet"
17
- *
18
- * const osm = await fromGeoParquet("./data.parquet")
19
- * const highways = osm.ways.search("highway")
20
- * ```
21
- *
22
- * @module @osmix/geoparquet
23
- */
24
- export * from "./from-geoparquet";
25
- export * from "./types";
26
- export { parseWkb } from "./wkb";
27
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Type definitions for GeoParquet data.
3
- *
4
- * @module
5
- */
6
- import type { GeoBbox2D, OsmTags } from "@osmix/shared/types";
7
- import type { AsyncBuffer, ParquetReadOptions } from "hyparquet";
8
- /**
9
- * Source types that can be used to read GeoParquet data by hyparquet.
10
- * - string: File path (Node.js/Bun) or URL (browser)
11
- * - URL: URL object
12
- * - ArrayBuffer: Raw parquet data
13
- * - AsyncBuffer: hyparquet async buffer for streaming
14
- */
15
- export type GeoParquetSource = string | URL | ArrayBuffer | AsyncBuffer;
16
- /**
17
- * Raw row from GeoParquet file.
18
- * The geometry field is WKB-encoded.
19
- */
20
- export interface GeoParquetRow {
21
- /** OSM entity type */
22
- type: "node" | "way" | "relation";
23
- /** OSM entity ID */
24
- id: bigint | number;
25
- /** OSM tags as string or key-value pairs */
26
- tags: OsmTags | string;
27
- /** the xmin, ymin, xmax, and ymax of the element’s geometry */
28
- bbox: GeoBbox2D;
29
- /** WKB-encoded geometry or GeoJSON */
30
- geometry: Uint8Array | GeoJSON.Geometry | string;
31
- }
32
- /**
33
- * Options for reading GeoParquet files.
34
- */
35
- export interface GeoParquetReadOptions extends Omit<ParquetReadOptions, "onComplete" | "file" | "columns"> {
36
- /** Column name for the entity type (default: "type") */
37
- typeColumn?: string;
38
- /** Column name for the entity ID (default: "id") */
39
- idColumn?: string;
40
- /** Column name for the entity tags (default: "tags") */
41
- tagsColumn?: string;
42
- /** Column name for the entity bbox (default: "bbox") */
43
- bboxColumn?: string;
44
- /** Column name for the entity geometry (default: "geometry") */
45
- geometryColumn?: string;
46
- }
47
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEhE;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,GAAG,GAAG,WAAW,GAAG,WAAW,CAAA;AAEvE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,sBAAsB;IACtB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,CAAA;IACjC,oBAAoB;IACpB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,4CAA4C;IAC5C,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,+DAA+D;IAC/D,IAAI,EAAE,SAAS,CAAA;IACf,sCAAsC;IACtC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAA;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,qBAChB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACnE,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB"}
package/dist/src/types.js DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Type definitions for GeoParquet data.
3
- *
4
- * @module
5
- */
6
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/dist/src/wkb.d.ts DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * WKB (Well-Known Binary) geometry parsing utilities.
3
- *
4
- * Browser-compatible WKB parser using DataView instead of Node.js Buffer.
5
- * Supports standard WKB and EWKB (with SRID) formats.
6
- *
7
- * @module
8
- */
9
- import type { Geometry } from "geojson";
10
- /**
11
- * Parse a WKB geometry into a GeoJSON Geometry object.
12
- *
13
- * Browser-compatible implementation using DataView.
14
- * Supports Point, LineString, Polygon, MultiPoint, MultiLineString,
15
- * MultiPolygon, and GeometryCollection. Also handles EWKB with SRID.
16
- *
17
- * @param wkb - WKB-encoded geometry as Uint8Array
18
- * @returns Parsed GeoJSON Geometry
19
- * @throws Error if geometry type is unsupported
20
- */
21
- export declare function parseWkb(wkb: Uint8Array): Geometry;
22
- //# sourceMappingURL=wkb.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wkb.d.ts","sourceRoot":"","sources":["../../src/wkb.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACX,QAAQ,EASR,MAAM,SAAS,CAAA;AAoDhB;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,CAGlD"}