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

问题描述 投票:0回答:1

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

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

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

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

python kml google-earth pykml
1个回答
3
投票

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

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

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

更新:

Marc Compere 在下面的评论中补充说,simplekml 库也可用于创建 KMZ 文件。事实上,如果在 icon href 中指定本地文件,那么当调用 savekmz() 方法时,它会自动添加到创建的 KMZ 文件中。

在 simplekml 中创建 KMZ 文件的示例。

import simplekml

kml = simplekml.Kml()
pnt = kml.newpoint(name='Hello World!', coords=[(-64.5253, 18.4607)])
pnt.style.iconstyle.icon.href = 'marker.png'
kml.savekmz("test.kmz")
© www.soinside.com 2019 - 2024. All rights reserved.