Read kml file with multiple placemarks in pykml

后端 未结 2 1160
面向向阳花
面向向阳花 2021-01-14 04:54

In pykml, I can read the first placemark in a file using the following code:

 with open(filename) as f:
     pm = parser.parse(f).getroot().Document.Folder
          


        
相关标签:
2条回答
  • 2021-01-14 05:33

    Edit: An even easier solution, assuming all placemarks are in one folder:

    from pykml import parser
    
    with open(filename) as f:
      folder = parser.parse(f).getroot().Document.Folder
    
    for pm in folder.Placemark:
      print(pm.name)
    

    You can also use features of the underlying xml library lxml to search for placemark elements.

    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)
    

    If you specifically search for placemarks that have a Linestring child, you can also use xpath for more sophisticated searches.

    pms = root.xpath(".//ns:Placemark[.//ns:LineString]", namespaces=namespace)
    
    0 讨论(0)
  • 2021-01-14 05:44

    This works:

    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
    
    0 讨论(0)
提交回复
热议问题