2017-04-05 103 views
1

私は、他のフィールドの中にlatとlongを含むCSVファイルをたくさん持っています。各行は旅のポイントです。私は、線ストリングとしての旅を示すKMLを作成しようとしていますが、複数のコードを線ストリング要素に入れる方法を理解できません。現時点では、最後の指針を入れるだけです。それだけです。それはスクリーン全体にセットを印刷するので、私はそれが私の論理だとは思わない。Pythonと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'); 

答えて

1

問題

この行はあなたの問題です:

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'); 
+0

おかげで非常に多くの助けと説明。私はそれを試みましたが、私は 'AttributeError:' Coordinates 'オブジェクトに属性' append 'がありません。私は、ls.coordsがls.coords = []で宣言しているにもかかわらず、ls.coordsが配列ではなく文字列としてその入力を扱っていると仮定しています。私は今朝それに数時間を与えましたが、それ以上は得ることができません。 –

+0

@BenH: 'addcoordinates'は必要なメソッドです。それは[doc](http://simplekml.readthedocs.io/en/latest/reference.html)のどこにも現れません。あなたが気に入ったら、このプロジェクトに取り組んでいるチームに連絡することができます。 –

+0

素晴らしい!それはうまくいく - 助けてくれてありがとう、私はチームに連絡すると思う。 –

関連する問題