#1 Tue 23 July 2019 15:25
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
QGIS: Script Python pour Georeferencer des DXF / Shape ?
Bonjour,
Je suis embêtée depuis quelques jours. J'ai reçu des fichiers en format dxf correspondant à des données réseaux.
Malheureusement ces données sont mal géoréférencées, et, il faut que je les passe tous en .shp pour pouvoir les intégrer dans notre SIG.
C'est une manipulation totalement faisable à la maison, mais le nombre de fichier est très important, les reprendre un par un prend un temps considérable.
Je sais qu'il est possible de créer des script en langage python directement dans qgis permettant d'automatiser des manipulations.
J'aurai aimé savoir s'il était possible de créer des script pour modifier les formats des fichiers tout en modifiant le géoréférencement?
Tout ça sachant qu'un fichier dxf contient des données points, lignes, et polygone, et qu'il faut donc derrière créer 3 shape différents.
Si ceci est possible, ça me ferai gagner un temps très précieux, sinon j'en ai pour l'été....
Merci beaucoup, ML
Hors ligne
#2 Tue 23 July 2019 15:48
- Patrice
- JeSuisCharlie
- Date d'inscription: 16 Sep 2005
- Messages: 4793
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Hello
Tu as combien de DXF a traiter ?
SVP peux tu nous joindre en ZIP (Max = 500 Ko) l'un de tes DXF ??
Et quel est le Deplacement XY + Rotation ou Georeferencement a realiser ???
GeoBye, Pat
(Autodesk Expert Elite Team)
Hors ligne
#3 Tue 23 July 2019 15:59
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
J'ai presque 3000 dxf à traiter...
J'en ai déjà fait plus de 400 à la main mais vu ce qu'il reste encore je vais jamais voir le bout...
Les dxf sont en Lambert II et il me faut les shape en Lambert 93.
Hors ligne
#4 Tue 23 July 2019 17:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
ogr2ogr to the rescue :
En ligne de commande avec le shell osgeo4w,
si vous êtes sous Windows :
Code:
FORFILES /p C:\chemin\vers\les\dxfs /m *.dxf /c "ogr2ogr -t_srs EPSG:2154 @fname.shp @file"
Sous Linux/mac :
Code:
find /chemin/vers/les/dxf -type f -iname *.dxf -exec bash -c "B=${0%.*}; ogr2ogr -t_srs EPSG:2154 $B.shp $0" {} \;
Faites une sauvegarde de vos fichiers dxf avant d'essayer quand même, histoire d'éviter une catastrophe.
En ligne
#5 Tue 23 July 2019 17:44
- Patrice
- JeSuisCharlie
- Date d'inscription: 16 Sep 2005
- Messages: 4793
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Hello
Sinon en theorie le Super Outil gratuit IGNMAP de l'IGN est capable de reprojeter en Batch N fichiers DXF !?
GeoBye, Pat
(Autodesk Expert Elite Team)
Hors ligne
#6 Wed 24 July 2019 09:27
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
tumasgiu: Merci pour les codes. Si je comprends bien il faut avoir installé ogr2ogr pour que la commande fonctionne sous windows?
Si c'est le cas, où trouver un lien de téléchargement sur?
Patrice: Super idée ce logiciel, mais quand je veux l'installer mon antivirus s'affole...
En tout cas merci à tous les deux pour votre aide!
Hors ligne
#7 Wed 24 July 2019 09:43
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
tumasgiu: Merci pour les codes. Si je comprends bien il faut avoir installé ogr2ogr pour que la commande fonctionne sous windows?
Si c'est le cas, où trouver un lien de téléchargement sur?
Logiquement, si QGIS est installé sur votre machine, vous devez avoir aussi installé le shell osgeo4w,
qui comprends tout un tas d'outils en ligne de commande, comme la famille gdal/ogr.
En ligne
#8 Wed 24 July 2019 10:17
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Ah ok, super alors je vais le tester comme ça.
Merci beaucoup!
Hors ligne
#9 Wed 24 July 2019 10:58
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Alors, je ne connais pas du tout le langage python, donc.... Il semble qu'une partie de ma commande ne lui plaise pas. Le chemin d'accès aux dxf comprend des "-" et ça me passe une partie de la ligne en rouge.
J'imagine que si c'est comme le SQL il y a des symboles qui ne passent pas comme ça?
Hors ligne
#10 Wed 24 July 2019 12:12
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Alors, en testant avec mon chemin pour arriver jusqu'aux dxf que j'ai enregistré sur mon bureau pour faciliter l'accès, j'ai ce message d'erreur :
Traceback (most recent call last):
File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\code.py", line 63, in runsource
code = self.compile(source, filename, symbol)
File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\codeop.py", line 168, in __call__
return _maybe_compile(self.compiler, source, filename, symbol)
File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\codeop.py", line 99, in _maybe_compile
raise err1
File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\codeop.py", line 87, in _maybe_compile
code1 = compiler(source + "\n", filename, symbol)
File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\codeop.py", line 133, in __call__
codeob = compile(source, filename, symbol, self.flags, 1)
File "<input>", line 1
FORFILES /p C:\Users\lamarrem\Desktop\COUFFE /m *.dxf /c "ogr2ogr -t_srs EPSG:2154 @fname.shp @file"
^
SyntaxError: invalid syntax
Je ne sais pas du tout traduire pour savoir ce qui ne lui plait pas dans la commande...
Hors ligne
#11 Wed 24 July 2019 13:13
- neskuik01
- Participant assidu
- Date d'inscription: 16 Feb 2015
- Messages: 199
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Alors, je ne connais pas du tout le langage python, donc.... Il semble qu'une partie de ma commande ne lui plaise pas. Le chemin d'accès aux dxf comprend des "-" et ça me passe une partie de la ligne en rouge.
J'imagine que si c'est comme le SQL il y a des symboles qui ne passent pas comme ça?
Et si tu copies tes fichiers .dxf dans un autre répertoire pour tester genre c:\fichdxf\ ? Tu as bien lancé la commande dans l'invité de commande osgeo ?
C:\Users\lamarrem\Desktop\COUFFE => COUFFE c'est le répertoire ?
Si oui peut être tester avec "C:\Users\lamarrem\Desktop\COUFFE\" ?
Hors ligne
#12 Wed 24 July 2019 13:58
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
En fait mes fichiers sont stockés dans un serveur linux donc j'ai copié le dossier qui se nomme "COUFFE" sur mon bureau tout simplement.
Parce que le chemin pour aller chercher les fichiers dans le serveur sont très long, j'avais peur que ça soit trop long.
L'invité de commande osgeo? J'ai lancé dans la console python....
Hors ligne
#13 Wed 24 July 2019 14:21
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Alors j'ai relancé la commande mais cette fois dans le shell OSGeo4W et ça a fait quelque chose, j'ai pas l'impression d'avoir de message d'erreur, mais je ne vois pas non plus où seraient stockés les nouveaux fichiers.
Je suis un peu perdue, c'est vraiment pas mon travail habituel...
Hors ligne
#14 Wed 24 July 2019 14:24
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Ah si un message d'erreur par fichier j'imagine:
FAILURE:
Unable to open datasource `2008-048-0819.shp' with the following drivers.
Hors ligne
#15 Wed 24 July 2019 16:12
- neskuik01
- Participant assidu
- Date d'inscription: 16 Feb 2015
- Messages: 199
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Je n'ai jamais travailler avec osgeo perso , donc tous ce que je te dis sera à prendre avec des pincettes. Peux-tu envoyer un la commande que tu as rentré ?
Hors ligne
#16 Wed 24 July 2019 16:34
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
FORFILES /p C:\Users\lamarrem\Desktop\COUFFE /m *.dxf /c "ogr2ogr -t_srs EPSG:2154 @fname.shp @file"
Hors ligne
#17 Wed 24 July 2019 16:39
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Désolé,
j'ai pas testé le code avant de vous le proposer.
Le voici corrigé :
Code:
forfiles /p I:\Temp\Tests\ /m *.dxf /c "cmd /c ogr2ogr -t_srs EPSG:2154 @fname.shp @file"
Par contre, j'ai essayé avec votre dxf test, et ogr m'a indiqué qu'il n'y avait pas d'information
de projection source (il manque le SCR).
Si vos fichiers de travail comportent cette info, pas de problème,
sinon vous pouvez le "forcer" avec l'option :
-s_srs EPSG:27572
Dernière modification par tumasgiu (Wed 24 July 2019 17:53)
En ligne
#18 Wed 24 July 2019 16:51
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Merci, je vais réessayer du coup.
Effectivement quand j'ouvre mes fichiers sur QGis je dois donner le SCR, donc il ne doit pas être indiqué dans le fichier.
La commande -s_srs EPSG:27572 est à placer à quel endroit?
Hors ligne
#19 Wed 24 July 2019 17:33
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
juste après ogr2ogr.
J'ai donné le code EPSG Lambert Zone II,
mais vérifiez si c'est vraiment celui qu'il vous faut.
En ligne
#20 Thu 25 July 2019 08:23
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Donc j'ai essayé avec cette commande:
forfiles /p C:\Users\lamarrem\Desktop\COUFFE\ /m *.dxf /c "cmd /c ogr2ogr -s_srs EPSG:27572 -t_srs EPSG:2154 @fname.shp @file"
et j'obtiens ce message d'erreur:
SyntaxError: invalid syntax
Dernière modification par LamarreM (Thu 25 July 2019 08:29)
Hors ligne
#21 Thu 25 July 2019 09:35
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
SyntaxError: invalid syntax
Ca ressemble à du Python çà.
Il faut lancer la commande dans le terminal Osgeo4w
(le programme s'appelle Osgeo4w shell)
Dernière modification par tumasgiu (Thu 25 July 2019 09:38)
En ligne
#22 Thu 25 July 2019 09:58
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Je viens de m'apercevoir que le type de geometrie
de votre dxf est GeometryCollection.
Ce type n'est pas supporté par le format Shape !
En ligne
#23 Thu 25 July 2019 10:42
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Oui pardon, j'ai instinctivement activé le python dans le shell.
Alors le nouveau test est beaucoup plus concluant puisque j'ai réussit à récupérer des shape.
Et ce message d'erreur a chaque fichier:
Warning 6: Normalized/laundered field name: 'EntityHandle' to 'EntityHand'
ERROR 1: Attempt to write non-linestring (POINT) geometry to ARC type shapefile.
ERROR 1: Unable to write feature 34 from layer entities.
ERROR 1: Terminating translation prematurely after failed
translation of layer entities (use -skipfailures to skip errors)
Dans les nouveau shape j'ai soit des points, soit des lignes, soit des polygones, c'est aléatoire en fonction des fichiers et il manque dans tous les cas des éléments, comme si l'extraction n'a pas été complète.
Dernière modification par LamarreM (Thu 25 July 2019 10:54)
Hors ligne
#24 Thu 25 July 2019 11:15
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Oui,
comme je vous l'explique dans mon précédent message,
vos dxf contiennent entités avec plusieurs types de géométrie
différents, le format ShapeFile ne peut pas gérer cela,
une couche doit posséder des géométries d'un seul type.
Si vous voulez vraiment utiliser le format Shape,
il va falloir pour chaque shape, créer autant de couches
que de types de géometries.
Je ne sais pas si Ogr2Ogr est capable de le faire automatiquement.
Si ce n'est pas le cas, un script python serait plus pratique.
En ligne
#25 Thu 25 July 2019 11:31
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
D'accord, je comprend bien le problème...
Un script python serait compliqué à mettre en place pour ce genre de chose?
Hors ligne
#26 Thu 25 July 2019 11:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Non, ca ne devrait pas être trop compliqué,
mais quand même un plus que de changer de format de sortie,
si c'est possible.
En ligne
#27 Thu 25 July 2019 11:49
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Est ce que vous arriveriez à en faire un?
Je ne connais pas du tout le python, je commence tout juste à lire un cours de débutant donc je suis très loin de pouvoir écrire un script comme ça.
Hors ligne
#28 Thu 25 July 2019 16:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Je pourrais vous aider à en écrire un, oui.
C'est certainement à votre portée.
En ligne
#29 Mon 29 July 2019 13:37
- LamarreM
- Participant occasionnel
- Date d'inscription: 6 May 2019
- Messages: 29
Re: QGIS: Script Python pour Georeferencer des DXF / Shape ?
Bonjour,
Après une grande aide de la part de umasgiu, merci encore, nous avons trouvé une solution à mon problème.
L'idée est d'extraire en plusieurs fais en précisant à chaque fois le type de géométrie voulu, ce qui me créé des répertoires contenant les shape extrait par géométrie. On ajoute également une commande pour préciser le nom que l'on veut donner aux fichiers pour mieux s'y retrouver, et le tour est joué!
La commande donne donc:
forfiles /p I:\Tests /m *.dxf /c "cmd /c ogr2ogr -nln entities_lines -where \"OGR_GEOMETRY='Point'\" -s_srs EPSG:27572 -t_srs EPSG:2154 -f \"ESRI Shapefile\" @fname @file"
Avec nln nom du fichier
et where pour préciser la géométrie à extraire.
Cela pourra peut être resservir à quelqu'un un jour.
Encore merci pour le temps passé à m'aider!
ML
Hors ligne