Python创建一个文件:试图在Python中创建一个KML文件

我仍然很新的 python,我试图将列表(List2)上的位置导出到一个 kml 文件中,然后在谷歌地图上显示结果。

KMLFile = open("KML.txt", "w")
f.write("<KML_File>\n")
f.write("<Document>\n")
for line in List2:
    f.write("   <Placemark>")
    f.write("       <decription>" + str(row[0]) + "</description>")
    f.write("       <Point>")
    f.write("          <coordinates>" + str(row[2]) + str(row[1])"</coordinates>")
    f.write("       </Point>")
    f.write("   </Placemark>")
f.write("</Document>\n")
f.write("</kml>\n")
KMLFile = close()
11

在一系列打印语句中创建 KML 文件的硬编码 XML 输出容易出错且难以维护。而是使用 Python KML 库(如simplekmlpyKML)来生成 KML。simplekml API 简化了 KML 的编写,并使用更清晰、更容易理解的代码生成有效的 KML。

import simplekml
# list2 = ...some assignment with list of point data elements
kml = simplekml.Kml()
for row in list2:
    kml.newpoint(description=row[0],
        coords=[(row[2], row[1])])  # lon, lat, optional height
# save KML to a file
kml.save("test.kml")

将此测试输入用于单个点:

list2 = [ [ 'description', 51.500152, -0.126236 ] ] # description, lat, lon

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="feat_1">
        <Placemark id="feat_2">
            <description>description</description>
            <Point id="geom_0">
                <coordinates>-0.126236,51.500152,0.0</coordinates>
            </Point>
        </Placemark>
    </Document>
</kml>
2

简言之:

您应该将KMLFile更改为f,反之亦然。

您应该像这样调用close()方法:f.close()

您更正的代码:

f = open("KML.txt", "w")
f.write("<KML_File>\n")
f.write("<Document>\n")
for line in List2:
    f.write("\t<Placemark>")
    f.write("\t\t<decription>" + str(row[0]) + "</description>")
    f.write("\t\t<Point>")
    f.write("\t\t\t<coordinates>" + str(row[2]) + str(row[1]) + "</coordinates>")
    f.write("\t\t</Point>")
    f.write("\t</Placemark>")
f.write("</Document>\n")
f.write("</kml>\n")
f.close()

此外,如果你不想写f.close()行,让 python 管理文件关闭:

with open("KML.txt", "w") as f:
    f.write("<KML_File>\n")
    f.write("<Document>\n")
    for line in List2:
        f.write("\t<Placemark>")
        f.write("\t\t<decription>" + str(row[0]) + "</description>")
        f.write("\t\t<Point>")
        f.write("\t\t\t<coordinates>" + str(row[2]) + str(row[1]) + "</coordinates>")
        f.write("\t\t</Point>")
        f.write("\t</Placemark>")
    f.write("</Document>\n")
    f.write("</kml>\n")

最终,如果你不想有很多+到你的f.write()行,你也可以选择format()方法:

f.write("\t\t\t<coordinates>{}{}/coordinates>".format(row[2], row[1]))
2

在你的代码中,你还没有定义变量f,它应该引用你想要写入的文件对象。

f = open("KML.txt", "w")
f.write("<KML_File>\n")
...
f.close()

或更好:

with open("KML.txt", "w") as f:
    f.write("<KML_File>\n")
    ...

这确保始终关闭文件,即使中间的某些代码失败。

要编写 XML 文件,您可能需要查看 Pythonxml-package

0
import geopandas as gpd
polys = gpd.GeoDataFrame(df) 
polys.to_file(r'../docs/database.kml', driver = 'KML')

df 应该包含描述,几何,名称。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(127)
Pop l:从列表中弹出随机元素的最Python的方法是什么
上一篇
Python单分支结构案例:在 Python中检查骆驼案例
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(19条)