python 的 simplekml 不输出 "Alias" 标签
python's simplekml doesn't output "Alias" tag
我正在使用 simplekml 1.3.5(它是一个 Python 用于生成 KML 的库)编写一个用于气候数据可视化的简单脚本。
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>
google地球不显示没有这个标签的纹理。
(并手动添加标签,可以显示。)
如何使用 simplekml 在 KML 中输出标签?
我认为这是关于库设计策略的 ResourceMap class 问题。
import simplekml
rc = ResourceMap()
rc.newalias(targethref="foo", sourcehref="bar")
print(rc)
此代码输出如下。
<targetHref>foo</targetHref><sourceHref>bar</sourceHref>
我通过 subclassing 破解了一次,但是外部 Model class 检查类型并拒绝 subclass。
所以我解决了一个临时黑客 Alias class 而不是 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"))
此代码按预期输出。
谢谢
我正在使用 simplekml 1.3.5(它是一个 Python 用于生成 KML 的库)编写一个用于气候数据可视化的简单脚本。
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>
google地球不显示没有这个标签的纹理。 (并手动添加标签,可以显示。)
如何使用 simplekml 在 KML 中输出标签?
我认为这是关于库设计策略的 ResourceMap class 问题。
import simplekml
rc = ResourceMap()
rc.newalias(targethref="foo", sourcehref="bar")
print(rc)
此代码输出如下。
<targetHref>foo</targetHref><sourceHref>bar</sourceHref>
我通过 subclassing 破解了一次,但是外部 Model class 检查类型并拒绝 subclass。 所以我解决了一个临时黑客 Alias class 而不是 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"))
此代码按预期输出。 谢谢