Python从包含多个地标的KML文件中提取数据

毛罗比奥

我有一个KML文件,如下所示:

<?xml version="1.0"?><kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>MST =T</name>
<description><![CDATA[<p>KML test file</p>
<p>This is a test version.</p>]]></description>
<Style id="spstyle5">
    <IconStyle>
        <color>ff3EE23E</color>
        <Icon><href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href></Icon>
    </IconStyle>
    <LineStyle>
        <color>ff3EE23E</color>
        <width>4</width>
    </LineStyle>
</Style>
<Folder>
    <name>Track5</name>
    <visibility>0</visibility>
            <name>sp5_sp6_ Track</name>
            <description><![CDATA[<i>sp5_sp6_</i> track<br>pantrack id:5]]></description>
            <Placemark>
                <name>sp5_sp6_ MST</name>
                <description><![CDATA[<i> species sp5_sp6_</i> mst<br>long= 648.000 corte 0.250000]]></description>
                <styleUrl>#spstyle5</styleUrl>
                <MultiGeometry>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            8.000,8.000 6.000,7.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            5.000,7.000 6.000,7.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            3.000,8.000 5.000,7.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            2.000,8.000 3.000,8.000
                        </coordinates>
                    </LineString>
                </MultiGeometry>
            </Placemark>
</Folder>
<Style id="spstyle7">
    <IconStyle>
        <color>ffBC77DC</color>
        <Icon><href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href></Icon>
    </IconStyle>
    <LineStyle>
        <color>ffBC77DC</color>
        <width>4</width>
    </LineStyle>
</Style>
<Folder>
    <name>Track7</name>
    <visibility>0</visibility>
            <name>sp1_sp2_sp6_ Track</name>
            <description><![CDATA[<i>sp1_sp2_sp6_</i> track<br>pantrack id:7]]></description>
            <Placemark>
                <name>sp1_sp2_sp6_ MST</name>
                <description><![CDATA[<i> species sp1_sp2_sp6_</i> mst<br>long= 441.000 corte 0.250000]]></description>
                <styleUrl>#spstyle7</styleUrl>
                <MultiGeometry>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            11.000,6.000 12.000,6.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            12.000,6.000 12.000,4.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            12.000,4.000 11.000,3.000
                        </coordinates>
                    </LineString>
                </MultiGeometry>
            </Placemark>
</Folder>
<Style id="spstyle8">
    <IconStyle>
        <color>ff97287A</color>
        <Icon><href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href></Icon>
    </IconStyle>
    <LineStyle>
        <color>ff97287A</color>
        <width>4</width>
    </LineStyle>
</Style>
<Folder>
    <name>Track8</name>
    <visibility>0</visibility>
            <name>sp3_sp6_sp4_sp6_ Track</name>
            <description><![CDATA[<i>sp3_sp6_sp4_sp6_</i> track<br>pantrack id:8]]></description>
            <Placemark>
                <name>sp3_sp6_sp4_sp6_ MST</name>
                <description><![CDATA[<i> species sp3_sp6_sp4_sp6_</i> mst<br>long= 757.000 corte 0.250000]]></description>
                <styleUrl>#spstyle8</styleUrl>
                <MultiGeometry>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            8.000,8.000 8.000,7.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            8.000,7.000 11.000,6.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            11.000,6.000 11.000,5.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            11.000,6.000 12.000,6.000
                        </coordinates>
                    </LineString>
            <LineString>
                        <tessellate>true</tessellate>
                        <altitudeMode>clampToGround</altitudeMode>
                        <coordinates>
                            11.000,5.000 12.000,4.000
                        </coordinates>
                    </LineString>
                </MultiGeometry>
            </Placemark>
</Folder>

</Document>
</kml>

我想分别提取每个地标的名称以及与该地标关联的LineString标记中的所有坐标,结果如下:

Placemark A 
x, y
x, y
x, y
...
Placemark B
x, y
x, y
x, y

我已经尝试了这里提出的所有解决方案,但是没有一个适用于我的数据。实际上,所有解决方案都具有高度通用性,并且未提供用于对照它们进行测试的测试数据。

更新:我对下面的代码取得了一些进展,这些代码允许提取所有地标和线坐标(我只是忘记了该死的名称空间):

from pykml import parser

filename = "output0.kml"
with open(filename) as f:
    root = parser.parse(f).getroot()
    pms = root.findall('.//{http://earth.google.com/kml/2.1}Placemark')
    lst = doc.findall('.//{http://earth.google.com/kml/2.1}LineString')

for pm in pms:
    print(pm.name)
for ls in lst:
    print(ls.coordinates)

但是仍然不知道如何提取按地标分组的坐标

完善

只需嵌套for内部解析从外部解析元素开始工作循环。另外,etree由于kml是xml文件,因此您可以使用内置模块。

import xml.etree.ElementTree as et

doc = et.parse("source.kml")

nmsp = '{http://earth.google.com/kml/2.1}'

for pm in doc.iterfind('.//{0}Placemark'.format(nmsp)):
    print(pm.find('{0}name'.format(nmsp)).text)

    for ls in pm.iterfind('{0}MultiGeometry/{0}LineString/{0}coordinates'.format(nmsp)):
        print(ls.text.strip().replace('\n',''))

# sp5_sp6_ MST
# 8.000,8.000 6.000,7.000
# 5.000,7.000 6.000,7.000
# 3.000,8.000 5.000,7.000
# 2.000,8.000 3.000,8.000
# sp1_sp2_sp6_ MST
# 11.000,6.000 12.000,6.000
# 12.000,6.000 12.000,4.000
# 12.000,4.000 11.000,3.000
# sp3_sp6_sp4_sp6_ MST
# 8.000,8.000 8.000,7.000
# 8.000,7.000 11.000,6.000
# 11.000,6.000 11.000,5.000
# 11.000,6.000 12.000,6.000
# 11.000,5.000 12.000,4.000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除地标,然后将减去该地标的整个kml保存到新文件中

使用python从多个文本文件中提取数据

使用 Python 從多個 URL 中提取文件/(kml)

sas宏从多个文件中提取数据

Python从PDF文件中提取多个文本

.kml文件中带有地标的Google Maps Polygon(使用geoxml3和kmllayer)

如何从包含日期的多个文件中提取日期?

Python-从多个Zip文件中提取CSV文件并合并数据

如何使用python从另一个文件中的多个文件中提取数据?

从多个TXT文件中提取数据并在Python中创建摘要CSV文件

从包含多组基因坐标的文件中提取一组基因坐标

如何从python中的文件中提取数据

使用Python从xml文件中提取数据

从python文件中提取并绘制数据

从python的txt文件中提取数据

如何从json文件中提取数据python

使用python从.txt文件中提取数据

从文件中提取数据

Scala-从包含JSON格式数据的文件中提取值

从CSV文件中提取数据(融合表和kml解决方法)

循环浏览只读的.zip数据档案,以从其中的.kml文件中提取行

使用python从多个元数据文件中提取特定文本

从文本文件中提取多个模式并将其保存到熊猫数据框[python]

使用R从多个Excel文件中提取数据

如何从具有多个值的JSON文件中提取数据

如何使用文件中的kml地标?

使用python从文件中提取数据并写入新文件

使用Python从字典中提取多个数据框

从python中的JSON文件中提取多个对象