我如何遍历列表并使用simplekml创建/添加到kml?

时间:2019-05-16 17:56:23

标签: python-3.x simplekml

我有一个坐标列表,我想基于列表“ coord”创建一个包含所有这些线条的kml。我几乎可以正常工作,但是,它只会为列表中的最后一个坐标创建线串。我如何在simplekml中使用kml文件附加(或类似的东西),这样我就可以遍历列表并为“ coord”中的每个索引创建一个新的行字符串,并将它们全部放入一个kml中?

这就是“坐标”的样子

[[(-89.60233333333333, 29.178833333333333), (-88.91166666666666, 30.255)], [(-88.73, 30.283833333333334), (-87.82583333333334, 30.298333333333332)], [(-87.6, 30.13), (-87.6, 30.05)], [(-87.9, 30.05), (-87.9, 30.13)], [(-87.95733333333334, 30.254), (-87.9825, 30.655833333333334)], [(-87.82366666666667, 30.282333333333334), (-88.7285, 30.278166666666667)], [(-88.88983333333333, 30.229333333333333), (-89.58366666666667, 29.154166666666665)], [(-89.88433333333333, 29.19333333333333), (-90.2005, 30.415666666666667)], [(-91.00733333333334, 30.875333333333334), (-95.13933333333334, 29.981166666666667)], [(-95.46, 29.272333333333332), (-95.46183333333333, 28.965)], [(-95.607, 28.9765), (-95.30183333333333, 29.2585)]]

for idx, val in enumerate(coord):
    kml = simplekml.Kml()
    ls = kml.newlinestring(name='A LineString {0}'.format(idx))
    ls.coords = coord[idx]
    ls.extrude = 1
    ls.altitudemode = simplekml.AltitudeMode.relativetoground
    ls.style.linestyle.width = 5
    ls.style.linestyle.color = simplekml.Color.red
    kml.save('lines.kml')

我的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">
    <Document id="4347">
        <Style id="4350">
            <LineStyle id="4351">
                <color>ff0000ff</color>
                <colorMode>normal</colorMode>
                <width>5</width>
            </LineStyle>
        </Style>
        <Placemark id="4349">
            <name>A LineString 10</name>
            <styleUrl>#4350</styleUrl>
            <LineString id="4348">
                <coordinates>-95.607,28.9765,0.0 -95.30183333333333,29.2585,0.0</coordinates>
                <extrude>1</extrude>
                <altitudeMode>relativeToGround</altitudeMode>
            </LineString>
        </Placemark>
    </Document>
</kml>

1 个答案:

答案 0 :(得分:0)

我明白了

for idx, val in enumerate(coord):
    kml = simplekml.Kml()
    idx = 0
    for x in coord:
        try:
            idx +=1
            ls = kml.newlinestring(name='A LineString {0}'.format(idx))
            ls.coords.addcoordinates(coord[idx])
            ls.extrude = 1
            ls.style.linestyle.width = 5
            ls.style.linestyle.color = simplekml.Color.blue
        except:
            pass

kml.save('lines.kml')