pykmlでは、次のコードを使用してファイルの最初の目印を読み取ることができます。
with open(filename) as f:
pm = parser.parse(f).getroot().Document.Folder
print "got :"
print pm.Placemark.LineString.coordinates
同じファイル内の複数の目印を Python に読み込むにはどうすればよいですか?
これは機能します:
with open(filename) as f:
doc = parser.parse(f).getroot().Document.Folder
for pm in doc.iterchildren():
if hasattr(pm, 'LineString'):
print pm.LineString.coordinates
編集:すべての目印が1つのフォルダにあると仮定すると、さらに簡単な解決策:
from pykml import parser
with open(filename) as f:
folder = parser.parse(f).getroot().Document.Folder
for pm in folder.Placemark:
print(pm.name)
基になる xml ライブラリ lxml の機能を使用して目印要素を検索することもできます。
from pykml import parser
from pykml.factory import nsmap
namespace = {"ns": nsmap[None]}
with open(filename) as f:
root = parser.parse(f).getroot()
pms = root.findall(".//ns:Placemark", namespaces=namespace)
for pm in pms:
print(pm.name)
Linestring の子を持つ目印を具体的に検索する場合は、xpath を使用してより高度な検索を行うこともできます。
pms = root.xpath(".//ns:Placemark[.//ns:LineString]", namespaces=namespace)