@osmix/geojson 0.0.7 → 0.0.10

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @osmix/geojson
2
2
 
3
+ ## 0.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [12728ed]
8
+ - @osmix/shared@0.0.10
9
+ - @osmix/core@0.1.5
10
+ - @osmix/pbf@0.0.6
11
+
12
+ ## 0.0.9
13
+
14
+ ### Patch Changes
15
+
16
+ - f32e4ee: General cleanup
17
+ - Updated dependencies [f32e4ee]
18
+ - @osmix/core@0.1.4
19
+ - @osmix/pbf@0.0.6
20
+ - @osmix/shared@0.0.9
21
+
22
+ ## 0.0.8
23
+
24
+ ### Patch Changes
25
+
26
+ - f468db5: Fix publishing (2)
27
+ - Updated dependencies [f468db5]
28
+ - @osmix/core@0.1.3
29
+ - @osmix/pbf@0.0.5
30
+ - @osmix/shared@0.0.8
31
+
3
32
  ## 0.0.7
4
33
 
5
34
  ### Patch Changes
package/dist/utils.js CHANGED
@@ -35,9 +35,10 @@ export async function readDataAsGeoJSON(data) {
35
35
  let result = "";
36
36
  while (true) {
37
37
  const { done, value } = await reader.read();
38
- result += value;
39
38
  if (done)
40
39
  break;
40
+ if (value !== undefined)
41
+ result += value;
41
42
  }
42
43
  return JSON.parse(result);
43
44
  }
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,IAAsB;IAEtB,IAAI,IAAI,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;IAE1E,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;QACpE,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,MAAM,IAAI,KAAK,CAAA;YACf,IAAI,IAAI;gBAAE,MAAK;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAA;IAC/C,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;IAC7C,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACtE,OAAO,IAAyB,CAAA;IACjC,CAAC;IACD,MAAM,IAAI,KAAK,CACd,mGAAmG,CACnG,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,IAAsB;IAEtB,IAAI,IAAI,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;IAE1E,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;QACpE,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI;gBAAE,MAAK;YACf,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAA;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAA;IAC/C,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;IAC7C,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACtE,OAAO,IAAyB,CAAA;IACjC,CAAC;IACD,MAAM,IAAI,KAAK,CACd,mGAAmG,CACnG,CAAA;AACF,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@osmix/geojson",
4
4
  "description": "Convert OSM files to and from GeoJSON.",
5
- "version": "0.0.7",
5
+ "version": "0.0.10",
6
6
  "type": "module",
7
7
  "main": "./src/index.ts",
8
8
  "types": "./src/index.ts",
@@ -47,9 +47,9 @@
47
47
  "typescript": "^5.9.0"
48
48
  },
49
49
  "dependencies": {
50
- "@osmix/core": "0.1.2",
51
- "@osmix/pbf": "0.0.4",
52
- "@osmix/shared": "0.0.7",
50
+ "@osmix/core": "0.1.5",
51
+ "@osmix/pbf": "0.0.6",
52
+ "@osmix/shared": "0.0.10",
53
53
  "@placemarkio/geojson-rewind": "^1.0.3",
54
54
  "dequal": "^2.0.3"
55
55
  }
package/src/utils.ts CHANGED
@@ -39,8 +39,8 @@ export async function readDataAsGeoJSON(
39
39
  let result = ""
40
40
  while (true) {
41
41
  const { done, value } = await reader.read()
42
- result += value
43
42
  if (done) break
43
+ if (value !== undefined) result += value
44
44
  }
45
45
  return JSON.parse(result) as ImportableGeoJSON
46
46
  }
@@ -1,86 +0,0 @@
1
- /**
2
- * OSM entity to GeoJSON Feature conversion.
3
- *
4
- * Converts OSM nodes, ways, and relations into GeoJSON Features with
5
- * appropriate geometry types and preserved properties.
6
- *
7
- * @module
8
- */
9
- import type { Osm } from "@osmix/core";
10
- import type { OsmEntity, OsmNode, OsmRelation, OsmWay } from "@osmix/shared/types";
11
- import type { GeometryCollection, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon } from "geojson";
12
- import type { OsmGeoJSONFeature } from "./types";
13
- /**
14
- * Convert an OSM node to a GeoJSON Point feature.
15
- *
16
- * @param node - OSM node with id, lon, lat, and optional tags.
17
- * @returns GeoJSON Point Feature with OSM properties.
18
- *
19
- * @example
20
- * ```ts
21
- * const feature = nodeToFeature({ id: 1, lon: -122.4, lat: 47.6, tags: { name: "Seattle" } })
22
- * // { type: "Feature", geometry: { type: "Point", coordinates: [-122.4, 47.6] }, ... }
23
- * ```
24
- */
25
- export declare function nodeToFeature(node: OsmNode): OsmGeoJSONFeature<Point>;
26
- /**
27
- * Convert an OSM way to a GeoJSON LineString or Polygon feature.
28
- *
29
- * Geometry type is determined by the `wayIsArea` helper, which checks for
30
- * area-indicating tags (building, landuse, etc.) and ring closure.
31
- *
32
- * @param way - OSM way with id, refs, and optional tags.
33
- * @param refToPosition - Function to resolve node ID to [lon, lat] coordinates.
34
- * @returns GeoJSON LineString or Polygon Feature with OSM properties.
35
- *
36
- * @example
37
- * ```ts
38
- * const feature = wayToFeature(way, (ref) => osm.nodes.getNodeLonLat({ id: ref }))
39
- * ```
40
- */
41
- export declare function wayToFeature(way: OsmWay, refToPosition: (id: number) => [number, number]): OsmGeoJSONFeature<LineString | Polygon>;
42
- /**
43
- * Convert an OSM relation to a GeoJSON feature.
44
- *
45
- * Geometry type is determined by relation type and tags:
46
- * - **Multipolygon/boundary**: MultiPolygon or Polygon
47
- * - **Route/multilinestring**: MultiLineString or LineString
48
- * - **Site/collection**: MultiPoint or Point
49
- * - **Other**: GeometryCollection (empty for logical relations)
50
- *
51
- * @param relation - OSM relation with id, members, and optional tags.
52
- * @param refToPosition - Function to resolve node ID to [lon, lat] coordinates.
53
- * @param getWay - Optional function to resolve way ID to OsmWay (required for polygons/lines).
54
- * @returns GeoJSON Feature with appropriate geometry type.
55
- *
56
- * @example
57
- * ```ts
58
- * const feature = relationToFeature(
59
- * relation,
60
- * (ref) => osm.nodes.getNodeLonLat({ id: ref }),
61
- * (ref) => osm.ways.getById(ref)
62
- * )
63
- * ```
64
- */
65
- export declare function relationToFeature(relation: OsmRelation, refToPosition: (id: number) => [number, number], getWay?: (wayId: number) => OsmWay | null): OsmGeoJSONFeature<Polygon | MultiPolygon | LineString | MultiLineString | Point | MultiPoint | GeometryCollection>;
66
- /**
67
- * Convert any OSM entity to a GeoJSON feature using an Osm index.
68
- *
69
- * Convenience function that handles entity type detection and coordinate
70
- * resolution automatically using the provided Osm index.
71
- *
72
- * @param osm - Osm index for coordinate lookups.
73
- * @param entity - Any OSM entity (node, way, or relation).
74
- * @returns GeoJSON Feature with appropriate geometry.
75
- * @throws If entity type is unknown.
76
- *
77
- * @example
78
- * ```ts
79
- * for (const way of osm.ways) {
80
- * const feature = osmEntityToGeoJSONFeature(osm, way)
81
- * features.push(feature)
82
- * }
83
- * ```
84
- */
85
- export declare function osmEntityToGeoJSONFeature(osm: Osm, entity: OsmEntity): OsmGeoJSONFeature<GeoJSON.Point | GeoJSON.LineString | GeoJSON.Polygon | GeoJSON.MultiPolygon | GeoJSON.MultiLineString | GeoJSON.MultiPoint | GeoJSON.GeometryCollection>;
86
- //# sourceMappingURL=entity-to-feature.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-to-feature.d.ts","sourceRoot":"","sources":["../../src/entity-to-feature.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAWtC,OAAO,KAAK,EAEX,SAAS,EACT,OAAO,EACP,WAAW,EACX,MAAM,EACN,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EACX,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,EACL,OAAO,EACP,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAerE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC3B,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7C,iBAAiB,CAAC,UAAU,GAAG,OAAO,CAAC,CAoBzC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACvC,iBAAiB,CACjB,OAAO,GACP,YAAY,GACZ,UAAU,GACV,eAAe,GACf,KAAK,GACL,UAAU,GACV,kBAAkB,CACpB,CA2OA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CACxC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,SAAS,GACf,iBAAiB,CACjB,OAAO,CAAC,KAAK,GACb,OAAO,CAAC,UAAU,GAClB,OAAO,CAAC,OAAO,GACf,OAAO,CAAC,YAAY,GACpB,OAAO,CAAC,eAAe,GACvB,OAAO,CAAC,UAAU,GAClB,OAAO,CAAC,kBAAkB,CAC5B,CAeA"}
@@ -1,345 +0,0 @@
1
- /**
2
- * OSM entity to GeoJSON Feature conversion.
3
- *
4
- * Converts OSM nodes, ways, and relations into GeoJSON Features with
5
- * appropriate geometry types and preserved properties.
6
- *
7
- * @module
8
- */
9
- import { buildRelationLineStrings, collectRelationPoints, getRelationKind, isAreaRelation, } from "@osmix/shared/relation-kind";
10
- import { buildRelationRings, getWayMembersByRole, } from "@osmix/shared/relation-multipolygon";
11
- import { isNode, isRelation, isWay } from "@osmix/shared/utils";
12
- import { wayIsArea } from "@osmix/shared/way-is-area";
13
- /**
14
- * Convert an OSM node to a GeoJSON Point feature.
15
- *
16
- * @param node - OSM node with id, lon, lat, and optional tags.
17
- * @returns GeoJSON Point Feature with OSM properties.
18
- *
19
- * @example
20
- * ```ts
21
- * const feature = nodeToFeature({ id: 1, lon: -122.4, lat: 47.6, tags: { name: "Seattle" } })
22
- * // { type: "Feature", geometry: { type: "Point", coordinates: [-122.4, 47.6] }, ... }
23
- * ```
24
- */
25
- export function nodeToFeature(node) {
26
- return {
27
- type: "Feature",
28
- id: node.id,
29
- geometry: {
30
- type: "Point",
31
- coordinates: [node.lon, node.lat],
32
- },
33
- properties: {
34
- id: node.id,
35
- type: "node",
36
- ...node.info,
37
- ...node.tags,
38
- },
39
- };
40
- }
41
- /**
42
- * Convert an OSM way to a GeoJSON LineString or Polygon feature.
43
- *
44
- * Geometry type is determined by the `wayIsArea` helper, which checks for
45
- * area-indicating tags (building, landuse, etc.) and ring closure.
46
- *
47
- * @param way - OSM way with id, refs, and optional tags.
48
- * @param refToPosition - Function to resolve node ID to [lon, lat] coordinates.
49
- * @returns GeoJSON LineString or Polygon Feature with OSM properties.
50
- *
51
- * @example
52
- * ```ts
53
- * const feature = wayToFeature(way, (ref) => osm.nodes.getNodeLonLat({ id: ref }))
54
- * ```
55
- */
56
- export function wayToFeature(way, refToPosition) {
57
- return {
58
- type: "Feature",
59
- id: way.id,
60
- geometry: wayIsArea(way)
61
- ? {
62
- type: "Polygon",
63
- coordinates: [way.refs.map((r) => refToPosition(r))],
64
- }
65
- : {
66
- type: "LineString",
67
- coordinates: way.refs.map((r) => refToPosition(r)),
68
- },
69
- properties: {
70
- id: way.id,
71
- type: "way",
72
- ...way.info,
73
- ...way.tags,
74
- },
75
- };
76
- }
77
- /**
78
- * Convert an OSM relation to a GeoJSON feature.
79
- *
80
- * Geometry type is determined by relation type and tags:
81
- * - **Multipolygon/boundary**: MultiPolygon or Polygon
82
- * - **Route/multilinestring**: MultiLineString or LineString
83
- * - **Site/collection**: MultiPoint or Point
84
- * - **Other**: GeometryCollection (empty for logical relations)
85
- *
86
- * @param relation - OSM relation with id, members, and optional tags.
87
- * @param refToPosition - Function to resolve node ID to [lon, lat] coordinates.
88
- * @param getWay - Optional function to resolve way ID to OsmWay (required for polygons/lines).
89
- * @returns GeoJSON Feature with appropriate geometry type.
90
- *
91
- * @example
92
- * ```ts
93
- * const feature = relationToFeature(
94
- * relation,
95
- * (ref) => osm.nodes.getNodeLonLat({ id: ref }),
96
- * (ref) => osm.ways.getById(ref)
97
- * )
98
- * ```
99
- */
100
- export function relationToFeature(relation, refToPosition, getWay) {
101
- const getNodeCoordinates = (nodeId) => {
102
- const pos = refToPosition(nodeId);
103
- return pos ? [pos[0], pos[1]] : undefined;
104
- };
105
- const kind = getRelationKind(relation);
106
- // Handle area relations (multipolygon, boundary)
107
- if (isAreaRelation(relation) && getWay) {
108
- const rings = buildRelationRings(relation, getWay, getNodeCoordinates);
109
- if (rings.length === 0) {
110
- // Fallback to simple MultiPolygon if we can't build rings
111
- return {
112
- type: "Feature",
113
- id: relation.id,
114
- geometry: {
115
- type: "MultiPolygon",
116
- coordinates: [],
117
- },
118
- properties: {
119
- id: relation.id,
120
- type: "relation",
121
- ...relation.info,
122
- ...relation.tags,
123
- },
124
- };
125
- }
126
- // If only one polygon, return Polygon; otherwise MultiPolygon
127
- if (rings.length === 1) {
128
- return {
129
- type: "Feature",
130
- id: relation.id,
131
- geometry: {
132
- type: "Polygon",
133
- coordinates: rings[0],
134
- },
135
- properties: {
136
- id: relation.id,
137
- type: "relation",
138
- ...relation.info,
139
- ...relation.tags,
140
- },
141
- };
142
- }
143
- return {
144
- type: "Feature",
145
- id: relation.id,
146
- geometry: {
147
- type: "MultiPolygon",
148
- coordinates: rings,
149
- },
150
- properties: {
151
- id: relation.id,
152
- type: "relation",
153
- ...relation.info,
154
- ...relation.tags,
155
- },
156
- };
157
- }
158
- // Handle line relations (route, multilinestring)
159
- if (kind === "line" && getWay) {
160
- const lineStrings = buildRelationLineStrings(relation, getWay, getNodeCoordinates);
161
- if (lineStrings.length === 0) {
162
- return {
163
- type: "Feature",
164
- id: relation.id,
165
- geometry: {
166
- type: "MultiLineString",
167
- coordinates: [],
168
- },
169
- properties: {
170
- id: relation.id,
171
- type: "relation",
172
- ...relation.info,
173
- ...relation.tags,
174
- },
175
- };
176
- }
177
- if (lineStrings.length === 1) {
178
- return {
179
- type: "Feature",
180
- id: relation.id,
181
- geometry: {
182
- type: "LineString",
183
- coordinates: lineStrings[0],
184
- },
185
- properties: {
186
- id: relation.id,
187
- type: "relation",
188
- ...relation.info,
189
- ...relation.tags,
190
- },
191
- };
192
- }
193
- return {
194
- type: "Feature",
195
- id: relation.id,
196
- geometry: {
197
- type: "MultiLineString",
198
- coordinates: lineStrings,
199
- },
200
- properties: {
201
- id: relation.id,
202
- type: "relation",
203
- ...relation.info,
204
- ...relation.tags,
205
- },
206
- };
207
- }
208
- // Handle point relations (multipoint)
209
- if (kind === "point") {
210
- const points = collectRelationPoints(relation, getNodeCoordinates);
211
- if (points.length === 0) {
212
- return {
213
- type: "Feature",
214
- id: relation.id,
215
- geometry: {
216
- type: "MultiPoint",
217
- coordinates: [],
218
- },
219
- properties: {
220
- id: relation.id,
221
- type: "relation",
222
- ...relation.info,
223
- ...relation.tags,
224
- },
225
- };
226
- }
227
- if (points.length === 1) {
228
- return {
229
- type: "Feature",
230
- id: relation.id,
231
- geometry: {
232
- type: "Point",
233
- coordinates: points[0],
234
- },
235
- properties: {
236
- id: relation.id,
237
- type: "relation",
238
- ...relation.info,
239
- ...relation.tags,
240
- },
241
- };
242
- }
243
- return {
244
- type: "Feature",
245
- id: relation.id,
246
- geometry: {
247
- type: "MultiPoint",
248
- coordinates: points,
249
- },
250
- properties: {
251
- id: relation.id,
252
- type: "relation",
253
- ...relation.info,
254
- ...relation.tags,
255
- },
256
- };
257
- }
258
- // Fallback for logical relations or when getWay is not provided
259
- // Return GeometryCollection or null geometry for logic-only relations
260
- if (kind === "logic" || kind === "super") {
261
- return {
262
- type: "Feature",
263
- id: relation.id,
264
- geometry: {
265
- type: "GeometryCollection",
266
- geometries: [],
267
- },
268
- properties: {
269
- id: relation.id,
270
- type: "relation",
271
- ...relation.info,
272
- ...relation.tags,
273
- },
274
- };
275
- }
276
- // Final fallback: try to create a simple representation from way members
277
- if (getWay) {
278
- const { outer } = getWayMembersByRole(relation);
279
- const coordinates = [];
280
- if (outer.length > 0) {
281
- coordinates.push([outer.map((member) => refToPosition(member.ref))]);
282
- }
283
- return {
284
- type: "Feature",
285
- id: relation.id,
286
- geometry: {
287
- type: "MultiPolygon",
288
- coordinates: coordinates.length > 0 ? coordinates : [],
289
- },
290
- properties: {
291
- id: relation.id,
292
- type: "relation",
293
- ...relation.info,
294
- ...relation.tags,
295
- },
296
- };
297
- }
298
- // No geometry available
299
- return {
300
- type: "Feature",
301
- id: relation.id,
302
- geometry: {
303
- type: "GeometryCollection",
304
- geometries: [],
305
- },
306
- properties: {
307
- id: relation.id,
308
- type: "relation",
309
- ...relation.info,
310
- ...relation.tags,
311
- },
312
- };
313
- }
314
- /**
315
- * Convert any OSM entity to a GeoJSON feature using an Osm index.
316
- *
317
- * Convenience function that handles entity type detection and coordinate
318
- * resolution automatically using the provided Osm index.
319
- *
320
- * @param osm - Osm index for coordinate lookups.
321
- * @param entity - Any OSM entity (node, way, or relation).
322
- * @returns GeoJSON Feature with appropriate geometry.
323
- * @throws If entity type is unknown.
324
- *
325
- * @example
326
- * ```ts
327
- * for (const way of osm.ways) {
328
- * const feature = osmEntityToGeoJSONFeature(osm, way)
329
- * features.push(feature)
330
- * }
331
- * ```
332
- */
333
- export function osmEntityToGeoJSONFeature(osm, entity) {
334
- if (isNode(entity)) {
335
- return nodeToFeature(entity);
336
- }
337
- if (isWay(entity)) {
338
- return wayToFeature(entity, (ref) => osm.nodes.getNodeLonLat({ id: ref }));
339
- }
340
- if (isRelation(entity)) {
341
- return relationToFeature(entity, (ref) => osm.nodes.getNodeLonLat({ id: ref }), (ref) => osm.ways.getById(ref));
342
- }
343
- throw new Error("Unknown entity type");
344
- }
345
- //# sourceMappingURL=entity-to-feature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-to-feature.js","sourceRoot":"","sources":["../../src/entity-to-feature.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * @osmix/geojson - Convert between OSM entities and GeoJSON.
3
- *
4
- * Provides bidirectional conversion between Osmix data structures and GeoJSON:
5
- * - **Export**: Convert OSM nodes, ways, and relations to GeoJSON Features.
6
- * - **Import**: Build an Osm index from a GeoJSON FeatureCollection.
7
- *
8
- * Handles geometry mapping:
9
- * - Nodes → Point
10
- * - Ways → LineString or Polygon (based on tags and closure)
11
- * - Relations → MultiPolygon, MultiLineString, or GeometryCollection (by type)
12
- *
13
- * @example
14
- * ```ts
15
- * // Export OSM entity to GeoJSON
16
- * import { nodeToFeature, wayToFeature } from "@osmix/geojson"
17
- *
18
- * const pointFeature = nodeToFeature(node)
19
- * const lineFeature = wayToFeature(way, (ref) => osm.nodes.getNodeLonLat({ id: ref }))
20
- * ```
21
- *
22
- * @example
23
- * ```ts
24
- * // Import GeoJSON to Osm index
25
- * import { fromGeoJSON } from "@osmix/geojson"
26
- *
27
- * const osm = await fromGeoJSON(geojsonFile, { id: "imported" })
28
- * ```
29
- *
30
- * @module @osmix/geojson
31
- */
32
- export * from "./entity-to-feature";
33
- export * from "./osm-from-geojson";
34
- export * from "./types";
35
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,SAAS,CAAA"}
package/dist/src/index.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * @osmix/geojson - Convert between OSM entities and GeoJSON.
3
- *
4
- * Provides bidirectional conversion between Osmix data structures and GeoJSON:
5
- * - **Export**: Convert OSM nodes, ways, and relations to GeoJSON Features.
6
- * - **Import**: Build an Osm index from a GeoJSON FeatureCollection.
7
- *
8
- * Handles geometry mapping:
9
- * - Nodes → Point
10
- * - Ways → LineString or Polygon (based on tags and closure)
11
- * - Relations → MultiPolygon, MultiLineString, or GeometryCollection (by type)
12
- *
13
- * @example
14
- * ```ts
15
- * // Export OSM entity to GeoJSON
16
- * import { nodeToFeature, wayToFeature } from "@osmix/geojson"
17
- *
18
- * const pointFeature = nodeToFeature(node)
19
- * const lineFeature = wayToFeature(way, (ref) => osm.nodes.getNodeLonLat({ id: ref }))
20
- * ```
21
- *
22
- * @example
23
- * ```ts
24
- * // Import GeoJSON to Osm index
25
- * import { fromGeoJSON } from "@osmix/geojson"
26
- *
27
- * const osm = await fromGeoJSON(geojsonFile, { id: "imported" })
28
- * ```
29
- *
30
- * @module @osmix/geojson
31
- */
32
- export * from "./entity-to-feature";
33
- export * from "./osm-from-geojson";
34
- export * from "./types";
35
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,SAAS,CAAA"}