【问题标题】:Error while creating KML from a dict using simplekml使用 simplekml 从 dict 创建 KML 时出错
【发布时间】:2020-07-02 17:05:39
【问题描述】:

我正在使用库 simplekml 创建 kml。创建单个时,它就像一个魅力,但是当尝试为每个 dict 条目创建一个 kml 时,返回一个我找不到的错误。 数据有这种格式:

{12: {900: [(-5.4529673, 4.46),
   (-3.4529799, 40.454),
   (-3.495, 33),
   (-3.45471, 40.437)]},
29: {900: [(-3.452....}

脚本如下所示:

import simplekml
kml = simplekml.Kml()

for key, value in data.items():
    pol = kml.newpolygon(name = key)
    pol.outerboundaryis = data[key][900]
    pol.innerboundaryis = []
    print(pol.outerboundaryis)
    pol.style.linestyle.color = simplekml.Color.green
    pol.style.linestyle.width = 5
    pol.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.green)
    print(pol.name)
    kml.save(str(pol.name) +".kml")

返回此错误:

AttributeError: 'int' object has no attribute 'count'

我一直在使用 kml.save('key' +".kml") 将边界转换为字符串......总是同样的问题。我不知道这一切中的 Int 是什么,我开始认为这是图书馆本身的问题? 请和谢谢你

P.E: 也尝试​​遍历 enst dict,产生了同样的错误:

import simplekml
kml = simplekml.Kml()

for key, value in data.items():
    for key2, value2 in value.items():
        pol = kml.newpolygon(name = key)
        pol.outerboundaryis = value2
        pol.innerboundaryis = []
        print(pol.outerboundaryis)
        pol.style.linestyle.color = simplekml.Color.green
        pol.style.linestyle.width = 5
        pol.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.green)
        kml.save(str(pol.name) +".kml")

【问题讨论】:

  • 这个错误仅仅意味着在某处像word= 5; word.count()这样的操作正在发生。这显然是不正确的。我建议您调试代码并找到发生错误的代码行。
  • 这是整个代码。有趣的是它在循环之外工作,只有在我尝试循环时才会中断。
  • 这仅仅意味着字典中的数据在某些时候属于错误的类型。 “数据”中有什么?
  • 我将编辑并放一段数据
  • 请看我的回答,如果您需要任何帮助,请告诉我。

标签: python kml simplekml


【解决方案1】:

正如你所说,它可以在循环之外工作,因为你没有遍历 data 字典的整个元素。

问题在于这里保存的数据。

{12: {900: [(-5.4529673, 4.46),
   (-3.4529799, 40.454),
   (-3.495, 33),
   (-3.45471, 40.437)]},
29: {900: [(-3.452....}

这不能与 for key, value in data.items(): 语法一起使用,因为它只接受 key -> value 对,并且您的数据由字典列表组成。

阅读更多here,了解正确使用for key, value in data.items():

要遍历字典列表,请参阅 here 并将该想法合并到您的代码中。

【讨论】:

  • 尝试了几种迭代嵌套字典的方法,同样的问题。我真的很感谢你的帮助,顺便说一句,你很善良
  • 如果此答案有助于解决您的问题,请单击答案旁边的复选标记将其标记为已接受。请参阅here 了解更多信息
【解决方案2】:

函数创建完毕,使用更方便

def kmlprinter(coordenadas):

kml = simplekml.Kml()
pol = kml.newpolygon(name="laputetxemadrequeparioaloscuñadosdeSO")
pol.outerboundaryis = coordenadas.values()
pol.innerboundaryis = []
pol.style.linestyle.color = simplekml.Color.green
pol.style.linestyle.width = 5
pol.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.green)
kml.save("1.kml")  

【讨论】:

    【解决方案3】:

    问题在于命名多边形,即 pol = kml.newpolygon(name = key)。由于密钥是 int 类型,因此需要将其转换为字符串。

    pol = kml.newpolygon(name = str(key))

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 1970-01-01
      • 2018-12-03
      • 2013-07-20
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2022-11-25
      • 2016-02-19
      相关资源
      最近更新 更多