Source code for plaso.output.kml

"""An output module that writes event with geography data to a KML XML file.

The Keyhole Markup Language (KML) is an XML notation for expressing geographic
annotation and visualization within Internet-based, two-dimensional maps and three-
dimensional Earth browsers.
"""

import codecs

from xml.etree import ElementTree

from plaso.output import manager
from plaso.output import rawpy


[docs] class KMLOutputModule(rawpy.NativePythonOutputModule): """Output module for a Keyhole Markup Language (KML) XML file.""" NAME = "kml" DESCRIPTION = "Saves events with geography data into a KML format."
[docs] def WriteFieldValues(self, output_mediator, field_values): """Writes field values to the output. Args: output_mediator (OutputMediator): mediates interactions between output modules and other components, such as storage and dfVFS. field_values (dict[str, str]): output field values per name. """ latitude = field_values.get("latitude") longitude = field_values.get("longitude") if None in (latitude, longitude): return # TODO: make description_text KML values. description_text = self._GetString(field_values) placemark_xml_element = ElementTree.Element("Placemark") name_xml_element = ElementTree.SubElement(placemark_xml_element, "name") name_xml_element.text = field_values["_event_identifier"] description_xml_element = ElementTree.SubElement( placemark_xml_element, "description" ) description_xml_element.text = f"{description_text:s}\n" point_xml_element = ElementTree.SubElement(placemark_xml_element, "Point") coordinates_xml_element = ElementTree.SubElement( point_xml_element, "coordinates" ) coordinates_xml_element.text = f"{longitude!s},{latitude!s}" # Note that ElementTree.tostring() will appropriately escape the input data. output_text = ElementTree.tostring(placemark_xml_element) output_text = codecs.decode(output_text, output_mediator.encoding) self.WriteText(output_text)
[docs] def WriteFooter(self): """Writes the footer to the output.""" self.WriteText("</Document></kml>")
[docs] def WriteHeader(self, output_mediator): """Writes the header to the output. Args: output_mediator (OutputMediator): mediates interactions between output modules and other components, such as storage and dfVFS. """ self.WriteText( ( f'<?xml version="1.0" encoding="{output_mediator.encoding:s}"?>' f'<kml xmlns="http://www.opengis.net/kml/2.2"><Document>' ) )
manager.OutputManager.RegisterOutput(KMLOutputModule)