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

96 lines (95 loc) 3.25 kB
import { purgeProps } from "./utils.js"; import { Node } from "./node.js"; import { Output } from "./output.js"; import { Way } from "./way.js"; import { Relation } from "./relation.js"; export default function analyzeFeaturesFromJson(osm, refElements) { var _a; for (const elem of osm.elements) { // Check for evidence ths is a derived element and process if so if ((_a = elem.geometry) === null || _a === void 0 ? void 0 : _a.type) { const obj = new Output(elem.type, elem.id, refElements); if (elem.tags) { obj.addTags(elem.tags); } obj.addMetas(purgeProps(elem, [ "id", "type", "tags", "geometry", ])); obj.setGeometry(elem.geometry); continue; } // handle nodes/ways/relations switch (elem.type) { case "node": const node = new Node(elem.id, refElements); if (elem.tags) { node.addTags(elem.tags); } node.addMetas(purgeProps(elem, [ "id", "type", "tags", "lat", "lon", ])); node.setLatLng(elem); break; case "way": const way = new Way(elem.id, refElements); if (elem.tags) { way.addTags(elem.tags); } way.addMetas(purgeProps(elem, [ "id", "type", "tags", "nodes", "geometry", ])); if (elem.geometry) { way.setLatLngArray(elem.geometry); } else if (elem.center) { way.setCenter(elem.center); } else if (elem.nodes) { for (const n of elem.nodes) { way.addNodeRef(n); } } break; case "relation": const relation = new Relation(elem.id, refElements); if (elem.bounds) { relation.setBounds([ parseFloat(elem.bounds.minlon), parseFloat(elem.bounds.minlat), parseFloat(elem.bounds.maxlon), parseFloat(elem.bounds.maxlat), ]); } if (elem.tags) { relation.addTags(elem.tags); } if (elem.center) { relation.setCenter(elem.center); } relation.addMetas(purgeProps(elem, [ "id", "type", "tags", "bounds", "members", ])); if (elem.members) { for (const member of elem.members) { relation.addMember(member); } } break; } } }