【问题标题】:python's simplekml doesn't output "Alias" tagpython 的 simplekml 不输出“别名”标签
【发布时间】:2021-08-17 07:12:53
【问题描述】:

我正在使用 simplekml 1.3.5(它是一个用于生成 KML 的 Python 库)编写一个用于气候数据可视化的简单脚本。

import simplekml

kml_filename ='sample.kml'

kml = simplekml.Kml(open=1)
model = kml.newmodel(name="test_model")
model.altitudemode = simplekml.AltitudeMode.absolute
model.location.altitude = 500
model.location.latitude = 36.939055000000025
model.location.longitude = 140.037
model.orientation.heading = 90
model.orientation.tilt = 0
model.orientation.roll = 0
model.scale.x = 1000
model.scale.y = 1000
model.scale.z = 1000
model.link.href = "images/canvas.dae"
model.resourcemap.newalias(targethref="instance.png", sourcehref="mapping.png") 
kml.save(kml_filename)

此代码生成以下 KML。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="1672">
        <open>1</open>
        <Placemark id="1674">
            <name>test_model</name>
            <Model id="1673">
                <altitudeMode>absolute</altitudeMode>
                <Location>
                    <longitude>140.037</longitude>
                    <latitude>36.939055000000025</latitude>
                    <altitude>500</altitude>
                </Location>
                <Orientation>
                    <heading>90</heading>
                    <tilt>0</tilt>
                    <roll>0</roll>
                </Orientation>
                <Scale>
                    <x>1000</x>
                    <y>1000</y>
                    <z>1000</z>
                </Scale>
                <Link id="1678">
                    <href>images/canvas.dae</href>
                </Link>
                <ResourceMap>
                    <targetHref>instance.png</targetHref>
                    <sourceHref>mapping.png</sourceHref>
                </ResourceMap>
            </Model>
        </Placemark>
    </Document>
</kml>

看起来几乎不错。但是 Alias 标签没有在 ResourceMap 标签中输出。我期望以下输出。

                <ResourceMap>
                    <Alias>
                    <targetHref>instance.png</targetHref>
                    <sourceHref>mapping.png</sourceHref>
                    </Alias>
                </ResourceMap>

谷歌地球没有显示没有这个标签的纹理。 (并且手动添加标签,可以显示出来。)

如何使用 simplekml 在 KML 中输出标签?

【问题讨论】:

    标签: python-3.x google-earth simplekml


    【解决方案1】:

    我认为这是库设计策略上的 ResourceMap 类问题。

    import simplekml
    
    rc = ResourceMap()
    rc.newalias(targethref="foo", sourcehref="bar")
    print(rc)
    

    此代码输出如下。

    <targetHref>foo</targetHref><sourceHref>bar</sourceHref>
    

    我通过子类化了一次,但外部 Model 类检查类型并拒绝子类。 所以我解决了对 Alias 类而不是 ResourceMap 的临时破解。

    class AliasModded(simplekml.Alias):
        def __init__(self, targethref=None, sourcehref=None):
            super(AliasModded, self).__init__(targethref, sourcehref)
    
        def __str__(self):
            return "<Alias>{}</Alias>".format(super(AliasModded, self).__str__())
    

    并使用它。

        tp_model.resourcemap.aliases.append(AliasModded(targethref="instance.png", sourcehref="mapping.png"))
    

    此代码按预期输出。 谢谢。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2021-07-23
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多