#1 Wed 02 March 2016 15:42
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
[ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
J'ai 140 fichiers dwg , je voudrais en extraire les polylignes puis filtrer sur un seul calque grâce à une expression SQL.
je tente avec l'outil classe d'entité vers classe d'entité mais cela ne fonctionne pas comme je le voudrais...
sinon le script python est il la meilleure solution?
Merci d'avance
Hors ligne
#2 Wed 02 March 2016 17:06
- JFBOIZET
- Participant actif
- Lieu: FREJUS
- Date d'inscription: 23 Jul 2012
- Messages: 145
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
Si vous disposez de FME, cet outil est surement plus adapté pour faire ce genre de transposition,
Cordialement,
Hors ligne
#3 Thu 03 March 2016 08:47
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
non non je ne dispose pas de FME.
Hors ligne
#4 Thu 03 March 2016 09:22
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
surement plus adapté
Je ne sais pas ...
Il est possible de faire des choses avec ArcGIS :
- un exemple de script Python : Utilisation de Python pour importer des données DAO vers une géodatabase
- l'outil DAO vers géodatabase (Conversion)
A+
Franck
Hors ligne
#5 Thu 03 March 2016 09:34
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
ok merci beaucoup!
Dernière modification par Ricola62 (Thu 03 March 2016 09:39)
Hors ligne
#6 Thu 03 March 2016 10:23
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Du coup j'ai adapté le script évoqué ci dessus:
Code:
# Name: ImportCADandMerge.py # Description: Imports and merges polylines from one workspace into a single feature class # Author: ESRI # Import system modules import arcpy from arcpy import env env.workspace = "G:/Expert/03_DGST/Poubelle/DAO" # Create a value table that will hold the input feature classes for Merge vTab = arcpy.ValueTable() # Step through each dataset in the list for fd in arcpy.ListDatasets("*", "CAD"): layername = fd + "_Layer" # Select only the Polyine features on the drawing layer R-EPIC-CANA arcpy.MakeFeatureLayer_management(fd + "/Polyline", layername, "\"Layer\" = 'R-EPIC-CANA'") vTab.addRow(layername) # Merge the CAD features into one feature class arcpy.Merge_management(vTab, "G:/Expert/03_DGST/Poubelle/DAO.mdb/EPIC")
le soucis c'est qu'il me met ce genre d'erreur
Traceback (most recent call last):
File "G:\Expert\03_DGST\Scripts_Python\epic.py", line 18, in <module>
arcpy.Merge_management(vTab, "G:/Expert/03_DGST/Poubelle/DAO.mdb/EPIC")
File "C:\Applications\ArcGIS\Desktop10.0\ArcPy\arcpy\management.py", line 3124, in Merge
raise e
ExecuteError: Échec de l’exécution. Les paramètres ne sont pas valides.
ERROR 000735: Jeux de données en entrée : Valeur requise
Échec de l’exécution de (Merge).
le problème serait du à au paramètre en entrée.
enfin je comprend pas trop...
Hors ligne
#7 Thu 03 March 2016 12:21
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
J'ai l'impression que c'est le filtre qui ne fonctionne pas :
Code:
arcpy.ListDatasets("*", "CAD")
Il faudrait peut-être essayer ce filtre :
Code:
arcpy.ListDatasets("*.dwg")
A+
Franck
Hors ligne
#8 Thu 03 March 2016 15:11
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Ok j'ai fais les modif.
et j'obtiens l'erreur suivante
Traceback (most recent call last):
File "G:\Expert\03_DGST\Scripts_Python\epic.py", line 16, in <module>
vTab.addRow(layername)
File "C:\Applications\ArcGIS\Desktop10.0\arcpy\arcpy\arcobjects\arcobjects.py", line 1098, in addRow
return convertArcObjectToPythonObject(self._arc_object.AddRow(*gp_fixargs(args)))
RuntimeError: ERROR 999999: Erreur lors de l’exécution de la fonction.
Hors ligne
#9 Thu 03 March 2016 20:02
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
Il sont comment les noms de tes fichiers DWG ?
Dans un format DOS 8 caractères sans accent et sans caractères spéciaux ou dans un format "moderne" ?
Pourrais-tu essayer d'afficher les noms des couches crées et regarder s'il te semble "bizarre" ?
Il faut ajouter dans la boucle du code :
Code:
print '_{0}_'.format(layername)
Code:
# Name: ImportCADandMerge.py # Description: Imports and merges polylines from one workspace into a single feature class # Author: ESRI # Import system modules import arcpy from arcpy import env env.workspace = "G:/Expert/03_DGST/Poubelle/DAO" # Create a value table that will hold the input feature classes for Merge vTab = arcpy.ValueTable() # Step through each dataset in the list for fd in arcpy.ListDatasets("*.dwg"): layername = fd + "_Layer" print '_{0}_'.format(layername) # Select only the Polyine features on the drawing layer R-EPIC-CANA arcpy.MakeFeatureLayer_management(fd + "/Polyline", layername, "\"Layer\" = 'R-EPIC-CANA'") vTab.addRow(layername) # Merge the CAD features into one feature class arcpy.Merge_management(vTab, "G:/Expert/03_DGST/Poubelle/DAO.mdb/EPIC")
Tu pourrais aussi essayer sur 1 ou 2 fichiers pour commencer...
A+
Franck
Hors ligne
#10 Fri 04 March 2016 10:34
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
Ce script fonctionne chez moi sur "ArcGIS for Desktop 10.2.1".
Code:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ Name: ImportCADandMerge.py Description: Imports and merges polylines from one workspace into a single feature class Author: ESRI """ # Import system modules import arcpy #------------------------------------------------------------------------------- # MAIN #------------------------------------------------------------------------------- def main(): """ Main du module : importe un calque de plusieurs DWG dans une classe d'entites d'une FGDB (elle doit exister) """ # Ecrase la classe d'entites cible si elle existe arcpy.env.overwriteOutput = True #Espace de travail ou sont les fichiers DWG arcpy.env.workspace = r'D:\Personnel\georezo\Python\ImportCADandMerge\DWG' # Create a value table that will hold the input feature classes for Merge vtab = arcpy.ValueTable() # WhereClause : calque DWG que l'on veut importer whereclause = "\"Layer\" = 'BATDUR'" # Step through each dataset in the list for fdataset in arcpy.ListDatasets('*.dwg'): layername = '{0}_Layer'.format(fdataset) ## print '_{0}_'.format(layername) # Select only the Polyine features on the drawing layer (whereclause) arcpy.MakeFeatureLayer_management(r'{0}\Polyline'.format(fdataset) , layername , whereclause) vtab.addRow(layername) # Merge the CAD features into one feature class mergefc = r'D:\Personnel\georezo\Python\ImportCADandMerge\DAO.gdb\ImportCAD' arcpy.Merge_management(vtab, mergefc) return True if __name__ == '__main__': STATUS = main() #===============================================================================
J'ai testé l'import de 6 fichiers DWG (les noms des fichiers sont de ce type : '1042500-6298500.dwg').
En espérant que cela t'aide.
A+
Franck
Hors ligne
#11 Tue 08 March 2016 17:38
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Merci alors effectivement pour 3 ou 4 fichiers cela marche mais pours 145 fichiers dwg, cela semble plus compliqué!
j'ai des fichiers du type "SECTEUR-PARC DU GOLFE-POINTSHORSMNT.dwg" ou "SECTEUR-PARC DU VINCIN-INTERIEUR-NIVEAU +1.dwg" ou "SECTEUR-NOYALO.dwg"
est ce que ce ne serait pas un problème "d'encodement"?
J'ai ainsi un peu modifié le script ci dessus
Code:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ Name: ImportCADandMerge.py Description: Imports and merges polylines from one workspace into a single feature class Author: ESRI """ # Import system modules import arcpy #------------------------------------------------------------------------------- # MAIN #------------------------------------------------------------------------------- def main(): """ Main du module : importe un calque de plusieurs DWG dans une classe d'entites d'une FGDB (elle doit exister) """ # Ecrase la classe d'entites cible si elle existe arcpy.env.overwriteOutput = True #Espace de travail ou sont les fichiers DWG arcpy.env.workspace = r'G:\Expert\03_DGST\Poubelle\DAO' # Create a value table that will hold the input feature classes for Merge vtab = arcpy.ValueTable() # WhereClause : calque DWG que l'on veut importer whereclause = "\"Layer\" = 'R-EPIC-CANA'" # Step through each dataset in the list for fdataset in arcpy.ListDatasets('*.dwg'): layername = u'{0}_Layer'.format(fdataset) ## print '_{0}_'.format(layername) # Select only the Polyline features on the drawing layer (whereclause) arcpy.MakeFeatureLayer_management(u'{0}\Polyline'.format(fdataset) , layername , whereclause) vtab.addRow(layername) # Merge the CAD features into one feature class mergefc = r'G:/Expert/03_DGST/Poubelle/DAO.gdb/EPIC' arcpy.Merge_management(vtab, mergefc) return True if __name__ == '__main__': STATUS = main() #===============================================================================
Mais j'ai l'erreur suivante
Traceback (most recent call last):
File "G:\Expert\03_DGST\Scripts_Python\ExtractLayerDAO.py", line 51, in <module>
STATUS = main()
File "G:\Expert\03_DGST\Scripts_Python\ExtractLayerDAO.py", line 42, in main
vtab.addRow(layername)
File "C:\Applications\ArcGIS\Desktop10.0\arcpy\arcpy\arcobjects\arcobjects.py", line 1098, in addRow
return convertArcObjectToPythonObject(self._arc_object.AddRow(*gp_fixargs(args)))
RuntimeError: ERROR 999999: Erreur lors de l’exécution de la fonction.
Merci d'avance
Hors ligne
#13 Wed 09 March 2016 09:29
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
_SECTEUR-ARSENAL-NIVEAUINFERIEUR.dwg_Layer_
_SECTEUR-ARSENAL-NIVEAUSUPERIEUR.dwg_Layer_
_SECTEUR-ARSENAL-POINTSHORSMNT.dwg_Layer_
_SECTEUR-CENTRE-EST-INTERIEUR-NIVEAU +2.dwg_Layer_
Traceback (most recent call last):
File "G:\Expert\03_DGST\Scripts_Python\ExtractLayerDAO.py", line 50, in <module>
main()
File "G:\Expert\03_DGST\Scripts_Python\ExtractLayerDAO.py", line 41, in main
vtab.addRow(layername)
File "C:\Applications\ArcGIS\Desktop10.0\arcpy\arcpy\arcobjects\arcobjects.py", line 1098, in addRow
return convertArcObjectToPythonObject(self._arc_object.AddRow(*gp_fixargs(args)))
RuntimeError: ERROR 999999: Erreur lors de l’exécution de la fonction.
C'est désormais sur! après plusieurs test c'est le +1 qui coince car le fichier dans son contenu est identique à ceux qui le précède.
Merci d'avance
Hors ligne
#14 Wed 09 March 2016 11:05
Re: [ARCGIS10] Importer polylignes de fichier DWG
Hello,
J'ai l'impression que c'est le "+" dans les noms de fichiers qui coince...
Si j'ajoute ce caractère dans le nom d'un de mes fichiers DWG, le script ne passe plus...
Peut-être que tu pourrais essayer de remplacer "+" par "plus" dans les noms de fichiers... ou d'ajouter la ligne suivante dans le script :
Code:
layername = layername.replace(' +', 'plus')
pour enlever le caractère "+" des noms de couches
Ou mieux, modifier le script comme ci-dessous pour le rendre plus "robuste" et ne pas utiliser le nom des fichiers DWG pour créer le nom des couches :
Code:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ Name: ImportCADandMerge.py Description: Imports and merges polylines from one workspace into a single feature class Author: ESRI """ # Import system modules import arcpy #------------------------------------------------------------------------------- # MAIN #------------------------------------------------------------------------------- def main(): """ Main du module : importe un calque de plusieurs DWG dans une classe d'entites d'une FGDB (elle doit exister) """ # Ecrase la classe d'entites cible si elle existe arcpy.env.overwriteOutput = True #Espace de travail ou sont les fichiers DWG arcpy.env.workspace = r'D:\Personnel\georezo\Python\ImportCADandMerge\DWG' # Create a value table that will hold the input feature classes for Merge vtab = arcpy.ValueTable() # WhereClause : calque DWG que l'on veut importer whereclause = "\"Layer\" = 'water_distribution_lines'" nbfiledwg = 0 # Step through each dataset in the list for fdataset in arcpy.ListDatasets('*.dwg'): ## layername = '{0}_Layer'.format(fdataset) ## layername = layername.replace(' +', 'plus') layername = 'dwg_{0}_Layer'.format(nbfiledwg) ## print '_{0}_'.format(layername) # Select only the Polyine features on the drawing layer (whereclause) arcpy.MakeFeatureLayer_management(r'{0}\Polyline'.format(fdataset) , layername , whereclause) vtab.addRow(layername) nbfiledwg = nbfiledwg +1 # Merge the CAD features into one feature class mergefc = r'D:\Personnel\georezo\Python\ImportCADandMerge\DAO.gdb\ImportCAD' arcpy.Merge_management(vtab, mergefc) #fin print '{0} fichiers DWG importes'.format(nbfiledwg) return True if __name__ == '__main__': STATUS = main() #===============================================================================
A+
Franck
Hors ligne
#15 Wed 09 March 2016 12:19
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Super Merci ça marche impec
A+
Hors ligne
#16 Thu 10 March 2016 12:17
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Super Merci ça marche impec
A+
en fait pas tant que ça
Code:
Python 2.6.5 #!/usr/bin/env python # -*- coding: UTF-8 -*- """ Name: ImportCADandMerge.py Description: Imports and merges polylines from one workspace into a single feature class Author: ESRI """ # Import system modules import arcpy #------------------------------------------------------------------------------- # MAIN #------------------------------------------------------------------------------- def main(): """ Main du module : importe un calque de plusieurs DWG dans une classe d'entites d'une FGDB (elle doit exister) """ # Ecrase la classe d'entites cible si elle existe arcpy.env.overwriteOutput = True #Espace de travail ou sont les fichiers DWG arcpy.env.workspace = r'G:\Expert\03_DGST\Poubelle\DAO' # Create a value table that will hold the input feature classes for Merge vtab = arcpy.ValueTable() # WhereClause : calque DWG que l'on veut importer whereclause = "\"Layer\" = 'R-EPIC-CANA'" nbfiledwg = 0 # Step through each dataset in the list for fdataset in arcpy.ListDatasets('*.dwg'): layername = u'{0}_Layer'.format(fdataset) layername = layername.replace(' -', 'moins') layername = layername.replace(' +', 'plus') layername = layername.replace(' ','-') print u'_{0}_'.format(layername) # Select only the Polyine features on the drawing layer (whereclause) arcpy.MakeFeatureLayer_management(u'{0}\Polyline'.format(fdataset) , layername , whereclause) vtab.addRow(layername) nbfiledwg = nbfiledwg +1 # Merge the CAD features into one feature class mergefc = u'G:/Expert/03_DGST/Poubelle/DAO.gdb/EPIC' arcpy.Merge_management(vtab, mergefc) #fin print u'{0} fichiers DWG importes'.format(nbfiledwg) return True if __name__ == '__main__': main() #===============================================================================
donc j'ai l'erreur suivante:
Traceback (most recent call last):
File "G:\Expert\03_DGST\Scripts_Python\jui.py", line 54, in <module>
main()
File "G:\Expert\03_DGST\Scripts_Python\jui.py", line 49, in main
arcpy.Merge_management(vtab, mergefc)
File "C:\Applications\ArcGIS\Desktop10.0\arcpy\arcpy\management.py", line 3124, in Merge
raise e
ExecuteError: ERROR 000278: Failed on input OID 11443, could not write value ‘’ to output field ZREGARD
Échec de l’exécution de (Merge).
je pige pas d'où vient ce champ ZREGARD ou ZTERRAIN... ils se créent dans la Table du fichier créé.
c'est bizarre un ou deux fichiers le script fonctionne bien. c'est comme siau bout d'un certain nombre de fichier , c'est compliqué de fusionner toutes les polylignes.
Si vous pouvez m'aider (j'espère ) une dernière fois.
merci d'avance
Hors ligne
#17 Thu 10 March 2016 14:51
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
Cette erreur ERROR 000278 (le texte de l'erreur ne correspond pas à ce numéro mais au numéro 001156) pourrait être du à des fichiers DWG qui n'ont la même structure...
Ce post donne une solution pour trouver le fichier d'origine ne correspondant pas aux autres...
A+
Franck
Hors ligne
#18 Fri 11 March 2016 10:22
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Ok merci j'ai pu voir de quelle erreur il s'agissait
En effet il s'agit d'un problème de format pour des champs identiques
par exemple ZTERRAIN est de format Texte sur la Classe d'entité1 et Double sur la Classe d'entité2
donc lors de l'exécution de Merge il y a conflit!
la solution la plus efficace serait de sélectionner les champs que l'on veut appareiller, du coup avoir seulement 3 champs dans la table en sortie
je sais que je dois utiliser la fonction fieldmapping () mais je n'arrive pas vraiment à me dépatouiller avec l'aide arcgis sur cette fonction.
pouvez m'éclairer !
Merci d'avance
Dernière modification par Ricola62 (Fri 11 March 2016 10:23)
Hors ligne
#19 Fri 11 March 2016 16:13
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
Quelque chose de ce genre avec arcpy.FieldInfo() fonctionne :
Code:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ Name: ImportCADandMerge.py Description: Imports and merges polylines from one workspace into a single feature class Author: ESRI http://desktop.arcgis.com/fr/desktop/latest/manage-data/cad/using-python-to-load-cad-data.htm """ # Import system modules import arcpy #------------------------------------------------------------------------------- # MAIN #------------------------------------------------------------------------------- def main(): """ Main du module : importe un calque de plusiuers DWG dans une classe d'entites d'une FGDB (elle doit exister) """ # Ecrase la classe d'entites cible si elle existe arcpy.env.overwriteOutput = True # Espace de travail ou sont les fichiers DWG arcpy.env.workspace = r'D:\Personnel\georezo\Python\ImportCADandMerge\DWG' # Create a value table that will hold the input feature classes for Merge vtab = arcpy.ValueTable() # WhereClause : calque DWG que l'on veut importer whereclause = "\"Layer\" = 'BATDUR'" # Choix des champs que l'on veux garder : Layer, Color, DocName et DocType champsaconsever = ["Layer", "Color", "DocName", "DocType"] #compteur des fichiers DWG nbfiledwg = 0 # Step through each dataset in the list for fdataset in arcpy.ListDatasets('*.dwg'): ## layername = '{0}_Layer'.format(fdataset) ## layername = layername.replace(' +', 'plus') layername = 'dwg_{0}_Layer'.format(nbfiledwg) ## print '_{0}_'.format(layername) # Get the fields from the input fields = arcpy.ListFields(fdataset) # Create a fieldinfo object fieldinfo = arcpy.FieldInfo() # Iterate through the fields and set them to fieldinfo for field in fields: if field.name in champsaconsever: fieldinfo.addField(field.name, field.name, "VISIBLE", "") else: fieldinfo.addField(field.name, field.name, "HIDDEN", "") # Select only the Polyine features on the drawing layer (whereclause) arcpy.MakeFeatureLayer_management(r'{0}\Polyline'.format(fdataset) , layername , whereclause , '' , fieldinfo) # Creation ajout de la couches dans la liste des couches a fusionner try: vtab.addRow(layername) nbfiledwg = nbfiledwg +1 except Exception, errordesc: print arcpy.GetMessages() errmesg = 'PYTHON ERRORS: {0}'.format(errordesc) print errmesg print "Echec de l'ajout de la couche {0} ({1})".format(layername, fdataset) # Merge the CAD features into one feature class mergefc = r'D:\Personnel\georezo\Python\ImportCADandMerge\DAO.gdb\ImportCAD' try: arcpy.Merge_management(vtab, mergefc) except Exception, errordesc: print arcpy.GetMessages() errmesg = 'PYTHON ERRORS: {0}'.format(errordesc) print errmesg # Fin print '{0} fichiers DWG importes et fusionnes'.format(nbfiledwg) return True if __name__ == '__main__': STATUS = main() #===============================================================================
Bon WE
Franck
Hors ligne
#20 Tue 15 March 2016 11:08
- Ricola62
- Participant assidu
- Date d'inscription: 24 Apr 2012
- Messages: 167
Re: [ARCGIS10] Importer polylignes de fichier DWG
Bonjour,
j'utilise donc ce script pour un dossier contenant 140 fichiers dwg sauf que le script fusionne seulement les 4 ou 5 premiers dwg. La même chose si je sépare les fichiers par 10 ou 20.
la mémoire (jeu de travail privé) dans les processus du Gestionnaire des taches atteint 3 000 000K, je me demande du coup si le script est pas trop "lourd" à traité avec 140 fichiers d'un coup.
Je me demande aussi si il est plus judicieux d'utiliser le script dans arcmap via une boite à outils ou en autonome IDLE ou cmd.
avez vous une explication?
Merci d'avance
Hors ligne