diff --git a/package.json b/package.json
index 16d9b54f..86920e88 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,7 @@
"dependencies": {
"@dwayneparton/geojson-to-gpx": "^0.2.0",
"@placemarkio/tokml": "0.3.4",
- "@tmcw/togeojson": "^5.8.0",
+ "@tmcw/togeojson": "^7.1.0",
"colorbrewer": "1.5.7",
"csv2geojson": "github:umap-project/csv2geojson#patched",
"dompurify": "3.2.4",
diff --git a/umap/static/umap/vendors/togeojson/togeojson.es.js b/umap/static/umap/vendors/togeojson/togeojson.es.js
index 64256964..eed9809e 100644
--- a/umap/static/umap/vendors/togeojson/togeojson.es.js
+++ b/umap/static/umap/vendors/togeojson/togeojson.es.js
@@ -12,7 +12,7 @@ function $ns(element, tagName, ns) {
*/
function nodeVal(node) {
node?.normalize();
- return (node && node.textContent) || "";
+ return node?.textContent || "";
}
/**
* Get one Y child of X, if any, otherwise null
@@ -42,16 +42,16 @@ function val1(node, tagName, callback) {
return {};
}
function $num(node, tagName, callback) {
- const val = parseFloat(nodeVal(get1(node, tagName)));
- if (isNaN(val))
+ const val = Number.parseFloat(nodeVal(get1(node, tagName)));
+ if (Number.isNaN(val))
return undefined;
if (val && callback)
return callback(val) || {};
return {};
}
function num1(node, tagName, callback) {
- const val = parseFloat(nodeVal(get1(node, tagName)));
- if (isNaN(val))
+ const val = Number.parseFloat(nodeVal(get1(node, tagName)));
+ if (Number.isNaN(val))
return undefined;
if (callback)
callback(val);
@@ -70,20 +70,6 @@ function isElement(node) {
return node?.nodeType === 1;
}
-function getLineStyle(node) {
- return get(node, "line", (lineStyle) => {
- const val = Object.assign({}, val1(lineStyle, "color", (color) => {
- return { stroke: `#${color}` };
- }), $num(lineStyle, "opacity", (opacity) => {
- return { "stroke-opacity": opacity };
- }), $num(lineStyle, "width", (width) => {
- // GPX width is in mm, convert to px with 96 px per inch
- return { "stroke-width": (width * 96) / 25.4 };
- }));
- return val;
- });
-}
-
function getExtensions(node) {
let values = [];
if (node === null)
@@ -108,16 +94,16 @@ function abbreviateName(name) {
return ["heart", "gpxtpx:hr", "hr"].includes(name) ? "heart" : name;
}
function parseNumeric(val) {
- const num = parseFloat(val);
- return isNaN(num) ? val : num;
+ const num = Number.parseFloat(val);
+ return Number.isNaN(num) ? val : num;
}
function coordPair$1(node) {
const ll = [
- parseFloat(node.getAttribute("lon") || ""),
- parseFloat(node.getAttribute("lat") || ""),
+ Number.parseFloat(node.getAttribute("lon") || ""),
+ Number.parseFloat(node.getAttribute("lat") || ""),
];
- if (isNaN(ll[0]) || isNaN(ll[1])) {
+ if (Number.isNaN(ll[0]) || Number.isNaN(ll[1])) {
return null;
}
num1(node, "ele", (val) => {
@@ -131,7 +117,21 @@ function coordPair$1(node) {
};
}
-function extractProperties(node) {
+function getLineStyle(node) {
+ return get(node, "line", (lineStyle) => {
+ const val = Object.assign({}, val1(lineStyle, "color", (color) => {
+ return { stroke: `#${color}` };
+ }), $num(lineStyle, "opacity", (opacity) => {
+ return { "stroke-opacity": opacity };
+ }), $num(lineStyle, "width", (width) => {
+ // GPX width is in mm, convert to px with 96 px per inch
+ return { "stroke-width": (width * 96) / 25.4 };
+ }));
+ return val;
+ });
+}
+
+function extractProperties(ns, node) {
const properties = getMulti(node, [
"name",
"cmt",
@@ -140,10 +140,9 @@ function extractProperties(node) {
"time",
"keywords",
]);
- const extensions = Array.from(node.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3", "*"));
- for (const child of extensions) {
- if (child.parentNode?.parentNode === node) {
- properties[child.tagName.replace(":", "_")] = nodeVal(child);
+ for (const [n, url] of ns) {
+ for (const child of Array.from(node.getElementsByTagNameNS(url, "*"))) {
+ properties[child.tagName.replace(":", "_")] = nodeVal(child)?.trim();
}
}
const links = $(node, "link");
@@ -170,7 +169,7 @@ function getPoints$1(node, pointname) {
if (c.time)
times.push(c.time);
for (const [name, val] of c.extendedValues) {
- const plural = name === "heart" ? name : name.replace("gpxtpx:", "") + "s";
+ const plural = name === "heart" ? name : `${name.replace("gpxtpx:", "")}s`;
if (!extendedValues[plural]) {
extendedValues[plural] = Array(pts.length).fill(null);
}
@@ -189,20 +188,20 @@ function getPoints$1(node, pointname) {
* Extract a LineString geometry from a rte
* element.
*/
-function getRoute(node) {
+function getRoute(ns, node) {
const line = getPoints$1(node, "rtept");
if (!line)
return;
return {
type: "Feature",
- properties: Object.assign({ _gpxType: "rte" }, extractProperties(node), getLineStyle(get1(node, "extensions"))),
+ properties: Object.assign({ _gpxType: "rte" }, extractProperties(ns, node), getLineStyle(get1(node, "extensions"))),
geometry: {
type: "LineString",
coordinates: line.line,
},
};
}
-function getTrack(node) {
+function getTrack(ns, node) {
const segments = $(node, "trkseg");
const track = [];
const times = [];
@@ -211,14 +210,14 @@ function getTrack(node) {
const line = getPoints$1(segment, "trkpt");
if (line) {
extractedLines.push(line);
- if (line.times && line.times.length)
+ if (line.times?.length)
times.push(line.times);
}
}
if (extractedLines.length === 0)
return null;
const multi = extractedLines.length > 1;
- const properties = Object.assign({ _gpxType: "trk" }, extractProperties(node), getLineStyle(get1(node, "extensions")), times.length
+ const properties = Object.assign({ _gpxType: "trk" }, extractProperties(ns, node), getLineStyle(get1(node, "extensions")), times.length
? {
coordinateProperties: {
times: multi ? times : times[0],
@@ -263,8 +262,8 @@ function getTrack(node) {
* Extract a point, if possible, from a given node,
* which is usually a wpt or trkpt
*/
-function getPoint(node) {
- const properties = Object.assign(extractProperties(node), getMulti(node, ["sym"]));
+function getPoint(ns, node) {
+ const properties = Object.assign(extractProperties(ns, node), getMulti(node, ["sym"]));
const pair = coordPair$1(node);
if (!pair)
return null;
@@ -283,18 +282,31 @@ function getPoint(node) {
* that yields output feature by feature.
*/
function* gpxGen(node) {
- for (const track of $(node, "trk")) {
- const feature = getTrack(track);
+ const n = node;
+ const GPXX = "gpxx";
+ const GPXX_URI = "http://www.garmin.com/xmlschemas/GpxExtensions/v3";
+ // Namespaces
+ const ns = [[GPXX, GPXX_URI]];
+ const attrs = n.getElementsByTagName("gpx")[0]?.attributes;
+ if (attrs) {
+ for (const attr of Array.from(attrs)) {
+ if (attr.name?.startsWith("xmlns:") && attr.value !== GPXX_URI) {
+ ns.push([attr.name, attr.value]);
+ }
+ }
+ }
+ for (const track of $(n, "trk")) {
+ const feature = getTrack(ns, track);
if (feature)
yield feature;
}
- for (const route of $(node, "rte")) {
- const feature = getRoute(route);
+ for (const route of $(n, "rte")) {
+ const feature = getRoute(ns, route);
if (feature)
yield feature;
}
- for (const waypoint of $(node, "wpt")) {
- const point = getPoint(waypoint);
+ for (const waypoint of $(n, "wpt")) {
+ const point = getPoint(ns, waypoint);
if (point)
yield point;
}
@@ -346,8 +358,8 @@ function getProperties(node, attributeNames) {
elem = elements[0];
}
}
- const val = parseFloat(nodeVal(elem));
- if (!isNaN(val)) {
+ const val = Number.parseFloat(nodeVal(elem));
+ if (!Number.isNaN(val)) {
properties.push([alias, val]);
}
}
@@ -356,23 +368,23 @@ function getProperties(node, attributeNames) {
function coordPair(node) {
const ll = [num1(node, "LongitudeDegrees"), num1(node, "LatitudeDegrees")];
if (ll[0] === undefined ||
- isNaN(ll[0]) ||
+ Number.isNaN(ll[0]) ||
ll[1] === undefined ||
- isNaN(ll[1])) {
+ Number.isNaN(ll[1])) {
return null;
}
const heartRate = get1(node, "HeartRateBpm");
const time = nodeVal(get1(node, "Time"));
get1(node, "AltitudeMeters", (alt) => {
- const a = parseFloat(nodeVal(alt));
- if (!isNaN(a)) {
+ const a = Number.parseFloat(nodeVal(alt));
+ if (!Number.isNaN(a)) {
ll.push(a);
}
});
return {
coordinates: ll,
time: time || null,
- heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,
+ heartRate: heartRate ? Number.parseFloat(nodeVal(heartRate)) : null,
extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),
};
}
@@ -504,17 +516,18 @@ function tcx(node) {
function fixColor(v, prefix) {
const properties = {};
- const colorProp = prefix == "stroke" || prefix === "fill" ? prefix : prefix + "-color";
+ const colorProp = prefix === "stroke" || prefix === "fill" ? prefix : `${prefix}-color`;
if (v[0] === "#") {
v = v.substring(1);
}
if (v.length === 6 || v.length === 3) {
- properties[colorProp] = "#" + v;
+ properties[colorProp] = `#${v}`;
}
else if (v.length === 8) {
- properties[prefix + "-opacity"] = parseInt(v.substring(0, 2), 16) / 255;
+ properties[`${prefix}-opacity`] =
+ Number.parseInt(v.substring(0, 2), 16) / 255;
properties[colorProp] =
- "#" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);
+ `#${v.substring(6, 8)}${v.substring(4, 6)}${v.substring(2, 4)}`;
}
return properties;
}
@@ -540,11 +553,11 @@ function extractIconHref(node) {
function extractIcon(node) {
return get(node, "IconStyle", (iconStyle) => {
return Object.assign(getColor(iconStyle, "icon"), numericProperty(iconStyle, "scale", "icon-scale"), numericProperty(iconStyle, "heading", "icon-heading"), get(iconStyle, "hotSpot", (hotspot) => {
- const left = parseFloat(hotspot.getAttribute("x") || "");
- const top = parseFloat(hotspot.getAttribute("y") || "");
+ const left = Number.parseFloat(hotspot.getAttribute("x") || "");
+ const top = Number.parseFloat(hotspot.getAttribute("y") || "");
const xunits = hotspot.getAttribute("xunits") || "";
const yunits = hotspot.getAttribute("yunits") || "";
- if (!isNaN(left) && !isNaN(top))
+ if (!Number.isNaN(left) && !Number.isNaN(top))
return {
"icon-offset": [left, top],
"icon-offset-units": [xunits, yunits],
@@ -578,71 +591,6 @@ function extractStyle(node) {
return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));
}
-const toNumber = (x) => Number(x);
-const typeConverters = {
- string: (x) => x,
- int: toNumber,
- uint: toNumber,
- short: toNumber,
- ushort: toNumber,
- float: toNumber,
- double: toNumber,
- bool: (x) => Boolean(x),
-};
-function extractExtendedData(node, schema) {
- return get(node, "ExtendedData", (extendedData, properties) => {
- for (const data of $(extendedData, "Data")) {
- properties[data.getAttribute("name") || ""] = nodeVal(get1(data, "value"));
- }
- for (const simpleData of $(extendedData, "SimpleData")) {
- const name = simpleData.getAttribute("name") || "";
- const typeConverter = schema[name] || typeConverters.string;
- properties[name] = typeConverter(nodeVal(simpleData));
- }
- return properties;
- });
-}
-function getMaybeHTMLDescription(node) {
- const descriptionNode = get1(node, "description");
- for (const c of Array.from(descriptionNode?.childNodes || [])) {
- if (c.nodeType === 4) {
- return {
- description: {
- "@type": "html",
- value: nodeVal(c),
- },
- };
- }
- }
- return {};
-}
-function extractTimeSpan(node) {
- return get(node, "TimeSpan", (timeSpan) => {
- return {
- timespan: {
- begin: nodeVal(get1(timeSpan, "begin")),
- end: nodeVal(get1(timeSpan, "end")),
- },
- };
- });
-}
-function extractTimeStamp(node) {
- return get(node, "TimeStamp", (timeStamp) => {
- return { timestamp: nodeVal(get1(timeStamp, "when")) };
- });
-}
-function extractCascadedStyle(node, styleMap) {
- return val1(node, "styleUrl", (styleUrl) => {
- styleUrl = normalizeId(styleUrl);
- if (styleMap[styleUrl]) {
- return Object.assign({ styleUrl }, styleMap[styleUrl]);
- }
- // For backward-compatibility. Should we still include
- // styleUrl even if it's not resolved?
- return { styleUrl };
- });
-}
-
const removeSpace = /\s*/g;
const trimSpace = /^\s*|\s*$/g;
const splitSpace = /\s+/;
@@ -653,8 +601,8 @@ function coord1(value) {
return value
.replace(removeSpace, "")
.split(",")
- .map(parseFloat)
- .filter((num) => !isNaN(num))
+ .map(Number.parseFloat)
+ .filter((num) => !Number.isNaN(num))
.slice(0, 3);
}
/**
@@ -675,7 +623,7 @@ function gxCoords(node) {
elems = $ns(node, "coord", "*");
}
const coordinates = elems.map((elem) => {
- return nodeVal(elem).split(" ").map(parseFloat);
+ return nodeVal(elem).split(" ").map(Number.parseFloat);
});
if (coordinates.length === 0) {
return null;
@@ -785,47 +733,92 @@ function getGeometry(node) {
};
}
-function geometryListToGeometry(geometries) {
- return geometries.length === 0
- ? null
- : geometries.length === 1
- ? geometries[0]
- : {
- type: "GeometryCollection",
- geometries,
- };
+const toNumber = (x) => Number(x);
+const typeConverters = {
+ string: (x) => x,
+ int: toNumber,
+ uint: toNumber,
+ short: toNumber,
+ ushort: toNumber,
+ float: toNumber,
+ double: toNumber,
+ bool: (x) => Boolean(x),
+};
+function extractExtendedData(node, schema) {
+ return get(node, "ExtendedData", (extendedData, properties) => {
+ for (const data of $(extendedData, "Data")) {
+ properties[data.getAttribute("name") || ""] = nodeVal(get1(data, "value"));
+ }
+ for (const simpleData of $(extendedData, "SimpleData")) {
+ const name = simpleData.getAttribute("name") || "";
+ const typeConverter = schema[name] || typeConverters.string;
+ properties[name] = typeConverter(nodeVal(simpleData));
+ }
+ return properties;
+ });
}
-function getPlacemark(node, styleMap, schema, options) {
- const { coordTimes, geometries } = getGeometry(node);
- const geometry = geometryListToGeometry(geometries);
- if (!geometry && options.skipNullGeometry) {
- return null;
- }
- const feature = {
- type: "Feature",
- geometry,
- properties: Object.assign(getMulti(node, [
- "name",
- "address",
- "visibility",
- "open",
- "phoneNumber",
- "description",
- ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node, schema), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length
- ? {
- coordinateProperties: {
- times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,
+function getMaybeHTMLDescription(node) {
+ const descriptionNode = get1(node, "description");
+ for (const c of Array.from(descriptionNode?.childNodes || [])) {
+ if (c.nodeType === 4) {
+ return {
+ description: {
+ "@type": "html",
+ value: nodeVal(c),
},
- }
- : {}),
- };
- if (feature.properties?.visibility !== undefined) {
- feature.properties.visibility = feature.properties.visibility !== "0";
+ };
+ }
}
- const id = node.getAttribute("id");
- if (id !== null && id !== "")
- feature.id = id;
- return feature;
+ return {};
+}
+function extractTimeSpan(node) {
+ return get(node, "TimeSpan", (timeSpan) => {
+ return {
+ timespan: {
+ begin: nodeVal(get1(timeSpan, "begin")),
+ end: nodeVal(get1(timeSpan, "end")),
+ },
+ };
+ });
+}
+function extractTimeStamp(node) {
+ return get(node, "TimeStamp", (timeStamp) => {
+ return { timestamp: nodeVal(get1(timeStamp, "when")) };
+ });
+}
+function extractCascadedStyle(node, styleMap) {
+ return val1(node, "styleUrl", (styleUrl) => {
+ styleUrl = normalizeId(styleUrl);
+ if (styleMap[styleUrl]) {
+ return Object.assign({ styleUrl }, styleMap[styleUrl]);
+ }
+ // For backward-compatibility. Should we still include
+ // styleUrl even if it's not resolved?
+ return { styleUrl };
+ });
+}
+var AltitudeMode;
+(function (AltitudeMode) {
+ AltitudeMode["ABSOLUTE"] = "absolute";
+ AltitudeMode["RELATIVE_TO_GROUND"] = "relativeToGround";
+ AltitudeMode["CLAMP_TO_GROUND"] = "clampToGround";
+ AltitudeMode["CLAMP_TO_SEAFLOOR"] = "clampToSeaFloor";
+ AltitudeMode["RELATIVE_TO_SEAFLOOR"] = "relativeToSeaFloor";
+})(AltitudeMode || (AltitudeMode = {}));
+function processAltitudeMode(mode) {
+ switch (mode?.textContent) {
+ case AltitudeMode.ABSOLUTE:
+ return AltitudeMode.ABSOLUTE;
+ case AltitudeMode.CLAMP_TO_GROUND:
+ return AltitudeMode.CLAMP_TO_GROUND;
+ case AltitudeMode.CLAMP_TO_SEAFLOOR:
+ return AltitudeMode.CLAMP_TO_SEAFLOOR;
+ case AltitudeMode.RELATIVE_TO_GROUND:
+ return AltitudeMode.RELATIVE_TO_GROUND;
+ case AltitudeMode.RELATIVE_TO_SEAFLOOR:
+ return AltitudeMode.RELATIVE_TO_SEAFLOOR;
+ }
+ return null;
}
function getGroundOverlayBox(node) {
@@ -848,7 +841,7 @@ function rotateBox(bbox, coordinates, rotation) {
coordinates[0].map((coordinate) => {
const dy = coordinate[1] - center[1];
const dx = coordinate[0] - center[0];
- const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));
+ const distance = Math.sqrt(dy ** 2 + dx ** 2);
const angle = Math.atan2(dy, dx) + rotation * DEGREES_TO_RADIANS;
return [
center[0] + Math.cos(angle) * distance,
@@ -872,10 +865,10 @@ function getLatLonBox(node) {
const bbox = [west, south, east, north];
let coordinates = [
[
- [west, north],
- [east, north],
- [east, south],
- [west, south],
+ [west, north], // top left
+ [east, north], // top right
+ [east, south], // top right
+ [west, south], // bottom left
[west, north], // top left (again)
],
];
@@ -928,6 +921,178 @@ function getGroundOverlay(node, styleMap, schema, options) {
return feature;
}
+function getNetworkLinkRegion(node) {
+ const region = get1(node, "Region");
+ if (region) {
+ return {
+ coordinateBox: getLatLonAltBox(region),
+ lod: getLod(node),
+ };
+ }
+ return null;
+}
+function getLod(node) {
+ const lod = get1(node, "Lod");
+ if (lod) {
+ return [
+ num1(lod, "minLodPixels") ?? -1,
+ num1(lod, "maxLodPixels") ?? -1,
+ num1(lod, "minFadeExtent") ?? null,
+ num1(lod, "maxFadeExtent") ?? null,
+ ];
+ }
+ return null;
+}
+function getLatLonAltBox(node) {
+ const latLonAltBox = get1(node, "LatLonAltBox");
+ if (latLonAltBox) {
+ const north = num1(latLonAltBox, "north");
+ const west = num1(latLonAltBox, "west");
+ const east = num1(latLonAltBox, "east");
+ const south = num1(latLonAltBox, "south");
+ const altitudeMode = processAltitudeMode(get1(latLonAltBox, "altitudeMode") ||
+ get1(latLonAltBox, "gx:altitudeMode"));
+ if (altitudeMode) {
+ console.debug("Encountered an unsupported feature of KML for togeojson: please contact developers for support of altitude mode.");
+ }
+ if (typeof north === "number" &&
+ typeof south === "number" &&
+ typeof west === "number" &&
+ typeof east === "number") {
+ const bbox = [west, south, east, north];
+ const coordinates = [
+ [
+ [west, north], // top left
+ [east, north], // top right
+ [east, south], // top right
+ [west, south], // bottom left
+ [west, north], // top left (again)
+ ],
+ ];
+ return {
+ bbox,
+ geometry: {
+ type: "Polygon",
+ coordinates,
+ },
+ };
+ }
+ }
+ return null;
+}
+function getLinkObject(node) {
+ /*
+
+
+ ...
+ onChange
+
+ 4
+ never
+
+ 4
+ 1
+ BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]
+
+ ...
+
+ */
+ const linkObj = get1(node, "Link");
+ if (linkObj) {
+ return getMulti(linkObj, [
+ "href",
+ "refreshMode",
+ "refreshInterval",
+ "viewRefreshMode",
+ "viewRefreshTime",
+ "viewBoundScale",
+ "viewFormat",
+ "httpQuery",
+ ]);
+ }
+ return {};
+}
+function getNetworkLink(node, styleMap, schema, options) {
+ const box = getNetworkLinkRegion(node);
+ const geometry = box?.coordinateBox?.geometry || null;
+ if (!geometry && options.skipNullGeometry) {
+ return null;
+ }
+ const feature = {
+ type: "Feature",
+ geometry,
+ properties: Object.assign(
+ /**
+ * Related to
+ * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46
+ */
+ { "@geometry-type": "networklink" }, getMulti(node, [
+ "name",
+ "address",
+ "visibility",
+ "open",
+ "phoneNumber",
+ "styleUrl",
+ "refreshVisibility",
+ "flyToView",
+ "description",
+ ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node, schema), extractTimeSpan(node), extractTimeStamp(node), getLinkObject(node), box?.lod ? { lod: box.lod } : {}),
+ };
+ if (box?.coordinateBox?.bbox) {
+ feature.bbox = box.coordinateBox.bbox;
+ }
+ if (feature.properties?.visibility !== undefined) {
+ feature.properties.visibility = feature.properties.visibility !== "0";
+ }
+ const id = node.getAttribute("id");
+ if (id !== null && id !== "")
+ feature.id = id;
+ return feature;
+}
+
+function geometryListToGeometry(geometries) {
+ return geometries.length === 0
+ ? null
+ : geometries.length === 1
+ ? geometries[0]
+ : {
+ type: "GeometryCollection",
+ geometries,
+ };
+}
+function getPlacemark(node, styleMap, schema, options) {
+ const { coordTimes, geometries } = getGeometry(node);
+ const geometry = geometryListToGeometry(geometries);
+ if (!geometry && options.skipNullGeometry) {
+ return null;
+ }
+ const feature = {
+ type: "Feature",
+ geometry,
+ properties: Object.assign(getMulti(node, [
+ "name",
+ "address",
+ "visibility",
+ "open",
+ "phoneNumber",
+ "description",
+ ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node, schema), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length
+ ? {
+ coordinateProperties: {
+ times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,
+ },
+ }
+ : {}),
+ };
+ if (feature.properties?.visibility !== undefined) {
+ feature.properties.visibility = feature.properties.visibility !== "0";
+ }
+ const id = node.getAttribute("id");
+ if (id !== null && id !== "")
+ feature.id = id;
+ return feature;
+}
+
function getStyleId(style) {
let id = style.getAttribute("id");
const parentNode = style.parentNode;
@@ -958,8 +1123,7 @@ function buildSchema(node) {
const schema = {};
for (const field of $(node, "SimpleField")) {
schema[field.getAttribute("name") || ""] =
- typeConverters[field.getAttribute("type") || ""] ||
- typeConverters["string"];
+ typeConverters[field.getAttribute("type") || ""] || typeConverters.string;
}
return schema;
}
@@ -1028,8 +1192,9 @@ function getFolder(node) {
function kmlWithFolders(node, options = {
skipNullGeometry: false,
}) {
- const styleMap = buildStyleMap(node);
- const schema = buildSchema(node);
+ const n = node;
+ const styleMap = buildStyleMap(n);
+ const schema = buildSchema(n);
const tree = { type: "root", children: [] };
function traverse(node, pointer, options) {
if (isElement(node)) {
@@ -1054,6 +1219,13 @@ function kmlWithFolders(node, options = {
pointer = folder;
break;
}
+ case "NetworkLink": {
+ const networkLink = getNetworkLink(node, styleMap, schema, options);
+ if (networkLink) {
+ pointer.children.push(networkLink);
+ }
+ break;
+ }
}
}
if (node.childNodes) {
@@ -1062,7 +1234,7 @@ function kmlWithFolders(node, options = {
}
}
}
- traverse(node, tree, options);
+ traverse(n, tree, options);
return tree;
}
/**
@@ -1073,14 +1245,15 @@ function kmlWithFolders(node, options = {
function* kmlGen(node, options = {
skipNullGeometry: false,
}) {
- const styleMap = buildStyleMap(node);
- const schema = buildSchema(node);
- for (const placemark of $(node, "Placemark")) {
+ const n = node;
+ const styleMap = buildStyleMap(n);
+ const schema = buildSchema(n);
+ for (const placemark of $(n, "Placemark")) {
const feature = getPlacemark(placemark, styleMap, schema, options);
if (feature)
yield feature;
}
- for (const groundOverlay of $(node, "GroundOverlay")) {
+ for (const groundOverlay of $(n, "GroundOverlay")) {
const feature = getGroundOverlay(groundOverlay, styleMap, schema, options);
if (feature)
yield feature;
diff --git a/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map b/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map
index 83715c64..4ea2c768 100644
--- a/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map
+++ b/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map
@@ -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;\nexport type F = Feature;\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 | 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 | 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 | 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 {\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 {\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 = {\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 | 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 = {\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 | 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 = {\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;\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;\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 {\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 {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node, options)),\n };\n}\n"],"names":["coordPair","getPoints"],"mappings":"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"}
\ No newline at end of file
+{"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;\nexport type F = Feature;\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 | 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 | 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 | 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 {\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 {\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 = {\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 | 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 = {\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 \n \n ... \n onChange\n \n 4 \n never\n \n 4 \n 1 \n BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]\n \n ... \n \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 | 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 = {\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 | 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 = {\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;\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;\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 {\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 {\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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"}
\ No newline at end of file