首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python和simplekml从CSV创建KML行字符串

用Python和simplekml从CSV创建KML行字符串
EN

Stack Overflow用户
提问于 2017-04-05 11:07:47
回答 1查看 2.9K关注 0票数 1

我有一堆CSV文件,其中包括lat和long。每一行都是旅程中的一个点。我正在尝试创建一个KML,它以一行字符串的形式显示旅程,但不太清楚如何在linestring元素中获得多个共弦。现在它只是放进最后的和弦,仅此而已。它会打印整组屏幕,所以我不认为这是我的逻辑。

代码语言:javascript
复制
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');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 13:15:39

问题

这句话是你的问题:

代码语言:javascript
复制
ls.coords=[(row[10],row[9])];

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

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

代码语言:javascript
复制
ls.coords.addcoordinates([(row[10],row[9])])

为了找到这个无文档的方法,我不得不打电话给:

代码语言:javascript
复制
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']

下面是一个列表示例:

代码语言:javascript
复制
>>> 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对象:

代码语言:javascript
复制
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

解决方案

代码语言:javascript
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43229424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档