Suite

Lot de couches « Enregistrer sous » avec leur type de géométrie dans QGIS ?

Lot de couches « Enregistrer sous » avec leur type de géométrie dans QGIS ?


Nous avons des centaines de fichiers dgn. Nous avons "attribué" avec succès un système de coordonnées à ces fichiers dgn par lots en utilisant "à la volée" + CRS personnalisé. Maintenant, nous devons enregistrer la géométrie de chaque dgn (Point, Linestring, Polygon) dans WGS84. Manuellement, nous pouvons le faire. Clic droit -> Sauvegardez-nous -> Projection : WGS84 et ajoutez le suffixe "Point, Lignes, Zones" à chaque couche. Mais cette méthode prendra beaucoup de temps pour le faire. Ce que je voudrais faire c'est

1) En fonction du nom du fichier, les calques doivent être enregistrés par lots dans un dossier respectif. J'ai lu ceci et essayé. Comment traiter par lots le processus « Enregistrer la couche sous » dans QGIS ? Mais il prend le nom du calque (ici : elementsPoints, elementsLineString) au lieu du nom de fichier d'origine (042641hd). Je voudrais avoir 042641hd_Points, 042641hd_Lines etc…

2) Ce faisant, comment sauvegarder tous les fichiers en WGS84 ?


Ce code fonctionne parfaitement. Lire le nom du fichier, pas le nom de la couche.

from qgis.core import * import os pathToFile = "D:Dummy" trs = QgsCoordinateReferenceSystem() trs.createFromId(4326) couches = iface.legendInterface().layers() pour la couche dans les couches : dgn_pn = couche. dataProvider().dataSourceUri().split('|')[0] dgn_fn = os.path.basename(dgn_pn) dgn_fn_wo_ext = os.path.splitext(dgn_fn)[0] geom_name = {0: 'Points', 1 : 'Lines', 2: 'Polygons'} geom_type = layer.geometryType() newName = dgn_fn_wo_ext + '_' + geom_name[geom_type] ret = QgsVectorFileWriter.writeAsVectorFormat(layer,pathToFile + newName,',utf-8',trs 'ESRI Shapefile') if ret == QgsVectorFileWriter.NoError: print newName + " enregistré dans " + pathToFile + "!"

Vous connaissez déjà la procédure générale et avez de l'expérience avec le script How to batch "Layer save as"-process in QGIS?. Considérez la ligne

QgsVectorFileWriter.writeAsVectorFormat(calque, cheminVersFichier + nouveauNom, "utf-8", Aucun, "ESRI Shapefile")

Vous devez changer 2 choses.

1) Pour obtenir le nom du fichier d'origine, ajoutez les lignes suivantes en haut de la boucle

importer l'os pour la couche dans les couches : # obtenir le chemin vers le fichier dgn dgn_pn = layer.dataProvider().dataSourceUri().split('|')[0] dgn_fn = os.path.basename(dgn_pn) # se débarrasser du fichier extension dgn_fn_wo_ext = os.path.splitext(dgn_fn)[0] # définit les chaînes de géométrie et obtient le type de géométrie de la couche geom_name = {0: 'Points', 1: 'Lines', 2: 'Polygons'} geom_type = layer.geometryType () # construire le nouveau nom de fichier newName = dgn_fn_wo_ext + '_' + geom_name[geom_type]

2) Pour changer le système de coordonnées en WGS84, ajoutez en haut du script

trs = QgsCoordinateReferenceSystem() trs.createFromId(4326)

Pour tout rassembler, modifiez la ligne suivante :

ret = QgsVectorFileWriter.writeAsVectorFormat( layer, pathToFile + newName, 'utf-8', trs, 'ESRI Shapefile')

J'ai un projet QGIS avec beaucoup de fichiers KML en WGS84. Je voudrais les enregistrer par lots dans les répertoires dont ils proviennent dans Lambert72 (EPSG: 31370) en tant que fichier .shp. J'ai concocté mon propre petit script à partir de ce qui précède et de l'aide de Detlev.

from qgis.core import * import os pathToFile = "S:MeetnettenAmfibieen en reptielenVuursalamanderTransecten 2016" trs = QgsCoordinateReferenceSystem() trs.createFromId(31370) suffixe = "_Lambert1972_Versie2016-01-04 " prefix = "Transect_Vuursalamander_" couches = iface.legendInterface().layers() pour la couche dans les couches : dgn_pn = layer.dataProvider().dataSourceUri().split('|')[0] dgn_fn = os.path.dirname (dgn_pn) newName = prefix + layer.name() + suffix + ".shp" ret = QgsVectorFileWriter.writeAsVectorFormat(layer, dgn_fn +  + newName,'utf-8',trs,'ESRI Shapefile') si ret = = QgsVectorFileWriter.NoError: print newName + " enregistré dans " + dgn_fn + "!"

Voir la vidéo: Création dune couche vectorielle