Read kml file with multiple placemarks in pykml

后端 未结 2 1162
面向向阳花
面向向阳花 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条回答
  •  慢半拍i
    慢半拍i (楼主)
    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)
    

提交回复
热议问题