umap-project 2.4.2__py3-none-any.whl → 2.5.0__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.
- umap/__init__.py +1 -1
- umap/locale/el/LC_MESSAGES/django.mo +0 -0
- umap/locale/eu/LC_MESSAGES/django.mo +0 -0
- umap/locale/hu/LC_MESSAGES/django.mo +0 -0
- umap/locale/hu/LC_MESSAGES/django.po +100 -50
- umap/static/umap/base.css +4 -1
- umap/static/umap/css/contextmenu.css +11 -0
- umap/static/umap/css/dialog.css +24 -3
- umap/static/umap/css/panel.css +4 -2
- umap/static/umap/css/slideshow.css +69 -0
- umap/static/umap/css/tableeditor.css +69 -0
- umap/static/umap/css/tooltip.css +3 -3
- umap/static/umap/img/16-white.svg +4 -0
- umap/static/umap/img/source/16-white.svg +5 -1
- umap/static/umap/js/components/alerts/alert.css +10 -10
- umap/static/umap/js/modules/autocomplete.js +23 -1
- umap/static/umap/js/modules/browser.js +14 -8
- umap/static/umap/js/modules/facets.js +40 -10
- umap/static/umap/js/modules/formatter.js +153 -0
- umap/static/umap/js/modules/global.js +10 -1
- umap/static/umap/js/modules/help.js +25 -25
- umap/static/umap/js/modules/importer.js +4 -4
- umap/static/umap/js/modules/importers/communesfr.js +3 -1
- umap/static/umap/js/modules/importers/datasets.js +8 -6
- umap/static/umap/js/modules/importers/geodatamine.js +10 -10
- umap/static/umap/js/modules/importers/overpass.js +18 -14
- umap/static/umap/js/modules/rules.js +13 -1
- umap/static/umap/js/modules/schema.js +16 -12
- umap/static/umap/js/{umap.share.js → modules/share.js} +60 -99
- umap/static/umap/js/modules/slideshow.js +141 -0
- umap/static/umap/js/modules/tableeditor.js +329 -0
- umap/static/umap/js/modules/ui/base.js +93 -0
- umap/static/umap/js/modules/ui/contextmenu.js +50 -0
- umap/static/umap/js/modules/ui/dialog.js +169 -31
- umap/static/umap/js/modules/ui/panel.js +6 -4
- umap/static/umap/js/modules/ui/tooltip.js +5 -75
- umap/static/umap/js/modules/utils.js +20 -0
- umap/static/umap/js/umap.controls.js +1 -1
- umap/static/umap/js/umap.features.js +22 -14
- umap/static/umap/js/umap.forms.js +157 -154
- umap/static/umap/js/umap.js +48 -34
- umap/static/umap/js/umap.layer.js +232 -164
- umap/static/umap/js/umap.permissions.js +1 -1
- umap/static/umap/js/umap.popup.js +1 -1
- umap/static/umap/locale/am_ET.js +22 -5
- umap/static/umap/locale/am_ET.json +19 -5
- umap/static/umap/locale/ar.js +22 -5
- umap/static/umap/locale/ar.json +19 -5
- umap/static/umap/locale/ast.js +22 -5
- umap/static/umap/locale/ast.json +19 -5
- umap/static/umap/locale/bg.js +22 -5
- umap/static/umap/locale/bg.json +19 -5
- umap/static/umap/locale/br.js +22 -5
- umap/static/umap/locale/br.json +19 -5
- umap/static/umap/locale/ca.js +56 -39
- umap/static/umap/locale/ca.json +53 -39
- umap/static/umap/locale/cs_CZ.js +22 -5
- umap/static/umap/locale/cs_CZ.json +19 -5
- umap/static/umap/locale/da.js +22 -5
- umap/static/umap/locale/da.json +19 -5
- umap/static/umap/locale/de.js +22 -5
- umap/static/umap/locale/de.json +19 -5
- umap/static/umap/locale/el.js +27 -10
- umap/static/umap/locale/el.json +19 -5
- umap/static/umap/locale/en.js +22 -6
- umap/static/umap/locale/en.json +19 -5
- umap/static/umap/locale/en_US.json +19 -5
- umap/static/umap/locale/es.js +22 -6
- umap/static/umap/locale/es.json +19 -5
- umap/static/umap/locale/et.js +22 -5
- umap/static/umap/locale/et.json +19 -5
- umap/static/umap/locale/eu.js +167 -150
- umap/static/umap/locale/eu.json +167 -150
- umap/static/umap/locale/fa_IR.js +22 -5
- umap/static/umap/locale/fa_IR.json +19 -5
- umap/static/umap/locale/fi.js +22 -5
- umap/static/umap/locale/fi.json +19 -5
- umap/static/umap/locale/fr.js +22 -6
- umap/static/umap/locale/fr.json +19 -5
- umap/static/umap/locale/gl.js +22 -5
- umap/static/umap/locale/gl.json +19 -5
- umap/static/umap/locale/he.js +22 -5
- umap/static/umap/locale/he.json +19 -5
- umap/static/umap/locale/hr.js +22 -5
- umap/static/umap/locale/hr.json +19 -5
- umap/static/umap/locale/hu.js +89 -72
- umap/static/umap/locale/hu.json +89 -75
- umap/static/umap/locale/id.js +22 -5
- umap/static/umap/locale/id.json +19 -5
- umap/static/umap/locale/is.js +22 -5
- umap/static/umap/locale/is.json +19 -5
- umap/static/umap/locale/it.js +22 -5
- umap/static/umap/locale/it.json +19 -5
- umap/static/umap/locale/ja.js +22 -5
- umap/static/umap/locale/ja.json +19 -5
- umap/static/umap/locale/ko.js +22 -5
- umap/static/umap/locale/ko.json +19 -5
- umap/static/umap/locale/lt.js +22 -5
- umap/static/umap/locale/lt.json +19 -5
- umap/static/umap/locale/ms.js +22 -5
- umap/static/umap/locale/ms.json +19 -5
- umap/static/umap/locale/nl.js +22 -5
- umap/static/umap/locale/nl.json +19 -5
- umap/static/umap/locale/no.js +22 -5
- umap/static/umap/locale/no.json +19 -5
- umap/static/umap/locale/pl.js +22 -5
- umap/static/umap/locale/pl.json +19 -5
- umap/static/umap/locale/pl_PL.json +19 -5
- umap/static/umap/locale/pt.js +22 -6
- umap/static/umap/locale/pt.json +21 -7
- umap/static/umap/locale/pt_BR.js +22 -5
- umap/static/umap/locale/pt_BR.json +19 -5
- umap/static/umap/locale/pt_PT.js +22 -5
- umap/static/umap/locale/pt_PT.json +19 -5
- umap/static/umap/locale/ro.js +22 -5
- umap/static/umap/locale/ro.json +19 -5
- umap/static/umap/locale/ru.js +22 -5
- umap/static/umap/locale/ru.json +19 -5
- umap/static/umap/locale/sk_SK.js +22 -5
- umap/static/umap/locale/sk_SK.json +19 -5
- umap/static/umap/locale/sl.js +22 -5
- umap/static/umap/locale/sl.json +19 -5
- umap/static/umap/locale/sr.js +22 -5
- umap/static/umap/locale/sr.json +19 -5
- umap/static/umap/locale/sv.js +22 -5
- umap/static/umap/locale/sv.json +19 -5
- umap/static/umap/locale/th_TH.js +22 -5
- umap/static/umap/locale/th_TH.json +19 -5
- umap/static/umap/locale/tr.js +22 -5
- umap/static/umap/locale/tr.json +19 -5
- umap/static/umap/locale/uk_UA.js +22 -5
- umap/static/umap/locale/uk_UA.json +19 -5
- umap/static/umap/locale/vi.js +22 -5
- umap/static/umap/locale/vi.json +19 -5
- umap/static/umap/locale/vi_VN.json +19 -5
- umap/static/umap/locale/zh.js +22 -5
- umap/static/umap/locale/zh.json +19 -5
- umap/static/umap/locale/zh_CN.json +19 -5
- umap/static/umap/locale/zh_TW.Big5.json +19 -5
- umap/static/umap/locale/zh_TW.js +22 -5
- umap/static/umap/locale/zh_TW.json +19 -5
- umap/static/umap/map.css +2 -145
- umap/static/umap/vars.css +5 -0
- umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +410 -428
- umap/static/umap/vendors/geojson-to-gpx/index.js +155 -0
- umap/static/umap/vendors/osmtogeojson/osmtogeojson.js +1 -2
- umap/static/umap/vendors/togeojson/togeojson.es.js +1109 -0
- umap/static/umap/vendors/togeojson/{togeojson.umd.js.map → togeojson.es.mjs.map} +1 -1
- umap/static/umap/vendors/tokml/tokml.es.js +895 -0
- umap/static/umap/vendors/tokml/tokml.es.mjs.map +1 -0
- umap/storage.py +5 -1
- umap/templates/umap/components/alerts/alert.html +3 -3
- umap/templates/umap/css.html +3 -0
- umap/templates/umap/js.html +0 -6
- umap/tests/fixtures/categorized_highway.geojson +1 -0
- umap/tests/fixtures/test_import_osm_relation.json +130 -0
- umap/tests/integration/conftest.py +8 -1
- umap/tests/integration/test_browser.py +3 -2
- umap/tests/integration/test_categorized_layer.py +141 -0
- umap/tests/integration/test_conditional_rules.py +21 -0
- umap/tests/integration/test_datalayer.py +9 -4
- umap/tests/integration/test_edit_datalayer.py +1 -0
- umap/tests/integration/test_edit_polygon.py +1 -1
- umap/tests/integration/test_export_map.py +2 -3
- umap/tests/integration/test_import.py +22 -0
- umap/tests/integration/test_tableeditor.py +158 -4
- umap/tests/integration/test_websocket_sync.py +2 -2
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/METADATA +8 -8
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/RECORD +172 -162
- umap/static/umap/js/umap.slideshow.js +0 -163
- umap/static/umap/js/umap.tableeditor.js +0 -118
- umap/static/umap/vendors/togeojson/togeojson.umd.js +0 -2
- umap/static/umap/vendors/togpx/togpx.js +0 -547
- umap/static/umap/vendors/tokml/tokml.js +0 -343
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/WHEEL +0 -0
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/entry_points.txt +0 -0
- {umap_project-2.4.2.dist-info → umap_project-2.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"togeojson.umd.js","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":["$","element","tagName","Array","from","getElementsByTagName","normalizeId","id","nodeVal","node","normalize","textContent","get1","callback","n","result","length","get","properties","val1","val","$num","parseFloat","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","color","stroke","opacity","width","getExtensions","values","child","childNodes","name","abbreviateName","nodeName","concat","push","parseNumeric","includes","num","coordPair","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","href","getPoints","pointname","pts","line","times","i","c","plural","fill","getRoute","type","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","props","entries","getPoint","pair","gpxGen","feature","route","waypoint","point","TRACKPOINT_ATTRIBUTES","LAP_ATTRIBUTES","getProperties","attributeNames","tag","alias","elem","elements","undefined","heartRate","alt","a","heartRates","extendedProperties","value","getLap","allExtendedProperties","fromEntries","nameElement","heart","tcxGen","lap","course","fixColor","v","prefix","colorProp","substring","parseInt","numericProperty","source","target","getColor","output","extractIconHref","icon","extractStyle","polyStyle","outline","extractPoly","extractLine","labelStyle","extractLabel","iconStyle","hotspot","left","top","xunits","yunits","extractIcon","toNumber","x","Number","typeConverters","string","int","uint","short","ushort","float","double","bool","Boolean","extractExtendedData","schema","extendedData","data","simpleData","typeConverter","getMaybeHTMLDescription","descriptionNode","description","extractTimeSpan","timeSpan","timespan","begin","end","extractTimeStamp","timeStamp","timestamp","extractCascadedStyle","styleMap","styleUrl","removeSpace","trimSpace","splitSpace","coord1","split","filter","slice","coord","gxCoords","elems","ns","fixRing","ring","first","last","equal","Math","max","getCoordinates","getGeometry","geometries","coordTimes","item","childGeometries","coords","linearRing","gx","getPlacemark","options","geometryListToGeometry","skipNullGeometry","visibility","getGroundOverlayBox","latLonBox","north","west","east","south","rotation","bbox","center","coordinate","dy","dx","distance","sqrt","pow","angle","atan2","DEGREES_TO_RADIANS","cos","sin","rotateBox","getLatLonBox","PI","getGroundOverlay","box","getStyleId","style","localName","buildStyleMap","buildSchema","field","FOLDER_PROPS","kmlGen","placemark","groundOverlay","features","tree","children","traverse","pointer","folder","meta","getFolder"],"mappings":"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"}
|
|
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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"}
|