python - 使用 Python 和 simplekml 从 CSV 创建 KML 线串

标签 python csv kml simplekml

我有一堆 CSV 文件,其中包含纬度和经度等字段。每一行都是旅程中的一个点。我正在尝试创建一个 KML,将旅程显示为线串,但无法完全弄清楚如何将多个坐标放入线串元素中。目前它只是输入最后一个坐标,仅此而已。它将整个集合打印到屏幕上,所以我认为这不是我的逻辑。

import csv
import simplekml

inputfile = csv.reader(open('foo.csv','r'))
kml=simplekml.Kml()
ls = kml.newlinestring(name="Journey path")

inputfile.next(); # skip CSV header
for row in inputfile:
        ls.coords=[(row[10],row[9])];
        print ls.coords
kml.save('fooline.kml');

最佳答案

问题

这一行是你的问题:

ls.coords=[(row[10],row[9])];

每次都使用新列表覆盖 LineString 中的所有坐标,仅包含当前坐标。

不需要分号,您应该将当前坐标附加到线串坐标中。我在任何地方都找不到任何文档,但似乎 coords不是列表对象,而是 simplekml.coordinates.Coordinates ,它接受 addcoordinates方法:

ls.coords.addcoordinates([(row[10],row[9])])

要找到这个未记录的方法,我必须调用:

print([method for method in dir(ls.coords) if callable(getattr(ls.coords, method))])
# ['__class__', '__delattr__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'addcoordinates']

这是一个列表示例:

>>> coords = [(1,1)]
>>> coords = [(2,2)]
>>> coords = [(3,3)]
>>> coords
[(3, 3)]

>>> coords = []
>>> coords.append((1,1))
>>> coords.append((2,2))
>>> coords.append((3,3))
>>> coords
[(1, 1), (2, 2), (3, 3)]

并与 simplekml对象:

import simplekml

kml=simplekml.Kml()
ls = kml.newlinestring(name="Journey path")

ls.coords.addcoordinates([(1,2)])
ls.coords.addcoordinates([(3,4)])
ls.coords.addcoordinates([(5,6)])
print(ls.coords)
# 1,2,0.0 3,4,0.0 5,6,0.0

解决方案

import csv
import simplekml

inputfile = csv.reader(open('foo.csv','r'))
kml=simplekml.Kml()
ls = kml.newlinestring(name="Journey path")

inputfile.next()
for row in inputfile:
        ls.coords.addcoordinates([(row[10],row[9])]) #<-- IMPORTANT! Longitude first, Latitude second.
        print ls.coords
kml.save('fooline.kml');

关于python - 使用 Python 和 simplekml 从 CSV 创建 KML 线串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43229424/

相关文章:

python - 如何使用python删除第一项和最后一项

python - 读取csv文件的一部分

python - 通过 DictWriter (Python) 将字典写入 CSV 文件

php - 将 KML 文件加载到 mysql/xpath 和 x quires

python - 返回排序数组中每个数字的最后一次相遇的函数

python - ipyparallel view.sync_import 不绑定(bind)到附加名称

python - 比较两组字符串,返回不同的结果

java - 在java中从CSV文件中过滤数据

google-maps - KML/Google map - 指定 iFrame 中嵌入 map 的缩放级别

sql - 在 SQL 2008 中生成 KML