【问题标题】:Read kml file with multiple placemarks in pykml在pykml中读取具有多个地标的kml文件
【发布时间】:2015-10-24 17:34:25
【问题描述】:

pykml 中,我可以使用以下代码读取文件中的第一个地标:

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

如何将同一文件中的多个地标读入python?

【问题讨论】:

  • 第一行不是必须的,with语句已经创建了一个打开的文件。
  • 感谢您指出这一点,@mwil.me!

标签: python kml pykml


【解决方案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)

【讨论】:

    【解决方案2】:

    这行得通:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      相关资源
      最近更新 更多