Ошибка при создании KML из dict с использованием simplekml - PullRequest
0 голосов
/ 21 марта 2020

Я создаю kml, используя библиотеку simplekml. При создании одного он работает как шарм, но при попытке создать один километр для каждой записи dict возвращает ошибку, которую я не смог найти. Данные имеют такой формат:

{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 во всем этом, я начинаю понимать, что это проблема самой библиотеки? Пожалуйста и спасибо

PE: Также пытался перебрать 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")

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Закончено создание функции, проще в использовании

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")  
0 голосов
/ 22 марта 2020

Итак, как вы сказали, это будет работать за пределами al oop, поскольку вы не выполняете итерацию по всем элементам словаря 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, а ваши данные состоят из списков словаря.

Подробнее здесь на правильном использование for key, value in data.items():.

Для перебора списков словаря, смотрите здесь и включите эту идею в свой код.

...