Python: вставлять изображения в kmz

У меня есть серия файлов kmz (более 1000) в одной папке, которые я создал для каждого полигона класса объектов и соответствующего изображения (все изображения находятся в отдельной папке). Эти kmz автоматически генерируются из таблиц атрибутов моих шейп-файлов из arcGIS. В каждом файле kmz у меня есть ссылка на изображение, соответствующее этой функции как таковой:

<tr> 
<td>Preview</td>    
<td>G:\Temp\Figures\Ovr0.png</td>    
</tr>

На данный момент каждое изображение представляет собой табличный текст, ссылающийся на изображение в каталоге /Temp/Рисунки. Что мне нравится, так это преобразовать все эти тексты в ссылки, что-то вроде

 <img src="file:///G:/Temp/Figures/Ovr0.png" width = 750 height=500/>

Учитывая большой объем файлов, было бы идеально, если бы это можно было сделать в python, simplekml? Еще одно замечание: на каком-то этапе я хотел бы поделиться некоторыми из этих файлов kmz, и поэтому мне было интересно, будет ли лучшим решением разделить каждую пару kmz и изображения на их собственные соответствующие каталоги и каким-то образом заархивировать файл kmz?


person GeoPy    schedule 12.05.2013    source источник


Ответы (1)


Мне удалось решить мою проблему, повторяя каждый kmz и изображение и используя модуль zipfile для чтения содержимого, переписывая doc.kml и повторно архивируя файлы в kmz. На данный момент изображения помещаются после тела ‹ > в kmz, но более сложный аргумент может быть записан с помощью re я полагаю.

Если есть более эффективный метод, дайте мне знать...

   def edit_kmz(kmz,output,image):

        ##Read the doc.kml file in the kmz and rewrite the doc.kml file

        zf = zipfile.ZipFile(kmz)
        temp = r'tempfolder\doc.kml'
        for line in zf.read("doc.kml").split("\n"):
            with open(temp,'a') as wf: #Create the doc.kml
                if "</body>" in line:
                    wf.write("</body>\n<img src='files/Ovr0.png' width = 750 height=500</img>\n") 
                else:
                    wf.write('%s\n'%(line))
        zf.close()

        ##Rezip the file

        zf = zipfile.ZipFile(output,'a')
        zf.write(image,arcname='files/Ovr0.png') ##Relative Path to the Image
        zf.write(temp,arcname='doc.kml') ##Add revised doc.kml file
        zf.close()
person GeoPy    schedule 14.05.2013