我有一堆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/