UNPKG

osm2geojson-ultra

Version:

a faster & more complete OSM & Overpass (either in xml or in json formats) to geojson convertor - 4x faster than xmldom + osmtogeojson in most situations - implemented in TypeScript with txml for XML parsing

60 lines (59 loc) 1.6 kB
import { RefElements } from "./ref-elements.js"; import analyzeFeaturesFromJson from "./json.js"; import analyzeFeaturesFromXml from "./xml.js"; function parseOptions(options) { if (!options) { return { elementId: undefined }; } let elementId = options.elementId; return { elementId }; } function detectFormat(o) { if (o.elements) { return "json"; } if (o.indexOf("<osm") >= 0) { return "xml"; } if (o.trim().startsWith("{")) { return "json-raw"; } return "invalid"; } function osm2geojson(osm, opts) { var _a; let { elementId } = parseOptions(opts); let format = detectFormat(osm); const refElements = new RefElements(); if (format === "json-raw") { osm = JSON.parse(osm); if (osm.elements) { format = "json"; } else { format = "invalid"; } } if (format === "json") { analyzeFeaturesFromJson(osm, refElements); } else if (format === "xml") { analyzeFeaturesFromXml(osm, refElements); } refElements.bindAll(); if (elementId) { return (_a = refElements.get(elementId)) === null || _a === void 0 ? void 0 : _a.toFeature(); } let featureArray = []; for (const v of refElements.values()) { if (v.refCount > 0 && !v.hasTag) { continue; } const feature = v.toFeature(); if (feature) { featureArray.push(feature); } } return { type: "FeatureCollection", features: featureArray }; } export default osm2geojson;