{"version":3,"sources":["jsdelivr-header.js","/npm/gtran-kml@1.4.5/src/index.js"],"names":[],"mappings":"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","file":"/npm/gtran-kml@1.4.5/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/gtran-kml@1.4.5/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const util = require(\"util\");\nconst fs = require(\"fs\");\nconst tokml = require(\"@maphubs/tokml\");\nconst et = require(\"elementtree\");\nconst md5 = require(\"./md5\");\nconst symbol = require(\"./symbol.js\");\nconst prettifyXml = require(\"prettify-xml\");\nconst os = require(\"os\");\n\nconst readFileAsync = util.promisify(fs.readFile);\nconst writeFileAsync = util.promisify(fs.writeFile);\n\n// just to provide backwards compatibility\nexports.setPromiseLib = () => {};\n\nexports.toGeoJson = async (fileName, options = {}) => {\n  if (!fs.statSync(fileName)) {\n    throw new Error(\"Give KML file does not exist.\");\n  }\n\n  const encoding = options.encoding || \"utf-8\";\n  const data = await readFileAsync(fileName, encoding);\n  const etree = et.parse(data),\n    geojson = {\n      type: \"FeatureCollection\",\n      features: [],\n    };\n\n  const schemas = findSchemas(etree);\n  const placemarks = etree.findall(\".//Placemark\");\n  placemarks.forEach(function (placemark) {\n    geojson.features.push({\n      type: \"feature\",\n      geometry: getGeometry(placemark),\n      properties: getProperties(placemark, schemas),\n    });\n  });\n\n  return geojson;\n};\n\nexports.fromGeoJson = async (geojson, fileName, options = {}) => {\n  geojson = JSON.parse(JSON.stringify(geojson));\n\n  const symbols = {};\n  const featureStyleKey = options.featureStyleKey || \"gtran-kml-style-id\";\n\n  geojson.features.forEach((feature) => {\n    const symbol = {\n      geomType: feature.geometry.type,\n      symbol:\n        typeof options.symbol === \"function\"\n          ? options.symbol(feature)\n          : options.symbol,\n    };\n    const id = md5(JSON.stringify(symbol));\n\n    if (!symbols[id]) {\n      symbols[id] = symbol;\n    }\n\n    feature.properties[featureStyleKey] = id;\n  });\n\n  let kmlContent = tokml(geojson, {\n    name: options.name || \"name\",\n    documentName: options.documentName || \"My KML\",\n    documentDescription:\n      options.documentDescription || \"Converted from GeoJson by gtran-kml\",\n  });\n\n  if (options.symbol) {\n    kmlContent = symbol.addTo(kmlContent, symbols, featureStyleKey);\n  }\n\n  if (options.pretty) {\n    kmlContent = prettifyXml(kmlContent, { indent: 2, newline: os.EOL });\n  }\n\n  if (fileName) {\n    let fileNameWithExt = fileName;\n    if (fileNameWithExt.indexOf(\".kml\") === -1) {\n      fileNameWithExt += \".kml\";\n    }\n\n    await writeFileAsync(fileNameWithExt, kmlContent);\n    return fileNameWithExt;\n  } else {\n    return {\n      data: kmlContent,\n      format: \"kml\",\n    };\n  }\n};\n\nfunction getGeometry(placemark) {\n  var geomTag = placemark.find(\"./Point\");\n  if (geomTag) {\n    return createGeometry(\"Point\", geomTag.findtext(\"./coordinates\"));\n  }\n\n  geomTag = placemark.find(\"./LineString\");\n  if (geomTag) {\n    return createGeometry(\"LineString\", geomTag.findtext(\"./coordinates\"));\n  }\n\n  geomTag = placemark.find(\"./Polygon\");\n  if (geomTag) {\n    var outRingCoors = geomTag.findtext(\n      \"./outerBoundaryIs/LinearRing/coordinates\"\n    );\n\n    var inRingsCoors = [];\n    geomTag\n      .findall(\"./innerBoundaryIs/LinearRing/coordinates\")\n      .forEach(function (node) {\n        inRingsCoors.push(node.text);\n      });\n\n    return createGeometry(\"Polygon\", outRingCoors, inRingsCoors);\n  }\n}\n\nfunction createGeometry(geomType, outerCoorStr, innerCoorStr) {\n  return {\n    type: geomType,\n    coordinates: getCoordinates(outerCoorStr, innerCoorStr),\n  };\n}\n\nfunction getCoordinates(outCoorsdStr, inCoordsStrs) {\n  var pointStrs = outCoorsdStr.trim().split(/\\s+/);\n\n  if (pointStrs.length == 1) {\n    var coors = pointStrs[0].split(\",\");\n    return [parseFloat(coors[0]), parseFloat(coors[1])];\n  } else {\n    var outPoints = [];\n    pointStrs.forEach(function (pointStr) {\n      var coors = pointStr.split(\",\");\n      outPoints.push([parseFloat(coors[0]), parseFloat(coors[1])]);\n    });\n\n    if (!inCoordsStrs) {\n      return outPoints;\n    }\n\n    var allPoints = [outPoints];\n    inCoordsStrs.forEach(function (coordsStr) {\n      var inPoints = [],\n        pointStrs = coordsStr.split(\" \");\n\n      pointStrs.forEach(function (coordsStr) {\n        var coors = coordsStr.split(\",\");\n        inPoints.push([parseFloat(coors[0]), parseFloat(coors[1])]);\n      });\n\n      allPoints.push(inPoints);\n    });\n\n    return allPoints;\n  }\n}\n\nfunction findSchemas(rootnode) {\n  var schemaNodes = rootnode.findall(\"./Document/Schema\");\n\n  // considering if we have more than one schema\n  if (schemaNodes.length > 0) {\n    var schemas = {};\n    schemaNodes.forEach(function (schemaNode) {\n      var schema = {};\n\n      // get the type of field\n      schemaNode.findall(\"./SimpleField\").forEach(function (fieldNode) {\n        schema[fieldNode.attrib.name] = fieldNode.attrib.type;\n      });\n\n      schemas[schemaNode.attrib.id] = schema;\n    });\n\n    return schemas;\n  }\n}\n\nfunction getProperties(placemark, schemas) {\n  var properties = {};\n\n  // name\n  var name = placemark.findtext(\"./name\");\n  if (name) {\n    properties.name = name;\n  }\n\n  // description\n  var description = placemark.findtext(\"./description\");\n  if (description) {\n    properties.description = description;\n  }\n\n  // schema data\n  if (schemas) {\n    var schemaDatasets = placemark.findall(\"./ExtendedData/SchemaData\");\n    schemaDatasets.forEach(function (schemaDataset) {\n      var schema = schemas[schemaDataset.attrib.schemaUrl.replace(\"#\", \"\")],\n        fields = schemaDataset.findall(\"./SimpleData\");\n      fields.forEach(function (field) {\n        properties[field.attrib.name] = convert(\n          field.text,\n          schema[field.attrib.name]\n        );\n      });\n    });\n  }\n\n  // simple data\n  var fields = placemark.findall(\"./ExtendedData/Data\");\n  fields.forEach(function (field) {\n    properties[field.attrib.name] = field.findtext(\"./value\");\n  });\n\n  return properties;\n}\n\nfunction convert(value, toType) {\n  switch (toType) {\n    case \"int\":\n    case \"uint\":\n    case \"short\":\n    case \"ushort\":\n      return parseInt(value);\n    case \"float\":\n    case \"double\":\n      return parseFloat(value);\n    case \"bool\":\n      return value.toLowerCase() === \"true\";\n    default:\n      return value;\n  }\n}\n"]}