問題
この行はあなたの問題です:
ls.coords=[(row[10],row[9])];
あなたが唯一の現在の座標を含む、新しいリストを毎回あなたのラインストリング内のすべての座標を上書きします。
セミコロンは不要で、現在の座標を線ストリング座標に追加する必要があります。私はどこでも任意のドキュメントを見つけることができませんでしたが、coords
がリストオブジェクトではないようですが、addcoordinates
方法受け入れsimplekml.coordinates.Coordinates
、:
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:' Coordinates 'オブジェクトに属性' append 'がありません。私は、ls.coordsがls.coords = []で宣言しているにもかかわらず、ls.coordsが配列ではなく文字列としてその入力を扱っていると仮定しています。私は今朝それに数時間を与えましたが、それ以上は得ることができません。 –
@BenH: 'addcoordinates'は必要なメソッドです。それは[doc](http://simplekml.readthedocs.io/en/latest/reference.html)のどこにも現れません。あなたが気に入ったら、このプロジェクトに取り組んでいるチームに連絡することができます。 –
素晴らしい!それはうまくいく - 助けてくれてありがとう、私はチームに連絡すると思う。 –