问题
这条线是你的问题:
ls.coords=[(row[10],row[9])];
你覆盖在你的LineString的所有坐标与新的列表中的每个时刻,只有包含当前坐标。
分号不是必需的,您应该将当前坐标附加到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');
非常感谢帮助和解释。我试过,但我得到'AttributeError:'坐标'对象没有属性'追加''。我假设ls.coords将其输入视为一个字符串而不是数组,尽管用ls.coords = []声明了它。今天早上我已经给了它几个小时,但不能再进一步了。 –
@BenH:'addcoordinates'是必需的方法。太糟糕了,它不会出现在[doc](http://simplekml.readthedocs.io/en/latest/reference.html)的任何地方。如果你喜欢它,你可以联系在这个项目上工作的团队。 –
太棒了!这很有用 - 感谢您的帮助,我想我会联系团队。 –