Python SimpleKML 新点坐标替换
Python SimpleKML newpoint coordinates substitution
使用 python SimpleKML 库并在替换我的点(坐标)值时遇到问题。
以下是网站上的代码示例:
import simplekml
kml = simplekml.Kml()
pnt = kml.newpoint(name='A Point')
pnt.coords = [(1.0, 2.0)]
pnt.style.labelstyle.color = simplekml.Color.red # Make the text red
pnt.style.labelstyle.scale = 2 # Make the text twice as big
pnt.style.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png'
kml.save("Point Styling.kml")
我尝试了以下方法,但每次都失败。
import simplekml
kml = simplekml.Kml()
a = range(10)
b = a
test = zip(a, b)
for point in test:
pnt = kml.newpoint(name='Bogusname')
pnt.coords = point
它抛出以下错误:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 1079, in coords
self._kml['coordinates'].addcoordinates(coords)
File "/Library/Python/2.7/site-packages/simplekml/coordinates.py", line 30, in addcoordinates
if len(coord) == 2:
TypeError: object of type 'int' has no len()
我认为这归结为某种替代误解。如果我将这两个值串成一个以满足 1 个参数要求,它会添加单引号,导致 kml 无法正确呈现。我似乎无法弄清楚如何在不引起错误的情况下传递经度/纬度值。
所以我想我可以通过将点变成一个字符串来修复它:
for i in test:
pnt = kml.newpoint(name='Bogusname')
pnt.coords = str(i)
但收到以下错误:
>>> kml.save("Point Shared Style.kml")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/simplekml/kml.py", line 285, in save
out = self._genkml(format)
File "/Library/Python/2.7/site-packages/simplekml/kml.py", line 198, in _genkml
kml_str = self._feature.__str__()
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 418, in __str__
buf.append(feat.__str__())
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 414, in __str__
buf.append(super(Feature, self).__str__())
File "/Library/Python/2.7/site-packages/simplekml/base.py", line 46, in __str__
buf.append(u"{0}".format(val)) # Use the variable's __str__ as is
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 1250, in __str__
return '<Point id="{0}">{1}</Point>'.format(self._id, super(Point, self).__str__())
File "/Library/Python/2.7/site-packages/simplekml/base.py", line 54, in __str__
buf.append(u("<{0}>{1}</{0}>").format(var, val)) # Enclose the variable's __str__ with its name
File "/Library/Python/2.7/site-packages/simplekml/coordinates.py", line 40, in __str__
buf.append("{0},{1},{2}".format(cd[0], cd[1], cd[2]))
IndexError: string index out of range
将您的 coords
参数设置为 list
。为此,请使用
pnt.coords = [point]
或者只是在newpoint
构造函数中传递它
kml.newpoint(name="Bogusname", coords=[point])
如果需要 floats
,您可以按如下方式创建示例浮动数据
a = [float(x) for x in range(10)]
完整示例
from simplekml import Kml
a = range(10)
test = zip(a, a)
kml = Kml(name='KmlUsage')
for coord in test:
kml.newpoint(name='Bogusname', coords=[coord]) # A simple Point
print kml.kml() # Printing out the kml to screen
使用 python SimpleKML 库并在替换我的点(坐标)值时遇到问题。
以下是网站上的代码示例:
import simplekml
kml = simplekml.Kml()
pnt = kml.newpoint(name='A Point')
pnt.coords = [(1.0, 2.0)]
pnt.style.labelstyle.color = simplekml.Color.red # Make the text red
pnt.style.labelstyle.scale = 2 # Make the text twice as big
pnt.style.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png'
kml.save("Point Styling.kml")
我尝试了以下方法,但每次都失败。
import simplekml
kml = simplekml.Kml()
a = range(10)
b = a
test = zip(a, b)
for point in test:
pnt = kml.newpoint(name='Bogusname')
pnt.coords = point
它抛出以下错误:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 1079, in coords
self._kml['coordinates'].addcoordinates(coords)
File "/Library/Python/2.7/site-packages/simplekml/coordinates.py", line 30, in addcoordinates
if len(coord) == 2:
TypeError: object of type 'int' has no len()
我认为这归结为某种替代误解。如果我将这两个值串成一个以满足 1 个参数要求,它会添加单引号,导致 kml 无法正确呈现。我似乎无法弄清楚如何在不引起错误的情况下传递经度/纬度值。
所以我想我可以通过将点变成一个字符串来修复它:
for i in test:
pnt = kml.newpoint(name='Bogusname')
pnt.coords = str(i)
但收到以下错误:
>>> kml.save("Point Shared Style.kml")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/simplekml/kml.py", line 285, in save
out = self._genkml(format)
File "/Library/Python/2.7/site-packages/simplekml/kml.py", line 198, in _genkml
kml_str = self._feature.__str__()
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 418, in __str__
buf.append(feat.__str__())
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 414, in __str__
buf.append(super(Feature, self).__str__())
File "/Library/Python/2.7/site-packages/simplekml/base.py", line 46, in __str__
buf.append(u"{0}".format(val)) # Use the variable's __str__ as is
File "/Library/Python/2.7/site-packages/simplekml/featgeom.py", line 1250, in __str__
return '<Point id="{0}">{1}</Point>'.format(self._id, super(Point, self).__str__())
File "/Library/Python/2.7/site-packages/simplekml/base.py", line 54, in __str__
buf.append(u("<{0}>{1}</{0}>").format(var, val)) # Enclose the variable's __str__ with its name
File "/Library/Python/2.7/site-packages/simplekml/coordinates.py", line 40, in __str__
buf.append("{0},{1},{2}".format(cd[0], cd[1], cd[2]))
IndexError: string index out of range
将您的 coords
参数设置为 list
。为此,请使用
pnt.coords = [point]
或者只是在newpoint
构造函数中传递它
kml.newpoint(name="Bogusname", coords=[point])
如果需要 floats
,您可以按如下方式创建示例浮动数据
a = [float(x) for x in range(10)]
完整示例
from simplekml import Kml
a = range(10)
test = zip(a, a)
kml = Kml(name='KmlUsage')
for coord in test:
kml.newpoint(name='Bogusname', coords=[coord]) # A simple Point
print kml.kml() # Printing out the kml to screen