Проверяйте и анализируйте KML с помощью pyKML

примерно так: Извлечение координат из файла KML BatchGeo с помощью Python

Но я хочу знать, как проверять объект данных, а также как его перебирать и анализировать все Placemark, чтобы получить coordinates.

Ниже показано, как выглядит KML, и есть несколько тегов <Placemark>.

Пример данных KML:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd">
<Document id="...">
  <name>...</name>
  <Snippet></Snippet>
  <Folder id="...">
    <name>...</name>
    <Snippet></Snippet>
    <Placemark id="...">
      <name>....</name>
      <Snippet></Snippet>
      <description>...</description>
      <styleUrl>....</styleUrl>
      <Point>
        <altitudeMode>...</altitudeMode>
        <coordinates> 103.xxx,1.xxx,0</coordinates>
      </Point>
    </Placemark>
    <Placemark id="...">
      ...
    </Placemark>
  </Folder>
  <Style id="...">
    <IconStyle>
      <Icon><href>...</href></Icon>
      <scale>0.250000</scale>
    </IconStyle>
    <LabelStyle>
      <color>00000000</color>
      <scale>0.000000</scale>
    </LabelStyle>
    <PolyStyle>
      <color>ff000000</color>
      <outline>0</outline>
    </PolyStyle>
  </Style>
</Document>
</kml>

Вот что у меня есть, extract.py:

from pykml import parser
from os import path

kml_file = path.join('list.kml')

with open(kml_file) as f:
  doc = parser.parse(f).getroot()

print doc.Document.Folder.Placemark.Point.coordinates

Это печатает первый coordinates.

Общий вопрос о Python:
Как я могу проверить doc, узнать его тип и распечатать содержащиеся в нем значения?

Вопрос задачи: как перебрать все Placemark и получить coordinates?

Пробовали следующее, но ничего не печатается.

for e in doc.Document.Folder.iter('Placemark'):
   print e

person resting    schedule 04.04.2017    source источник


Ответы (1)


Я нашел ответы.

Для разбора Placemark это код

for e in doc.Document.Folder.Placemark:
  coor = e.Point.coordinates.text.split(',')

Чтобы найти тип объекта, используйте type(object).

Не уверен, почему findall() и iter() не работали:

doc.Document.Folder.findall('Placemark')

for e in doc.Document.Folder.iter('Placemark'):

Оба вернулись пустыми.

Обновление: отсутствовало пространство имен для работы findall.

doc.findall('.//{http://www.opengis.net/kml/2.2}Placemark')
person resting    schedule 04.04.2017