我想找到kml文件中的所有地标:
from lxml import etree
doc = etree.parse(filename)
for elem in doc.findall('<Placemark>'):
print(elem.find("<Placemark>").text)
这不起作用,即它找不到任何东西,我认为因为每个地标都是唯一的,因为每个地标都有自己的 id,例如:
<Placemark id="ID_09795">
<Placemark id="ID_15356">
<Placemark id="ID_64532">
我该怎么做?
编辑:根据@ScottHunter 评论更改代码:
placemark_list = doc.findall("Placemark")
print ("length:" + str(len(placemark_list)))
for placemark in placemark_list:
print(placemark.text)
长度为0
在没有看到完整文件的情况下很难判断,但尝试这样的事情
placemark_list = doc.xpath("//*[local-name()='Placemark']")
print(len(placemark_list))
看看它是否有效。
您可以使用 fastkml 来做到这一点,详细信息请参见 answer 或 fastkml 文档 长话短说:
from fastkml.utils import find_all
from fastkml import KML
from fastkml import Placemark
k = KML.parse("docs/Document-clean.kml")
placemarks = find_all(k, of_type=Placemark)
for p in placemarks:
print(p.geometry)
print(p.name)