首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyKML检查和分析KML

用pyKML检查和分析KML
EN

Stack Overflow用户
提问于 2017-04-04 05:53:54
回答 1查看 11.9K关注 0票数 9

类似于此:Extract Coordinates from KML BatchGeo File with Python

但是我想知道如何检查数据对象,以及如何迭代它,并解析所有的Placemark以获得coordinates

下面是KML的样子,有多个<Placemark>标记。

样本KML数据

代码语言:javascript
复制
<?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

代码语言:javascript
复制
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

已试过以下内容,但没有打印任何内容。

代码语言:javascript
复制
for e in doc.Document.Folder.iter('Placemark'):
   print e
EN

回答 1

Stack Overflow用户

发布于 2017-04-04 07:52:20

我找到答案了。

要解析Placemark,以下是代码

代码语言:javascript
复制
for e in doc.Document.Folder.Placemark:
  coor = e.Point.coordinates.text.split(',')

若要查找对象类型,请使用type(object)

但不知道为什么findall()iter()不起作用:

代码语言:javascript
复制
doc.Document.Folder.findall('Placemark')

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

两人都空着回来。

更新:缺少使findall工作的名称空间。

代码语言:javascript
复制
doc.findall('.//{http://www.opengis.net/kml/2.2}Placemark')
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43199262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档