3

pykmlでは、次のコードを使用してファイルの最初の目印を読み取ることができます。

 with open(filename) as f:
     pm = parser.parse(f).getroot().Document.Folder
     print "got :"
     print pm.Placemark.LineString.coordinates

同じファイル内の複数の目印を Python に読み込むにはどうすればよいですか?

4

2 に答える 2

8

これは機能します:

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
于 2015-10-24T17:45:38.260 に答える
8

編集:すべての目印が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)
于 2016-02-04T07:47:06.893 に答える