我可以将图像嵌入到 pykml 生成的 KML 数据中吗?

Can I embed an image into KML data generated by pykml?

我有一个网络服务器,其中包含一些用于 KML 点的图标。

目前,每个 KML 点都将图标和标签引用到网络服务器中图像的位置。因此,在 Google Earth 中查看数据时,这些点具有来自网络服务器的自定义图标。

理想情况下,我想导出 KML 数据,这样任何人都可以在 Google 地球中查看它,而无需访问网络服务器。

有没有办法使用 pykml 将图像嵌入到 KML 文件中?

如果想共享 KML 文件中的自定义图像或图标,而不必将这些图像托管在可公开访问的 Web 服务器上,则需要将 KML 和图像打包到 KMZ 文件中。

您可以使用 pykml (or simplekml) 创建一个包含 KML 和引用图标的独立 KMZ 文件。

from zipfile import ZipFile
from pykml.factory import KML_ElementMaker as KML
from lxml import etree

kml = KML.Placemark(
   KML.name("Hello World!"),
   KML.Style(
       KML.IconStyle(
           KML.scale(1.0),
           KML.Icon(
                KML.href("marker.png")
           )
       )
   ),
   KML.Point(
     KML.coordinates("-64.5253,18.4607")
   )
)

# serialize KML to a string
kml = etree.tostring(kml, pretty_print=True, xml_declaration=True, encoding='UTF-8')

# create a ZipFile object
with ZipFile('IconStyle.kmz', 'w') as zipObj:
    zipObj.writestr('doc.kml', kml)   # Add doc.kml entry 
    zipObj.write('marker.png')        # Add icon to the zip