首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python的simplekml不输出"Alias“标记

python的simplekml不输出"Alias“标记
EN

Stack Overflow用户
提问于 2021-08-17 07:12:53
回答 1查看 71关注 0票数 0

我正在使用simplekml1.3.5编写一个简单的脚本(这是一个用于生成KML的Python liblary ),用于气候数据可视化。

代码语言:javascript
复制
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生成。

代码语言:javascript
复制
<?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>

看上去差不多不错。但是别名标签没有输出在ResourceMap标签中。我期待着接下来的结果。

代码语言:javascript
复制
                <ResourceMap>
                    <Alias>
                    <targetHref>instance.png</targetHref>
                    <sourceHref>mapping.png</sourceHref>
                    </Alias>
                </ResourceMap>

谷歌地球在没有这个标签的情况下不会显示纹理。(并且手动添加标记,可以显示它。)

如何使用simplekml输出KML中的标记?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 03:53:28

我认为这是一个关于库的设计策略的ResourceMap类问题。

代码语言:javascript
复制
import simplekml

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

此代码输出如下。

代码语言:javascript
复制
<targetHref>foo</targetHref><sourceHref>bar</sourceHref>

我曾通过子类攻击过一次,但外部Model类检查类型并拒绝子类。因此,我专门对Alias类而不是ResourceMap进行了解析。

代码语言:javascript
复制
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__())

用这个。

代码语言:javascript
复制
    tp_model.resourcemap.aliases.append(AliasModded(targethref="instance.png", sourcehref="mapping.png"))

此代码输出与预期相同。谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68813071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档