Skip to content

Instantly share code, notes, and snippets.

@kylefelipe
Created September 10, 2020 03:36
Show Gist options
  • Save kylefelipe/100915a541da20159dd114d814a14fc6 to your computer and use it in GitHub Desktop.
Save kylefelipe/100915a541da20159dd114d814a14fc6 to your computer and use it in GitHub Desktop.
Import all KMZ files from a directory to qgis project
import os, sys, shutil
from qgis.PyQt.QtWidgets import QFileDialog
getFolder = QFileDialog().getExistingDirectory()
arquivos = []
def renameFile(filePath, newFileName):
"""Funcao que renomeia o arquivo extraido"""
newName = f"{filePath}{os.sep}{newFileName.split('.')[0]}.kml"
oldName = f"{filePath}{os.sep}doc.kml"
arquivos.append(newName)
os.rename(oldName, newName)
for path, dir, files in os.walk(getFolder):
for file in files:
if file[-3:] == 'kmz':
expandFile = f"{path}{os.sep}{file}"
arquivos.append(expandFile)
# arqshutil.unpack_archive extrai o arquivo doc.kml do kmz
# shutil.unpack_archive(expandFile, path, 'zip')
# renameFile(path, expandFile.split(os.sep)[-1])
# adicionando cada camada do KML ao projeto
for kml in arquivos:
layer_name = kml.split(os.sep)[-1]
vLayer = QgsVectorLayer(kml, layer_name, "ogr")
# pegando as sub camadas do kml e adicionando ao projeto
subLayers = vLayer.dataProvider().subLayers()
for subLayer in subLayers:
# print(subLayer)
name = subLayer.split('!!::!!')[1]
uri = f"{kml}|layername={name}"
# print(uri)
sub_vLayer = QgsVectorLayer(uri, name, 'ogr')
QgsProject.instance().addMapLayer(sub_vLayer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment