umap-project 3.0.4__py3-none-any.whl → 3.0.5__py3-none-any.whl
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.
Potentially problematic release.
This version of umap-project might be problematic. Click here for more details.
- umap/__init__.py +1 -1
- umap/locale/el/LC_MESSAGES/django.mo +0 -0
- umap/locale/el/LC_MESSAGES/django.po +136 -56
- umap/locale/en/LC_MESSAGES/django.po +18 -18
- umap/locale/es/LC_MESSAGES/django.mo +0 -0
- umap/locale/es/LC_MESSAGES/django.po +136 -56
- umap/locale/nl/LC_MESSAGES/django.mo +0 -0
- umap/locale/nl/LC_MESSAGES/django.po +1 -1
- umap/models.py +1 -0
- umap/settings/base.py +1 -0
- umap/static/umap/css/bar.css +1 -1
- umap/static/umap/css/tooltip.css +13 -0
- umap/static/umap/js/modules/autocomplete.js +7 -8
- umap/static/umap/js/modules/browser.js +89 -94
- umap/static/umap/js/modules/caption.js +6 -4
- umap/static/umap/js/modules/data/features.js +1 -19
- umap/static/umap/js/modules/data/layer.js +100 -61
- umap/static/umap/js/modules/facets.js +1 -1
- umap/static/umap/js/modules/form/fields.js +1 -1
- umap/static/umap/js/modules/importer.js +1 -1
- umap/static/umap/js/modules/managers.js +46 -0
- umap/static/umap/js/modules/permissions.js +1 -1
- umap/static/umap/js/modules/rendering/controls.js +251 -0
- umap/static/umap/js/modules/rendering/layers/heat.js +5 -0
- umap/static/umap/js/modules/rendering/map.js +21 -10
- umap/static/umap/js/modules/rendering/ui.js +0 -1
- umap/static/umap/js/modules/rules.js +56 -46
- umap/static/umap/js/modules/schema.js +5 -1
- umap/static/umap/js/modules/share.js +2 -2
- umap/static/umap/js/modules/slideshow.js +1 -1
- umap/static/umap/js/modules/sync/engine.js +23 -9
- umap/static/umap/js/modules/ui/bar.js +2 -2
- umap/static/umap/js/modules/ui/base.js +13 -0
- umap/static/umap/js/modules/umap.js +69 -111
- umap/static/umap/js/umap.controls.js +0 -310
- umap/static/umap/js/umap.core.js +0 -40
- umap/static/umap/locale/am_ET.js +8 -3
- umap/static/umap/locale/am_ET.json +8 -3
- umap/static/umap/locale/ar.js +8 -3
- umap/static/umap/locale/ar.json +8 -3
- umap/static/umap/locale/ast.js +8 -3
- umap/static/umap/locale/ast.json +8 -3
- umap/static/umap/locale/bg.js +8 -3
- umap/static/umap/locale/bg.json +8 -3
- umap/static/umap/locale/br.js +8 -3
- umap/static/umap/locale/br.json +8 -3
- umap/static/umap/locale/ca.js +20 -17
- umap/static/umap/locale/ca.json +20 -17
- umap/static/umap/locale/cs_CZ.js +5 -2
- umap/static/umap/locale/cs_CZ.json +5 -2
- umap/static/umap/locale/da.js +8 -3
- umap/static/umap/locale/da.json +8 -3
- umap/static/umap/locale/de.js +5 -2
- umap/static/umap/locale/de.json +5 -2
- umap/static/umap/locale/el.js +92 -87
- umap/static/umap/locale/el.json +92 -87
- umap/static/umap/locale/en.js +5 -2
- umap/static/umap/locale/en.json +5 -2
- umap/static/umap/locale/en_US.json +8 -3
- umap/static/umap/locale/es.js +18 -15
- umap/static/umap/locale/es.json +18 -15
- umap/static/umap/locale/et.js +8 -3
- umap/static/umap/locale/et.json +8 -3
- umap/static/umap/locale/eu.js +5 -2
- umap/static/umap/locale/eu.json +5 -2
- umap/static/umap/locale/fa_IR.js +5 -2
- umap/static/umap/locale/fa_IR.json +5 -2
- umap/static/umap/locale/fi.js +8 -3
- umap/static/umap/locale/fi.json +8 -3
- umap/static/umap/locale/fr.js +5 -2
- umap/static/umap/locale/fr.json +5 -2
- umap/static/umap/locale/gl.js +5 -2
- umap/static/umap/locale/gl.json +5 -2
- umap/static/umap/locale/he.js +8 -3
- umap/static/umap/locale/he.json +8 -3
- umap/static/umap/locale/hr.js +8 -3
- umap/static/umap/locale/hr.json +8 -3
- umap/static/umap/locale/hu.js +5 -2
- umap/static/umap/locale/hu.json +5 -2
- umap/static/umap/locale/id.js +8 -3
- umap/static/umap/locale/id.json +8 -3
- umap/static/umap/locale/is.js +8 -3
- umap/static/umap/locale/is.json +8 -3
- umap/static/umap/locale/it.js +5 -2
- umap/static/umap/locale/it.json +5 -2
- umap/static/umap/locale/ja.js +8 -3
- umap/static/umap/locale/ja.json +8 -3
- umap/static/umap/locale/ko.js +8 -3
- umap/static/umap/locale/ko.json +8 -3
- umap/static/umap/locale/lt.js +8 -3
- umap/static/umap/locale/lt.json +8 -3
- umap/static/umap/locale/ms.js +8 -3
- umap/static/umap/locale/ms.json +8 -3
- umap/static/umap/locale/nl.js +7 -4
- umap/static/umap/locale/nl.json +7 -4
- umap/static/umap/locale/no.js +8 -3
- umap/static/umap/locale/no.json +8 -3
- umap/static/umap/locale/pl.js +8 -3
- umap/static/umap/locale/pl.json +8 -3
- umap/static/umap/locale/pl_PL.json +8 -3
- umap/static/umap/locale/pt.js +5 -2
- umap/static/umap/locale/pt.json +5 -2
- umap/static/umap/locale/pt_BR.js +8 -3
- umap/static/umap/locale/pt_BR.json +8 -3
- umap/static/umap/locale/pt_PT.js +5 -2
- umap/static/umap/locale/pt_PT.json +5 -2
- umap/static/umap/locale/ro.js +8 -3
- umap/static/umap/locale/ro.json +8 -3
- umap/static/umap/locale/ru.js +8 -3
- umap/static/umap/locale/ru.json +8 -3
- umap/static/umap/locale/sk_SK.js +8 -3
- umap/static/umap/locale/sk_SK.json +8 -3
- umap/static/umap/locale/sl.js +8 -3
- umap/static/umap/locale/sl.json +8 -3
- umap/static/umap/locale/sr.js +8 -3
- umap/static/umap/locale/sr.json +8 -3
- umap/static/umap/locale/sv.js +8 -3
- umap/static/umap/locale/sv.json +8 -3
- umap/static/umap/locale/th_TH.js +8 -3
- umap/static/umap/locale/th_TH.json +8 -3
- umap/static/umap/locale/tr.js +8 -3
- umap/static/umap/locale/tr.json +8 -3
- umap/static/umap/locale/uk_UA.js +8 -3
- umap/static/umap/locale/uk_UA.json +8 -3
- umap/static/umap/locale/vi.js +8 -3
- umap/static/umap/locale/vi.json +8 -3
- umap/static/umap/locale/vi_VN.json +8 -3
- umap/static/umap/locale/zh.js +8 -3
- umap/static/umap/locale/zh.json +8 -3
- umap/static/umap/locale/zh_CN.json +8 -3
- umap/static/umap/locale/zh_TW.Big5.json +8 -3
- umap/static/umap/locale/zh_TW.js +5 -2
- umap/static/umap/locale/zh_TW.json +5 -2
- umap/static/umap/map.css +9 -31
- umap/static/umap/vendors/togeojson/togeojson.es.js +350 -177
- umap/static/umap/vendors/togeojson/togeojson.es.mjs.map +1 -1
- umap/templates/umap/design_system.html +355 -0
- umap/tests/base.py +2 -2
- umap/tests/fixtures/heatmap_data.json +1044 -0
- umap/tests/integration/test_browser.py +3 -3
- umap/tests/integration/test_conditional_rules.py +2 -2
- umap/tests/integration/test_datalayer.py +0 -1
- umap/tests/integration/test_edit_map.py +7 -7
- umap/tests/integration/test_facets_browser.py +2 -2
- umap/tests/integration/test_heatmap.py +41 -0
- umap/tests/integration/test_import.py +58 -1
- umap/tests/integration/test_map.py +7 -8
- umap/tests/integration/test_optimistic_merge.py +12 -4
- umap/tests/integration/test_querystring.py +1 -1
- umap/tests/integration/test_remote_data.py +79 -0
- umap/tests/integration/test_websocket_sync.py +2 -2
- umap/urls.py +1 -0
- umap/views.py +7 -0
- {umap_project-3.0.4.dist-info → umap_project-3.0.5.dist-info}/METADATA +8 -8
- {umap_project-3.0.4.dist-info → umap_project-3.0.5.dist-info}/RECORD +158 -152
- {umap_project-3.0.4.dist-info → umap_project-3.0.5.dist-info}/WHEEL +0 -0
- {umap_project-3.0.4.dist-info → umap_project-3.0.5.dist-info}/entry_points.txt +0 -0
- {umap_project-3.0.4.dist-info → umap_project-3.0.5.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"togeojson.es.mjs","sources":["../lib/lib/shared.ts","../lib/lib/gpx/line.ts","../lib/lib/gpx/extensions.ts","../lib/lib/gpx/coord_pair.ts","../lib/lib/gpx/properties.ts","../lib/lib/gpx.ts","../lib/lib/tcx.ts","../lib/lib/kml/fixColor.ts","../lib/lib/kml/extractStyle.ts","../lib/lib/kml/shared.ts","../lib/lib/kml/geometry.ts","../lib/lib/kml/placemark.ts","../lib/lib/kml/ground_overlay.ts","../lib/lib/kml.ts"],"sourcesContent":["import type { Feature, Geometry } from \"geojson\";\n\nexport function $(element: Element | Document, tagName: string): Element[] {\n return Array.from(element.getElementsByTagName(tagName));\n}\n\nexport type P = NonNullable<Feature[\"properties\"]>;\nexport type F = Feature<Geometry | null>;\n\nexport type StyleMap = { [key: string]: P };\n\nexport function normalizeId(id: string) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\n\nexport function $ns(\n element: Element | Document,\n tagName: string,\n ns: string\n): Element[] {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n\n/**\n * get the content of a text node, if any\n */\nexport function nodeVal(node: Element | null) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n\n/**\n * Get one Y child of X, if any, otherwise null\n */\nexport function get1(\n node: Element,\n tagName: string,\n callback?: (elem: Element) => unknown\n) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) callback(result);\n return result;\n}\n\nexport function get(\n node: Element | null,\n tagName: string,\n callback?: (elem: Element, properties: P) => P\n) {\n const properties: Feature[\"properties\"] = {};\n if (!node) return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\n\nexport function val1(\n node: Element,\n tagName: string,\n callback: (val: string) => P | void\n): P {\n const val = nodeVal(get1(node, tagName));\n if (val && callback) return callback(val) || {};\n return {};\n}\n\nexport function $num(\n node: Element,\n tagName: string,\n callback: (val: number) => Feature[\"properties\"]\n) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val)) return undefined;\n if (val && callback) return callback(val) || {};\n return {};\n}\n\nexport function num1(\n node: Element,\n tagName: string,\n callback?: (val: number) => unknown\n) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val)) return undefined;\n if (callback) callback(val);\n return val;\n}\n\nexport function getMulti(node: Element, propertyNames: string[]): P {\n const properties: P = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\n\nexport function isElement(node: Node | null): node is Element {\n return node?.nodeType === 1;\n}\n","import { get, P, val1, $num } from \"../shared\";\n\nexport function getLineStyle(node: Element | null) {\n return get(node, \"line\", (lineStyle) => {\n const val: P = Object.assign(\n {},\n val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }),\n $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }),\n $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n })\n );\n return val;\n });\n}\n","import { isElement, nodeVal } from \"../shared\";\n\nexport type ExtendedValues = [string, string | number][];\n\nexport function getExtensions(node: Element | null): ExtendedValues {\n let values: [string, string | number][] = [];\n if (node === null) return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child)) continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n } else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\n\nfunction abbreviateName(name: string) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\n\nfunction parseNumeric(val: string) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n","import { Position } from \"geojson\";\nimport { num1, get1, nodeVal } from \"../shared\";\nimport { ExtendedValues, getExtensions } from \"./extensions\";\n\ninterface CoordPair {\n coordinates: Position;\n time: string | null;\n extendedValues: ExtendedValues;\n}\n\nexport function coordPair(node: Element): CoordPair | null {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n","import { $, getMulti, nodeVal } from \"../shared\";\n\nexport function extractProperties(node: Element) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n\n const extensions = Array.from(\n node.getElementsByTagNameNS(\n \"http://www.garmin.com/xmlschemas/GpxExtensions/v3\",\n \"*\"\n )\n );\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) =>\n Object.assign(\n { href: link.getAttribute(\"href\") },\n getMulti(link, [\"text\", \"type\"])\n )\n );\n }\n\n return properties;\n}\n","import type {\n FeatureCollection,\n Feature,\n Point,\n MultiLineString,\n LineString,\n Position,\n} from \"geojson\";\nimport { getLineStyle } from \"./gpx/line\";\nimport { coordPair } from \"./gpx/coord_pair\";\nimport { extractProperties } from \"./gpx/properties\";\nimport { P, $, get1, getMulti } from \"./shared\";\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints(node: Element, pointname: \"trkpt\" | \"rtept\") {\n const pts = $(node, pointname);\n const line: Position[] = [];\n const times = [];\n const extendedValues: P = {};\n\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time) times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural =\n name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n\n if (line.length < 2) return; // Invalid line in GeoJSON\n\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node: Element): Feature<LineString> | undefined {\n const line = getPoints(node, \"rtept\");\n if (!line) return;\n return {\n type: \"Feature\",\n properties: Object.assign(\n { _gpxType: \"rte\" },\n extractProperties(node),\n getLineStyle(get1(node, \"extensions\"))\n ),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\n\nfunction getTrack(node: Element): Feature<LineString | MultiLineString> | null {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n\n for (const segment of segments) {\n const line = getPoints(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length) times.push(line.times);\n }\n }\n\n if (extractedLines.length === 0) return null;\n\n const multi = extractedLines.length > 1;\n\n const properties: Feature[\"properties\"] = Object.assign(\n { _gpxType: \"trk\" },\n extractProperties(node),\n getLineStyle(get1(node, \"extensions\")),\n times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {}\n );\n\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) =>\n new Array(line.line.length).fill(null)\n );\n }\n props[name][i] = val;\n } else {\n props[name] = val;\n }\n }\n }\n\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node: Element): Feature<Point> | null {\n const properties: Feature[\"properties\"] = Object.assign(\n extractProperties(node),\n getMulti(node, [\"sym\"])\n );\n const pair = coordPair(node);\n if (!pair) return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nexport function* gpxGen(node: Document): Generator<Feature> {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature) yield feature;\n }\n\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature) yield feature;\n }\n\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point) yield point;\n }\n}\n\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nexport function gpx(node: Document): FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n","import { Feature, FeatureCollection, Position } from \"geojson\";\nimport { P, $, get, num1, nodeVal, get1 } from \"./shared\";\n\ntype PropertyMapping = readonly [string, string][];\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\n\nconst TRACKPOINT_ATTRIBUTES: PropertyMapping = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\n\nconst LAP_ATTRIBUTES: PropertyMapping = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\n\nfunction getProperties(node: Element, attributeNames: PropertyMapping) {\n const properties = [];\n\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n\n return properties;\n}\n\nfunction coordPair(node: Element) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (\n ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])\n ) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll as number[],\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\n\nfunction getPoints(node: Element) {\n const pts = $(node, \"Trackpoint\");\n const line: Position[] = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2) return null; // Invalid line in GeoJSON\n const extendedProperties: P = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null) continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time) times.push(time);\n if (heartRate) heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2) return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\n\nfunction getLap(node: Element): Feature | null {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties: P = Object.assign(\n Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)),\n get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n })\n );\n\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length) times.push(line.times);\n if (line.heartRates.length) heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n } else {\n if (!properties[property]) {\n properties[property] = track.map((track) =>\n Array(track.length).fill(null)\n );\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n\n if (track.length === 0) return null;\n\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(\n times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {},\n heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {}\n );\n }\n\n return {\n type: \"Feature\",\n properties: properties,\n geometry:\n track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nexport function* tcxGen(node: Document): Generator<Feature> {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature) yield feature;\n }\n\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature) yield feature;\n }\n}\n\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nexport function tcx(node: Document): FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n","import { P } from \"../shared\";\n\nexport function fixColor(v: string, prefix: string): P {\n const properties: P = {};\n const colorProp =\n prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n } else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n","import { P, get, num1, nodeVal, val1 } from \"../shared\";\nimport { fixColor } from \"./fixColor\";\n\nfunction numericProperty(node: Element, source: string, target: string): P {\n const properties: P = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\n\nfunction getColor(node: Element, output: string): P {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\n\nexport function extractIconHref(node: Element) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\n\nexport function extractIcon(node: Element) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(\n getColor(iconStyle, \"icon\"),\n numericProperty(iconStyle, \"scale\", \"icon-scale\"),\n numericProperty(iconStyle, \"heading\", \"icon-heading\"),\n get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }),\n extractIconHref(iconStyle)\n );\n });\n}\n\nexport function extractLabel(node: Element) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(\n getColor(labelStyle, \"label\"),\n numericProperty(labelStyle, \"scale\", \"label-scale\")\n );\n });\n}\n\nexport function extractLine(node: Element) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(\n getColor(lineStyle, \"stroke\"),\n numericProperty(lineStyle, \"width\", \"stroke-width\")\n );\n });\n}\n\nexport function extractPoly(node: Element) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(\n properties,\n get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")),\n val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\") return { \"fill-opacity\": 0 };\n }),\n val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\") return { \"stroke-opacity\": 0 };\n })\n );\n });\n}\n\nexport function extractStyle(node: Element) {\n return Object.assign(\n {},\n extractPoly(node),\n extractLine(node),\n extractLabel(node),\n extractIcon(node)\n );\n}\n","import {\n get,\n get1,\n nodeVal,\n $,\n normalizeId,\n P,\n StyleMap,\n val1,\n} from \"../shared\";\n\nexport type TypeConverter = (x: string) => unknown;\nexport type Schema = { [key: string]: TypeConverter };\n\nconst toNumber: TypeConverter = (x) => Number(x);\nexport const typeConverters: Record<string, TypeConverter> = {\n string: (x) => x,\n int: toNumber,\n uint: toNumber,\n short: toNumber,\n ushort: toNumber,\n float: toNumber,\n double: toNumber,\n bool: (x) => Boolean(x),\n};\n\nexport function extractExtendedData(node: Element, schema: Schema) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(\n get1(data, \"value\")\n );\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n const name = simpleData.getAttribute(\"name\") || \"\";\n const typeConverter = schema[name] || typeConverters.string;\n properties[name] = typeConverter(nodeVal(simpleData));\n }\n return properties;\n });\n}\n\nexport function getMaybeHTMLDescription(node: Element) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c as Element),\n },\n };\n }\n }\n return {};\n}\n\nexport function extractTimeSpan(node: Element): P {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\n\nexport function extractTimeStamp(node: Element): P {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\n\nexport function extractCascadedStyle(node: Element, styleMap: StyleMap): P {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n","import { Position, Point, LineString, Geometry } from \"geojson\";\nimport { $, $ns, nodeVal, get1, isElement } from \"../shared\";\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n\n/**\n * Get one coordinate from a coordinate array, if any\n */\nexport function coord1(value: string): Position {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nexport function coord(value: string): Position[] {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\n\nfunction gxCoords(\n node: Element\n): { geometry: Point | LineString; times: string[] } | null {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n\n if (coordinates.length === 0) {\n return null;\n }\n\n return {\n geometry:\n coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\n\nexport function fixRing(ring: Position[]) {\n if (ring.length === 0) return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\n\nexport function getCoordinates(node: Element) {\n return nodeVal(get1(node, \"coordinates\"));\n}\n\ninterface GeometriesAndTimes {\n geometries: Geometry[];\n coordTimes: string[][];\n}\n\nexport function getGeometry(node: Element): GeometriesAndTimes {\n let geometries: Geometry[] = [];\n let coordTimes: string[][] = [];\n\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LinearRing\":\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx) break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length) coordTimes.push(times);\n break;\n }\n }\n }\n }\n\n return {\n geometries,\n coordTimes,\n };\n}\n","import { Feature, Geometry } from \"geojson\";\nimport { StyleMap, getMulti } from \"../shared\";\nimport {\n extractCascadedStyle,\n extractExtendedData,\n extractTimeSpan,\n extractTimeStamp,\n getMaybeHTMLDescription,\n Schema,\n} from \"./shared\";\nimport { extractStyle } from \"./extractStyle\";\nimport { getGeometry } from \"./geometry\";\nimport { KMLOptions } from \"lib/kml\";\n\nfunction geometryListToGeometry(geometries: Geometry[]): Geometry | null {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\n\nexport function getPlacemark(\n node: Element,\n styleMap: StyleMap,\n schema: Schema,\n options: KMLOptions\n): Feature<Geometry | null> | null {\n const { coordTimes, geometries } = getGeometry(node);\n\n const geometry = geometryListToGeometry(geometries);\n\n if (!geometry && options.skipNullGeometry) {\n return null;\n }\n\n const feature: Feature<Geometry | null> = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]),\n getMaybeHTMLDescription(node),\n extractCascadedStyle(node, styleMap),\n extractStyle(node),\n extractExtendedData(node, schema),\n extractTimeSpan(node),\n extractTimeStamp(node),\n coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}\n ),\n };\n\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\") feature.id = id;\n return feature;\n}\n","import { Feature, Polygon } from \"geojson\";\nimport { StyleMap, get1, num1, getMulti } from \"../shared\";\nimport {\n extractCascadedStyle,\n extractExtendedData,\n extractTimeSpan,\n extractTimeStamp,\n getMaybeHTMLDescription,\n Schema,\n} from \"./shared\";\nimport { extractIconHref, extractStyle } from \"./extractStyle\";\nimport { coord, fixRing, getCoordinates } from \"./geometry\";\nimport { KMLOptions } from \"lib/kml\";\n\ninterface BoxGeometry {\n bbox?: BBox;\n geometry: Polygon;\n}\n\nfunction getGroundOverlayBox(node: Element): BoxGeometry | null {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n geometry: {\n type: \"Polygon\",\n coordinates: [ring],\n },\n };\n }\n\n return getLatLonBox(node);\n}\n\ntype BBox = [number, number, number, number];\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nfunction rotateBox(\n bbox: BBox,\n coordinates: Polygon[\"coordinates\"],\n rotation: number\n): Polygon[\"coordinates\"] {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) + rotation * DEGREES_TO_RADIANS;\n\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\n\nfunction getLatLonBox(node: Element): BoxGeometry | null {\n const latLonBox = get1(node, \"LatLonBox\");\n\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n\n if (\n typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\"\n ) {\n const bbox: BBox = [west, south, east, north];\n let coordinates = [\n [\n [west, north], // top left\n [east, north], // top right\n [east, south], // top right\n [west, south], // bottom left\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n bbox,\n geometry: {\n type: \"Polygon\",\n coordinates,\n },\n };\n }\n }\n\n return null;\n}\n\nexport function getGroundOverlay(\n node: Element,\n styleMap: StyleMap,\n schema: Schema,\n options: KMLOptions\n): Feature<Polygon | null> | null {\n const box = getGroundOverlayBox(node);\n\n const geometry = box?.geometry || null;\n\n if (!geometry && options.skipNullGeometry) {\n return null;\n }\n\n const feature: Feature<Polygon | null> = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" },\n getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]),\n getMaybeHTMLDescription(node),\n extractCascadedStyle(node, styleMap),\n extractStyle(node),\n extractIconHref(node),\n extractExtendedData(node, schema),\n extractTimeSpan(node),\n extractTimeStamp(node)\n ),\n };\n\n if (box?.bbox) {\n feature.bbox = box.bbox;\n }\n\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\") feature.id = id;\n return feature;\n}\n","import { extractStyle } from \"./kml/extractStyle\";\nimport { getPlacemark } from \"./kml/placemark\";\nimport { getGroundOverlay } from \"./kml/ground_overlay\";\nimport { FeatureCollection, Geometry } from \"geojson\";\nimport {\n $,\n StyleMap,\n P,\n F,\n val1,\n nodeVal,\n isElement,\n normalizeId,\n} from \"./shared\";\nimport { Schema, typeConverters } from \"./kml/shared\";\n\n/**\n * Options to customize KML output.\n *\n * The only option currently\n * is `skipNullGeometry`. Both the KML and GeoJSON formats support\n * the idea of features that don't have geometries: in KML,\n * this is a Placemark without a Point, etc element, and in GeoJSON\n * it's a geometry member with a value of `null`.\n *\n * toGeoJSON, by default, translates null geometries in KML to\n * null geometries in GeoJSON. For systems that use GeoJSON but\n * don't support null geometries, you can specify `skipNullGeometry`\n * to omit these features entirely and only include\n * features that have a geometry defined.\n */\nexport interface KMLOptions {\n skipNullGeometry?: boolean;\n}\n\n/**\n * A folder including metadata. Folders\n * may contain other folders or features,\n * or nothing at all.\n */\nexport interface Folder {\n type: \"folder\";\n /**\n * Standard values:\n *\n * * \"name\",\n * * \"visibility\",\n * * \"open\",\n * * \"address\",\n * * \"description\",\n * * \"phoneNumber\",\n * * \"visibility\",\n */\n meta: {\n [key: string]: unknown;\n };\n children: Array<Folder | F>;\n}\n\n/**\n * A nested folder structure, represented\n * as a tree with folders and features.\n */\nexport interface Root {\n type: \"root\";\n children: Array<Folder | F>;\n}\n\ntype TreeContainer = Root | Folder;\n\nfunction getStyleId(style: Element) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (\n !id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\"\n ) {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\n\nfunction buildStyleMap(node: Document): StyleMap {\n const styleMap: StyleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\n\nfunction buildSchema(node: Document): Schema {\n const schema: Schema = {};\n for (const field of $(node, \"SimpleField\")) {\n schema[field.getAttribute(\"name\") || \"\"] =\n typeConverters[field.getAttribute(\"type\") || \"\"] ||\n typeConverters[\"string\"];\n }\n return schema;\n}\n\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n] as const;\n\nfunction getFolder(node: Element): Folder {\n const meta: P = {};\n\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName as any)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nexport function kmlWithFolders(\n node: Document,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): Root {\n const styleMap = buildStyleMap(node);\n const schema = buildSchema(node);\n\n // atomic geospatial types supported by KML - MultiGeometry is\n // handled separately\n // all root placemarks in the file\n const placemarks = [];\n const tree: Root = { type: \"root\", children: [] };\n\n function traverse(\n node: Document | ChildNode | Element,\n pointer: TreeContainer,\n options: KMLOptions\n ) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n placemarks.push(node);\n const placemark = getGroundOverlay(node, styleMap, schema, options);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n placemarks.push(node);\n const placemark = getPlacemark(node, styleMap, schema, options);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer, options);\n }\n }\n }\n\n traverse(node, tree, options);\n\n return tree;\n}\n\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nexport function* kmlGen(\n node: Document,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): Generator<F> {\n const styleMap = buildStyleMap(node);\n const schema = buildSchema(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap, schema, options);\n if (feature) yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap, schema, options);\n if (feature) yield feature;\n }\n}\n\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nexport function kml(\n node: Document,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): FeatureCollection<Geometry | null> {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node, options)),\n };\n}\n"],"names":["coordPair","getPoints"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"togeojson.es.mjs","sources":["../lib/lib/shared.ts","../lib/lib/gpx/extensions.ts","../lib/lib/gpx/coord_pair.ts","../lib/lib/gpx/line.ts","../lib/lib/gpx/properties.ts","../lib/lib/gpx.ts","../lib/lib/tcx.ts","../lib/lib/kml/fixColor.ts","../lib/lib/kml/extractStyle.ts","../lib/lib/kml/geometry.ts","../lib/lib/kml/shared.ts","../lib/lib/kml/ground_overlay.ts","../lib/lib/kml/networklink.ts","../lib/lib/kml/placemark.ts","../lib/lib/kml.ts"],"sourcesContent":["import type { Feature, Geometry } from \"geojson\";\n\nexport function $(element: Element | Document, tagName: string): Element[] {\n return Array.from(element.getElementsByTagName(tagName));\n}\n\nexport type P = NonNullable<Feature[\"properties\"]>;\nexport type F = Feature<Geometry | null>;\n\nexport type StyleMap = { [key: string]: P };\n\nexport type NS = [string, string][];\n\nexport function normalizeId(id: string) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\n\nexport function $ns(\n element: Element | Document,\n tagName: string,\n ns: string\n): Element[] {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n\n/**\n * get the content of a text node, if any\n */\nexport function nodeVal(node: Element | null) {\n node?.normalize();\n return node?.textContent || \"\";\n}\n\n/**\n * Get one Y child of X, if any, otherwise null\n */\nexport function get1(\n node: Element,\n tagName: string,\n callback?: (elem: Element) => unknown\n) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) callback(result);\n return result;\n}\n\nexport function get(\n node: Element | null,\n tagName: string,\n callback?: (elem: Element, properties: P) => P\n) {\n const properties: Feature[\"properties\"] = {};\n if (!node) return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\n\nexport function val1(\n node: Element,\n tagName: string,\n callback: (val: string) => P | undefined | void\n): P {\n const val = nodeVal(get1(node, tagName));\n if (val && callback) return callback(val) || {};\n return {};\n}\n\nexport function $num(\n node: Element,\n tagName: string,\n callback: (val: number) => Feature[\"properties\"]\n) {\n const val = Number.parseFloat(nodeVal(get1(node, tagName)));\n if (Number.isNaN(val)) return undefined;\n if (val && callback) return callback(val) || {};\n return {};\n}\n\nexport function num1(\n node: Element,\n tagName: string,\n callback?: (val: number) => unknown\n) {\n const val = Number.parseFloat(nodeVal(get1(node, tagName)));\n if (Number.isNaN(val)) return undefined;\n if (callback) callback(val);\n return val;\n}\n\nexport function getMulti(node: Element, propertyNames: string[]): P {\n const properties: P = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\n\nexport function isElement(node: Node | null): node is Element {\n return node?.nodeType === 1;\n}\n","import { isElement, nodeVal } from \"../shared\";\n\nexport type ExtendedValues = [string, string | number][];\n\nexport function getExtensions(node: Element | null): ExtendedValues {\n let values: [string, string | number][] = [];\n if (node === null) return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child)) continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n } else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\n\nfunction abbreviateName(name: string) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\n\nfunction parseNumeric(val: string) {\n const num = Number.parseFloat(val);\n return Number.isNaN(num) ? val : num;\n}\n","import type { Position } from \"geojson\";\nimport { get1, nodeVal, num1 } from \"../shared\";\nimport { type ExtendedValues, getExtensions } from \"./extensions\";\n\ninterface CoordPair {\n coordinates: Position;\n time: string | null;\n extendedValues: ExtendedValues;\n}\n\nexport function coordPair(node: Element): CoordPair | null {\n const ll = [\n Number.parseFloat(node.getAttribute(\"lon\") || \"\"),\n Number.parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n\n if (Number.isNaN(ll[0]) || Number.isNaN(ll[1])) {\n return null;\n }\n\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n","import { $num, type P, get, val1 } from \"../shared\";\n\nexport function getLineStyle(node: Element | null) {\n return get(node, \"line\", (lineStyle) => {\n const val: P = Object.assign(\n {},\n val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }),\n $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }),\n $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n })\n );\n return val;\n });\n}\n","import { $, type NS, getMulti, nodeVal } from \"../shared\";\n\nexport function extractProperties(ns: NS, node: Element) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n\n for (const [n, url] of ns) {\n for (const child of Array.from(node.getElementsByTagNameNS(url, \"*\"))) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child)?.trim();\n }\n }\n\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) =>\n Object.assign(\n { href: link.getAttribute(\"href\") },\n getMulti(link, [\"text\", \"type\"])\n )\n );\n }\n\n return properties;\n}\n","import type { Document as XDocument } from \"@xmldom/xmldom\";\nimport type {\n Feature,\n FeatureCollection,\n LineString,\n MultiLineString,\n Point,\n Position,\n} from \"geojson\";\nimport { coordPair } from \"./gpx/coord_pair\";\nimport { getLineStyle } from \"./gpx/line\";\nimport { extractProperties } from \"./gpx/properties\";\nimport { $, type NS, type P, get1, getMulti } from \"./shared\";\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints(node: Element, pointname: \"trkpt\" | \"rtept\") {\n const pts = $(node, pointname);\n const line: Position[] = [];\n const times = [];\n const extendedValues: P = {};\n\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time) times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural =\n name === \"heart\" ? name : `${name.replace(\"gpxtpx:\", \"\")}s`;\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n\n if (line.length < 2) return; // Invalid line in GeoJSON\n\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(ns: NS, node: Element): Feature<LineString> | undefined {\n const line = getPoints(node, \"rtept\");\n if (!line) return;\n return {\n type: \"Feature\",\n properties: Object.assign(\n { _gpxType: \"rte\" },\n extractProperties(ns, node),\n getLineStyle(get1(node, \"extensions\"))\n ),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\n\nfunction getTrack(\n ns: NS,\n node: Element\n): Feature<LineString | MultiLineString> | null {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n\n for (const segment of segments) {\n const line = getPoints(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times?.length) times.push(line.times);\n }\n }\n\n if (extractedLines.length === 0) return null;\n\n const multi = extractedLines.length > 1;\n\n const properties: Feature[\"properties\"] = Object.assign(\n { _gpxType: \"trk\" },\n extractProperties(ns, node),\n getLineStyle(get1(node, \"extensions\")),\n times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {}\n );\n\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) =>\n new Array(line.line.length).fill(null)\n );\n }\n props[name][i] = val;\n } else {\n props[name] = val;\n }\n }\n }\n\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(ns: NS, node: Element): Feature<Point> | null {\n const properties: Feature[\"properties\"] = Object.assign(\n extractProperties(ns, node),\n getMulti(node, [\"sym\"])\n );\n const pair = coordPair(node);\n if (!pair) return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nexport function* gpxGen(node: Document | XDocument): Generator<Feature> {\n const n = node as Document;\n const GPXX = \"gpxx\";\n const GPXX_URI = \"http://www.garmin.com/xmlschemas/GpxExtensions/v3\";\n // Namespaces\n const ns: NS = [[GPXX, GPXX_URI]];\n const attrs = n.getElementsByTagName(\"gpx\")[0]?.attributes;\n if (attrs) {\n for (const attr of Array.from(attrs)) {\n if (attr.name?.startsWith(\"xmlns:\") && attr.value !== GPXX_URI) {\n ns.push([attr.name, attr.value]);\n }\n }\n }\n\n for (const track of $(n, \"trk\")) {\n const feature = getTrack(ns, track);\n if (feature) yield feature;\n }\n\n for (const route of $(n, \"rte\")) {\n const feature = getRoute(ns, route);\n if (feature) yield feature;\n }\n\n for (const waypoint of $(n, \"wpt\")) {\n const point = getPoint(ns, waypoint);\n if (point) yield point;\n }\n}\n\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nexport function gpx(node: Document | XDocument): FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n","import type { Document as XDocument } from \"@xmldom/xmldom\";\nimport type { Feature, FeatureCollection, Position } from \"geojson\";\nimport { $, type P, get, get1, nodeVal, num1 } from \"./shared\";\n\ntype PropertyMapping = readonly [string, string][];\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\n\nconst TRACKPOINT_ATTRIBUTES: PropertyMapping = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\n\nconst LAP_ATTRIBUTES: PropertyMapping = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\n\nfunction getProperties(node: Element, attributeNames: PropertyMapping) {\n const properties = [];\n\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = Number.parseFloat(nodeVal(elem));\n if (!Number.isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n\n return properties;\n}\n\nfunction coordPair(node: Element) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (\n ll[0] === undefined ||\n Number.isNaN(ll[0]) ||\n ll[1] === undefined ||\n Number.isNaN(ll[1])\n ) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = Number.parseFloat(nodeVal(alt));\n if (!Number.isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll as number[],\n time: time || null,\n heartRate: heartRate ? Number.parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\n\nfunction getPoints(node: Element) {\n const pts = $(node, \"Trackpoint\");\n const line: Position[] = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2) return null; // Invalid line in GeoJSON\n const extendedProperties: P = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null) continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time) times.push(time);\n if (heartRate) heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2) return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\n\nfunction getLap(node: Element): Feature | null {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line: any;\n const properties: P = Object.assign(\n Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)),\n get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n })\n );\n\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length) times.push(line.times);\n if (line.heartRates.length) heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n } else {\n if (!properties[property]) {\n properties[property] = track.map((track) =>\n Array(track.length).fill(null)\n );\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n\n if (track.length === 0) return null;\n\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(\n times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {},\n heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {}\n );\n }\n\n return {\n type: \"Feature\",\n properties: properties,\n geometry:\n track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nexport function* tcxGen(node: Document | XDocument): Generator<Feature> {\n for (const lap of $(node as Document, \"Lap\")) {\n const feature = getLap(lap);\n if (feature) yield feature;\n }\n\n for (const course of $(node as Document, \"Courses\")) {\n const feature = getLap(course);\n if (feature) yield feature;\n }\n}\n\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nexport function tcx(node: Document | XDocument): FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n","import type { P } from \"../shared\";\n\nexport function fixColor(v: string, prefix: string): P {\n const properties: P = {};\n const colorProp =\n prefix === \"stroke\" || prefix === \"fill\" ? prefix : `${prefix}-color`;\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = `#${v}`;\n } else if (v.length === 8) {\n properties[`${prefix}-opacity`] =\n Number.parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n `#${v.substring(6, 8)}${v.substring(4, 6)}${v.substring(2, 4)}`;\n }\n return properties;\n}\n","import { type P, get, nodeVal, num1, val1 } from \"../shared\";\nimport { fixColor } from \"./fixColor\";\n\nfunction numericProperty(node: Element, source: string, target: string): P {\n const properties: P = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\n\nfunction getColor(node: Element, output: string): P {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\n\nexport function extractIconHref(node: Element) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\n\nexport function extractIcon(node: Element) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(\n getColor(iconStyle, \"icon\"),\n numericProperty(iconStyle, \"scale\", \"icon-scale\"),\n numericProperty(iconStyle, \"heading\", \"icon-heading\"),\n get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = Number.parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = Number.parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!Number.isNaN(left) && !Number.isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }),\n extractIconHref(iconStyle)\n );\n });\n}\n\nexport function extractLabel(node: Element) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(\n getColor(labelStyle, \"label\"),\n numericProperty(labelStyle, \"scale\", \"label-scale\")\n );\n });\n}\n\nexport function extractLine(node: Element) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(\n getColor(lineStyle, \"stroke\"),\n numericProperty(lineStyle, \"width\", \"stroke-width\")\n );\n });\n}\n\nexport function extractPoly(node: Element) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(\n properties,\n get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")),\n val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\") return { \"fill-opacity\": 0 };\n }),\n val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\") return { \"stroke-opacity\": 0 };\n })\n );\n });\n}\n\nexport function extractStyle(node: Element) {\n return Object.assign(\n {},\n extractPoly(node),\n extractLine(node),\n extractLabel(node),\n extractIcon(node)\n );\n}\n","import type { Geometry, LineString, Point, Position } from \"geojson\";\nimport { $, $ns, get1, isElement, nodeVal } from \"../shared\";\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n\n/**\n * Get one coordinate from a coordinate array, if any\n */\nexport function coord1(value: string): Position {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(Number.parseFloat)\n .filter((num) => !Number.isNaN(num))\n .slice(0, 3);\n}\n\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nexport function coord(value: string): Position[] {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\n\nfunction gxCoords(\n node: Element\n): { geometry: Point | LineString; times: string[] } | null {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(Number.parseFloat);\n });\n\n if (coordinates.length === 0) {\n return null;\n }\n\n return {\n geometry:\n coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\n\nexport function fixRing(ring: Position[]) {\n if (ring.length === 0) return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\n\nexport function getCoordinates(node: Element) {\n return nodeVal(get1(node, \"coordinates\"));\n}\n\ninterface GeometriesAndTimes {\n geometries: Geometry[];\n coordTimes: string[][];\n}\n\nexport function getGeometry(node: Element): GeometriesAndTimes {\n let geometries: Geometry[] = [];\n let coordTimes: string[][] = [];\n\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LinearRing\":\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx) break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length) coordTimes.push(times);\n break;\n }\n }\n }\n }\n\n return {\n geometries,\n coordTimes,\n };\n}\n","import {\n $,\n type P,\n type StyleMap,\n get,\n get1,\n nodeVal,\n normalizeId,\n val1,\n} from \"../shared\";\n\nexport type TypeConverter = (x: string) => unknown;\nexport type Schema = { [key: string]: TypeConverter };\n\nconst toNumber: TypeConverter = (x) => Number(x);\nexport const typeConverters: Record<string, TypeConverter> = {\n string: (x) => x,\n int: toNumber,\n uint: toNumber,\n short: toNumber,\n ushort: toNumber,\n float: toNumber,\n double: toNumber,\n bool: (x) => Boolean(x),\n};\n\nexport function extractExtendedData(node: Element, schema: Schema) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(\n get1(data, \"value\")\n );\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n const name = simpleData.getAttribute(\"name\") || \"\";\n const typeConverter = schema[name] || typeConverters.string;\n properties[name] = typeConverter(nodeVal(simpleData));\n }\n return properties;\n });\n}\n\nexport function getMaybeHTMLDescription(node: Element) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c as Element),\n },\n };\n }\n }\n return {};\n}\n\nexport function extractTimeSpan(node: Element): P {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\n\nexport function extractTimeStamp(node: Element): P {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\n\nexport function extractCascadedStyle(node: Element, styleMap: StyleMap): P {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nexport enum AltitudeMode {\n ABSOLUTE = \"absolute\",\n RELATIVE_TO_GROUND = \"relativeToGround\",\n CLAMP_TO_GROUND = \"clampToGround\",\n CLAMP_TO_SEAFLOOR = \"clampToSeaFloor\",\n RELATIVE_TO_SEAFLOOR = \"relativeToSeaFloor\",\n}\n\nexport function processAltitudeMode(mode: Element | null): AltitudeMode | null {\n switch (mode?.textContent) {\n case AltitudeMode.ABSOLUTE:\n return AltitudeMode.ABSOLUTE;\n case AltitudeMode.CLAMP_TO_GROUND:\n return AltitudeMode.CLAMP_TO_GROUND;\n case AltitudeMode.CLAMP_TO_SEAFLOOR:\n return AltitudeMode.CLAMP_TO_SEAFLOOR;\n case AltitudeMode.RELATIVE_TO_GROUND:\n return AltitudeMode.RELATIVE_TO_GROUND;\n case AltitudeMode.RELATIVE_TO_SEAFLOOR:\n return AltitudeMode.RELATIVE_TO_SEAFLOOR;\n default:\n break;\n }\n return null;\n}\n\nexport type BBox = [number, number, number, number];\n","import type { Feature, Polygon } from \"geojson\";\nimport type { KMLOptions } from \"lib/kml\";\nimport { type StyleMap, get1, getMulti, num1 } from \"../shared\";\nimport { extractIconHref, extractStyle } from \"./extractStyle\";\nimport { coord, fixRing, getCoordinates } from \"./geometry\";\nimport {\n type BBox,\n type Schema,\n extractCascadedStyle,\n extractExtendedData,\n extractTimeSpan,\n extractTimeStamp,\n getMaybeHTMLDescription,\n} from \"./shared\";\n\ninterface BoxGeometry {\n bbox?: BBox;\n geometry: Polygon;\n}\n\nfunction getGroundOverlayBox(node: Element): BoxGeometry | null {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n geometry: {\n type: \"Polygon\",\n coordinates: [ring],\n },\n };\n }\n\n return getLatLonBox(node);\n}\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nfunction rotateBox(\n bbox: BBox,\n coordinates: Polygon[\"coordinates\"],\n rotation: number\n): Polygon[\"coordinates\"] {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(dy ** 2 + dx ** 2);\n const angle = Math.atan2(dy, dx) + rotation * DEGREES_TO_RADIANS;\n\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\n\nfunction getLatLonBox(node: Element): BoxGeometry | null {\n const latLonBox = get1(node, \"LatLonBox\");\n\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n\n if (\n typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\"\n ) {\n const bbox: BBox = [west, south, east, north];\n let coordinates = [\n [\n [west, north], // top left\n [east, north], // top right\n [east, south], // top right\n [west, south], // bottom left\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n bbox,\n geometry: {\n type: \"Polygon\",\n coordinates,\n },\n };\n }\n }\n\n return null;\n}\n\nexport function getGroundOverlay(\n node: Element,\n styleMap: StyleMap,\n schema: Schema,\n options: KMLOptions\n): Feature<Polygon | null> | null {\n const box = getGroundOverlayBox(node);\n\n const geometry = box?.geometry || null;\n\n if (!geometry && options.skipNullGeometry) {\n return null;\n }\n\n const feature: Feature<Polygon | null> = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" },\n getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]),\n getMaybeHTMLDescription(node),\n extractCascadedStyle(node, styleMap),\n extractStyle(node),\n extractIconHref(node),\n extractExtendedData(node, schema),\n extractTimeSpan(node),\n extractTimeStamp(node)\n ),\n };\n\n if (box?.bbox) {\n feature.bbox = box.bbox;\n }\n\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\") feature.id = id;\n return feature;\n}\n","import type { Feature, Polygon } from \"geojson\";\nimport type { KMLOptions } from \"lib/kml\";\nimport { type StyleMap, get1, getMulti, num1 } from \"../shared\";\nimport { extractIconHref, extractStyle } from \"./extractStyle\";\nimport {\n AltitudeMode,\n type BBox,\n type Schema,\n extractCascadedStyle,\n extractExtendedData,\n extractTimeSpan,\n extractTimeStamp,\n getMaybeHTMLDescription,\n processAltitudeMode,\n} from \"./shared\";\n\ninterface BoxGeometry {\n bbox?: BBox;\n geometry: Polygon;\n}\n\ntype LOD = [number, number | null, number | null, number | null];\ninterface IRegion {\n coordinateBox: BoxGeometry | null;\n lod: LOD | null;\n}\n\nfunction getNetworkLinkRegion(node: Element): IRegion | null {\n const region = get1(node, \"Region\");\n\n if (region) {\n return {\n coordinateBox: getLatLonAltBox(region),\n lod: getLod(node),\n };\n }\n return null;\n}\n\nfunction getLod(node: Element): LOD | null {\n const lod = get1(node, \"Lod\");\n\n if (lod) {\n return [\n num1(lod, \"minLodPixels\") ?? -1,\n num1(lod, \"maxLodPixels\") ?? -1,\n num1(lod, \"minFadeExtent\") ?? null,\n num1(lod, \"maxFadeExtent\") ?? null,\n ];\n }\n\n return null;\n}\n\nfunction getLatLonAltBox(node: Element): BoxGeometry | null {\n const latLonAltBox = get1(node, \"LatLonAltBox\");\n\n if (latLonAltBox) {\n const north = num1(latLonAltBox, \"north\");\n const west = num1(latLonAltBox, \"west\");\n const east = num1(latLonAltBox, \"east\");\n const south = num1(latLonAltBox, \"south\");\n const altitudeMode = processAltitudeMode(\n get1(latLonAltBox, \"altitudeMode\") ||\n get1(latLonAltBox, \"gx:altitudeMode\")\n );\n\n if (altitudeMode) {\n console.debug(\n \"Encountered an unsupported feature of KML for togeojson: please contact developers for support of altitude mode.\"\n );\n }\n if (\n typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\"\n ) {\n const bbox: BBox = [west, south, east, north];\n const coordinates = [\n [\n [west, north], // top left\n [east, north], // top right\n [east, south], // top right\n [west, south], // bottom left\n [west, north], // top left (again)\n ],\n ];\n return {\n bbox,\n geometry: {\n type: \"Polygon\",\n coordinates,\n },\n };\n }\n }\n\n return null;\n}\n\nfunction getLinkObject(node: Element) {\n /*\n <Link id=\"ID\">\n <!-- specific to Link -->\n <href>...</href> <!-- string -->\n <refreshMode>onChange</refreshMode>\n <!-- refreshModeEnum: onChange, onInterval, or onExpire -->\n <refreshInterval>4</refreshInterval> <!-- float -->\n <viewRefreshMode>never</viewRefreshMode>\n <!-- viewRefreshModeEnum: never, onStop, onRequest, onRegion -->\n <viewRefreshTime>4</viewRefreshTime> <!-- float -->\n <viewBoundScale>1</viewBoundScale> <!-- float -->\n <viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]</viewFormat>\n <!-- string -->\n <httpQuery>...</httpQuery> <!-- string -->\n </Link>\n */\n const linkObj = get1(node, \"Link\");\n\n if (linkObj) {\n return getMulti(linkObj, [\n \"href\",\n \"refreshMode\",\n \"refreshInterval\",\n \"viewRefreshMode\",\n \"viewRefreshTime\",\n \"viewBoundScale\",\n \"viewFormat\",\n \"httpQuery\",\n ]);\n }\n\n return {};\n}\n\nexport function getNetworkLink(\n node: Element,\n styleMap: StyleMap,\n schema: Schema,\n options: KMLOptions\n): Feature<Polygon | null> | null {\n const box = getNetworkLinkRegion(node);\n\n const geometry = box?.coordinateBox?.geometry || null;\n\n if (!geometry && options.skipNullGeometry) {\n return null;\n }\n\n const feature: Feature<Polygon | null> = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"networklink\" },\n getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"styleUrl\",\n \"refreshVisibility\",\n \"flyToView\",\n \"description\",\n ]),\n getMaybeHTMLDescription(node),\n extractCascadedStyle(node, styleMap),\n extractStyle(node),\n extractIconHref(node),\n extractExtendedData(node, schema),\n extractTimeSpan(node),\n extractTimeStamp(node),\n getLinkObject(node),\n box?.lod ? { lod: box.lod } : {}\n ),\n };\n\n if (box?.coordinateBox?.bbox) {\n feature.bbox = box.coordinateBox.bbox;\n }\n\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\") feature.id = id;\n return feature;\n}\n","import type { Feature, Geometry } from \"geojson\";\nimport type { KMLOptions } from \"lib/kml\";\nimport { type StyleMap, getMulti } from \"../shared\";\nimport { extractStyle } from \"./extractStyle\";\nimport { getGeometry } from \"./geometry\";\nimport {\n type Schema,\n extractCascadedStyle,\n extractExtendedData,\n extractTimeSpan,\n extractTimeStamp,\n getMaybeHTMLDescription,\n} from \"./shared\";\n\nfunction geometryListToGeometry(geometries: Geometry[]): Geometry | null {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\n\nexport function getPlacemark(\n node: Element,\n styleMap: StyleMap,\n schema: Schema,\n options: KMLOptions\n): Feature<Geometry | null> | null {\n const { coordTimes, geometries } = getGeometry(node);\n\n const geometry = geometryListToGeometry(geometries);\n\n if (!geometry && options.skipNullGeometry) {\n return null;\n }\n\n const feature: Feature<Geometry | null> = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]),\n getMaybeHTMLDescription(node),\n extractCascadedStyle(node, styleMap),\n extractStyle(node),\n extractExtendedData(node, schema),\n extractTimeSpan(node),\n extractTimeStamp(node),\n coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}\n ),\n };\n\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\") feature.id = id;\n return feature;\n}\n","import type { Document as XDocument } from \"@xmldom/xmldom\";\nimport type { FeatureCollection, Geometry } from \"geojson\";\nimport { extractStyle } from \"./kml/extractStyle\";\nimport { getGroundOverlay } from \"./kml/ground_overlay\";\nimport { getNetworkLink } from \"./kml/networklink\";\nimport { getPlacemark } from \"./kml/placemark\";\nimport { type Schema, typeConverters } from \"./kml/shared\";\nimport {\n $,\n type F,\n type P,\n type StyleMap,\n isElement,\n nodeVal,\n normalizeId,\n val1,\n} from \"./shared\";\n\n/**\n * Options to customize KML output.\n *\n * The only option currently\n * is `skipNullGeometry`. Both the KML and GeoJSON formats support\n * the idea of features that don't have geometries: in KML,\n * this is a Placemark without a Point, etc element, and in GeoJSON\n * it's a geometry member with a value of `null`.\n *\n * toGeoJSON, by default, translates null geometries in KML to\n * null geometries in GeoJSON. For systems that use GeoJSON but\n * don't support null geometries, you can specify `skipNullGeometry`\n * to omit these features entirely and only include\n * features that have a geometry defined.\n */\nexport interface KMLOptions {\n skipNullGeometry?: boolean;\n}\n\n/**\n * A folder including metadata. Folders\n * may contain other folders or features,\n * or nothing at all.\n */\nexport interface Folder {\n type: \"folder\";\n /**\n * Standard values:\n *\n * * \"name\",\n * * \"visibility\",\n * * \"open\",\n * * \"address\",\n * * \"description\",\n * * \"phoneNumber\",\n * * \"visibility\",\n */\n meta: {\n [key: string]: unknown;\n };\n children: Array<Folder | F>;\n}\n\n/**\n * A nested folder structure, represented\n * as a tree with folders and features.\n */\nexport interface Root {\n type: \"root\";\n children: Array<Folder | F>;\n}\n\ntype TreeContainer = Root | Folder;\n\nfunction getStyleId(style: Element) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (\n !id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\"\n ) {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\n\nfunction buildStyleMap(node: Document): StyleMap {\n const styleMap: StyleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\n\nfunction buildSchema(node: Document): Schema {\n const schema: Schema = {};\n for (const field of $(node, \"SimpleField\")) {\n schema[field.getAttribute(\"name\") || \"\"] =\n typeConverters[field.getAttribute(\"type\") || \"\"] || typeConverters.string;\n }\n return schema;\n}\n\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n] as const;\n\nfunction getFolder(node: Element): Folder {\n const meta: P = {};\n\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName as any)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nexport function kmlWithFolders(\n node: Document | XDocument,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): Root {\n const n = node as Document;\n const styleMap = buildStyleMap(n);\n const schema = buildSchema(n);\n\n // atomic geospatial types supported by KML - MultiGeometry is\n // handled separately\n // all root placemarks in the file\n const placemarks = [];\n const networkLinks = [];\n const tree: Root = { type: \"root\", children: [] };\n\n function traverse(\n node: Document | ChildNode | Element,\n pointer: TreeContainer,\n options: KMLOptions\n ) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n placemarks.push(node);\n const placemark = getGroundOverlay(node, styleMap, schema, options);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n placemarks.push(node);\n const placemark = getPlacemark(node, styleMap, schema, options);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n case \"NetworkLink\": {\n networkLinks.push(node);\n const networkLink = getNetworkLink(node, styleMap, schema, options);\n if (networkLink) {\n pointer.children.push(networkLink);\n }\n break;\n }\n }\n }\n\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer, options);\n }\n }\n }\n\n traverse(n, tree, options);\n\n return tree;\n}\n\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nexport function* kmlGen(\n node: Document | XDocument,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): Generator<F> {\n const n = node as Document;\n const styleMap = buildStyleMap(n);\n const schema = buildSchema(n);\n for (const placemark of $(n, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap, schema, options);\n if (feature) yield feature;\n }\n for (const groundOverlay of $(n, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap, schema, options);\n if (feature) yield feature;\n }\n}\n\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nexport function kml(\n node: Document | XDocument,\n options: KMLOptions = {\n skipNullGeometry: false,\n }\n): FeatureCollection<Geometry | null> {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node as Document, options)),\n };\n}\n"],"names":["coordPair","getPoints"],"mappings":"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"}
|