#1 Sat 05 October 2019 23:03
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
QGIS: Automatiser Exporter CSV en Shape
Bonjour à tous,
J'ai téléchargé des données sur un site qui ne les rend accessibles que par CSV, avec un champ en X et Y qu'il faut importer sur QGis.
Disposant d'une petite centaine de ces fichiers CSV que je souhaite convertir en Shape, je me demandais s'il existe une méthode automatique (pour m'éviter à devoir répéter l'opération 100 fois) pour pouvoir :
- Importer le fichier CSV dans QGis
- Lui indiquer quels champs correspondent aux X et Y
- Enregistrer la couche en Lambert 93
Ca me dépannerais beaucoup ^^ Merci à vous.
Hors ligne
#2 Sun 06 October 2019 20:41
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Automatiser Exporter CSV en Shape
Bonsoir,
Les champs x et y sont les même pour tous les fichiers ?
Le mieux est de passer par un script python. Une âme charitable voudra bien vous dépanner si vous indiquez votre version de Qgis.
Cordialement
Hors ligne
#3 Sun 06 October 2019 21:13
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Re: QGIS: Automatiser Exporter CSV en Shape
Merci pour votre réponse.
Oui, ces champs sont les même pour tous !
J'utilise la version 3.8 de qgis.
Effectivement, si je pouvais apprendre la manière d'automatiser cela avec python, ça serait génial
Merci
Hors ligne
#4 Mon 07 October 2019 11:01
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Automatiser Exporter CSV en Shape
Bonjour,
voici un script :
Code:
from qgis.core import QgsVectorLayer, QgsVectorFileWriter, QgsCoordinateReferenceSystem import os folder = r'D:/mn/chemin' #bien mettre des slash encoding='ISO-8859-1' delimiter = ',' #delimiteur decimalPoint = ',' #point decimal xField = 'x' yField = 'y' crs = 'EPSG:4326' #projection uri="file:///{}?encoding={}&type=csv&delimiter={}&detectTypes=yes&decimalPoint={}&xField={}&yField={}&crs={}&spatialIndex=no&subsetIndex=no&watchFile=no" crs_export = QgsCoordinateReferenceSystem('EPSG:2154') for f in os.listdir(folder): if f.endswith(".csv"): csvfile = os.path.join(folder, f) csvuri = uri.format(csvfile, encoding, delimiter,decimalPoint, xField, yField, crs) basename, ext = os.path.splitext(csvfile) shpfile = os.path.join(folder, basename + '.shp') layer = QgsVectorLayer(csvuri, 'layer', 'delimitedtext') if layer.isValid(): QgsVectorFileWriter.writeAsVectorFormat(layer, shpfile, 'UTF-8', crs_export, 'ESRI ShapeFile') print('export') else: print('erreur : ' + f)
EDIT : j'avais oublié que vous vouliez la couche finale en LAMBERT-93
Dernière modification par lejedi76 (Mon 07 October 2019 11:09)
Hors ligne
#5 Mon 07 October 2019 11:06
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
Re: QGIS: Automatiser Exporter CSV en Shape
Un grand merci
Hors ligne
#6 Mon 07 October 2019 11:10
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Automatiser Exporter CSV en Shape
J'ai modifié le code pour exporter la couche en Lambert-93
Hors ligne
#7 Mon 07 October 2019 20:52
Re: QGIS: Automatiser Exporter CSV en Shape
Salut,
Même si la réponse est valide, pas besoin de QGIS pour faire ces opérations. Il faut ouvrir une ligne de commande et avoir GDAL installé. Si tu as QGIS, tu as GDAL installé normalement, tu dois si nécessaire lancer "OSGeo4W Shell" si tu es sous Windows.
Sur Windows, en supposant que tes champs pour les coordonnées x et y commencent par X et Y et que tes coordonnées dans le CSV sont du Lambert 93 et que tu veux exporter en Lambert 93
Code:
for /R %f in (*.csv) do ogr2ogr -s_srs EPSG:2154 -t_srs EPSG:2154 -oo X_POSSIBLE_NAMES=X* -oo Y_POSSIBLE_NAMES=Y* -f "ESRI Shapefile" "%~dpnf.shp" %f
Sur Linux,
Code:
for f in *.csv ; do ogr2ogr -s_srs EPSG:2154 -t_srs EPSG:2154 -oo X_POSSIBLE_NAMES=X* -oo Y_POSSIBLE_NAMES=Y* -f "ESRI Shapefile" ${f%csv}shp $f; done;
Pompé et adapté de la réponse à la question en anglais https://gis.stackexchange.com/questions … ng-ogr2ogr
Si tu dois gérer l'encodage, voir https://gis.stackexchange.com/a/15915/638
Ensuite, si tu veut rajouter les fichiers dans QGIS, tu fais un glisser-déposer de tous les fichier shp et c'est bon.
Cordialement
Thomas
Hors ligne
#8 Tue 08 October 2019 15:07
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Automatiser Exporter CSV en Shape
Bonjour,
effectivement pas besoin de passer par Qgis pour ce genre de tâche mais la demande a été faite dans ce forum.
Le seul avantage que je vois de passer par un script python, c'est que c'est à la fois multiplateforme, et l'utilisateur néophyte n'as pas trop besoin de mettre les mains dans le cambouis, simplement de modifier les paramètres d'entrée qui vont bien.
Après si les utilisateurs ne sont pas effrayés par le shell, cette solution est utile.
Cordialement,
Hors ligne
#9 Thu 28 January 2021 15:55
- JuanLasso
- Juste Inscrit !
- Date d'inscription: 10 Dec 2019
- Messages: 4
Re: QGIS: Automatiser Exporter CSV en Shape
Bonjour,
D'abord un grand merci à @JD pour le script !!! , j'ai essayé de l'utiliser et malgré un petit message d'erreur à la fin, il marche bien. Par contre, j'ai besoin des SHP en sortie en UTF-8. J'ai bien modifié la partie encoding mais il continue à me créer des couches en ISO-8859-1. Auriez vous une idée de comment régler cela ?
Merci d'avance
Cordialement,
Juan
Dernière modification par JuanLasso (Mon 01 February 2021 18:06)
Hors ligne
#10 Mon 01 February 2021 18:13
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Automatiser Exporter CSV en Shape
Bonsoir,
normalement c'est prévu pour mais le script est un peu ancien. Sous quelle version de qgis êtes-vous ?
Hors ligne
#11 Tue 02 February 2021 15:07
- JuanLasso
- Juste Inscrit !
- Date d'inscription: 10 Dec 2019
- Messages: 4
Re: QGIS: Automatiser Exporter CSV en Shape
Bonjour,
Je suis sur 3.10.13 A Coruna
Hors ligne