#1 Wed 24 October 2018 17:44
- piedro25
- Participant occasionnel
- Date d'inscription: 22 Dec 2016
- Messages: 43
[Python ] crash de arc map
Bonjour à tous!
Je suis actuellement en train de développer un outil pour effectuer des analyses de sites.
Le but est de pouvoir trouver des sites selon des paramètres de distances.
Par exemple je voudrais trouver sur tel territoire un site qui soit à environ tant de mètres d'une école, d'une gare, d'une station de bus tout en évitant d'ommettre les zones qui correspondraient un peu moins aux caractéristiques mais qui pourraient s’avérer intéressantes
J'ai donc programmé un script python pour ensuite l'importer en tant que fonction dans arc map et afin pouvoir le distribuer comme outil. Histoire de permettre aux autres membres de ma direction de l'utiliser.
Seulement, le script semble bien marcher mais chaque fois arc map crash à la fin.
J'ai regardé plusieurs autres forum et je ne vois pas de cas similaire, ça fait deux jours que je m'arrache les cheveux dessus. J'ai tenté de simplifier le code, de donner des emplacements réseau solides, sans trop de sous dossiers, utiliser des géodatabases et force est de constater que ça ne marche pas.
Pensez -vous donc pouvoir me venir en aide ?
Je suis assez moyen en python peut-être ai-je omis d'utiliser une fonction importante.
Voici mon bloc de code.
Merci beaucoup !
Ps : si ça peut aider je travaille sur une licence en réseau c'est à dire pas installé directement sur mon ordinateurs, mais via citrix.
Code:
# -*- coding: utf-8 -*- # --------------------------------------------------------------------------- # Analyse_site.py # Import des modules import arcpy # arguments #Couches à utiliser pour l'analyse Couche1 = arcpy.GetParameterAsText(0) if Couche1 == '#' or not Couche1: Couche1 = "" # provide a default value if unspecified Couche2 = arcpy.GetParameterAsText(1) if Couche2 == '#' or not Couche2: Couche2 = "" # provide a default value if unspecified Couche3 = arcpy.GetParameterAsText(2) if Couche3 == '#' or not Couche3: Couche3 = "" # provide a default value if unspecified #Reclassification des couches Reclassification__1_ = arcpy.GetParameterAsText(3) if Reclassification__1_ == '#' or not Reclassification__1_: Reclassification__1_ = "" # provide a default value if unspecified Reclassification__3_ = arcpy.GetParameterAsText(4) if Reclassification__3_ == '#' or not Reclassification__3_: Reclassification__3_ = "" # provide a default value if unspecified Reclassification__2_ = arcpy.GetParameterAsText(5) if Reclassification__2_ == '#' or not Reclassification__2_: Reclassification__2_ = "" # provide a default value if unspecified #Distance des rasters Distance_maximale__1_ = arcpy.GetParameterAsText(6) Distance_maximale__2_ = arcpy.GetParameterAsText(7) Distance_maximale__3_ = arcpy.GetParameterAsText(8) #Définition de la taille des cellules Taille_de_cellule_en_sortie__1_ = arcpy.GetParameterAsText(9) if Taille_de_cellule_en_sortie__1_ == '#' or not Taille_de_cellule_en_sortie__1_: Taille_de_cellule_en_sortie__1_ = "30.0" # provide a default value if unspecified Taille_de_cellule_en_sortie__2_ = arcpy.GetParameterAsText(10) if Taille_de_cellule_en_sortie__2_ == '#' or not Taille_de_cellule_en_sortie__2_: Taille_de_cellule_en_sortie__2_ = "30.0" # provide a default value if unspecified Taille_de_cellule_en_sortie__3_ = arcpy.GetParameterAsText(11) if Taille_de_cellule_en_sortie__3_ == '#' or not Taille_de_cellule_en_sortie__3_: Taille_de_cellule_en_sortie__3_ = "30.0" # provide a default value if unspecified reclassification_finale_ponderee = r"F:\\ArcGIS\Default.gdb\reclassification_finale_ponderee" # variables: #Dossiers à utiliser pour les rasters Raster_de_direction_en_sortie = "" dist_3 = "F:\\dist_3" Reclass_dist3 = r"F:\Default.gdb\dist_3" dist_1 = "F:\\dist_1" Reclass_dist1 = r"F:\03ArcGIS\Default.gdb\dist_1" dist_2 = "F:\\dist_2" Reclass_dist2 = r"F:\ArcGIS\Default.gdb\dist2" recl_distfinal = "F:\\recl_distfinal" Raster_de_direction_en_sortie__2_ = "" Raster_de_direction_en_sortie__3_ = "" # Process: Distance euclidienne1 arcpy.gp.EucDistance_sa(Couche1, dist_1, Distance_maximale__1_, Taille_de_cellule_en_sortie__1_, Raster_de_direction_en_sortie__3_) # Process: Distance euclidienne2 arcpy.gp.EucDistance_sa(Couche2, dist_2, Distance_maximale__2_, Taille_de_cellule_en_sortie__2_, Raster_de_direction_en_sortie__2_) # Process: Distance euclidienne3 arcpy.gp.EucDistance_sa(Couche3, dist_3, Distance_maximale__3_, Taille_de_cellule_en_sortie__3_, Raster_de_direction_en_sortie) # Process: Reclassification_1 arcpy.gp.Reclassify_sa(dist_1, "VALUE", Reclassification__1_, Reclass_dist1, "DATA") # Process: Reclassification_2 arcpy.gp.Reclassify_sa(dist_2, "VALUE", Reclassification__2_, Reclass_dist2, "DATA") # Process: Reclassification_3 arcpy.gp.Reclassify_sa(dist_3, "VALUE", Reclassification__3_, Reclass_dist3, "DATA") # Process: Superposition pondérée arcpy.gp.WeightedOverlay_sa("('Reclass_dist1' 33 'VALUE' (;NODATA NODATA); 'Reclass_dist3' 33 'VALUE' (;NODATA NODATA); 'Reclass_dist2' 34 'VALUE' (;NODATA NODATA));1 9 1", reclassification_finale_ponderee)
Dernière modification par piedro25 (Wed 24 October 2018 17:46)
Hors ligne
#2 Fri 26 October 2018 09:58
- CarineS
- Participant occasionnel
- Date d'inscription: 19 Sep 2007
- Messages: 18
Re: [Python ] crash de arc map
Bonjour Piedro,
Je vois que vous générez vos résultats sur le lecteur F: . Est-ce un montage réseau qui pointe sur une autre machine ?
Si oui, une suggestion : avez-vous essayé de générer le résultat directement sur la machine où est installé arcgis. Lecteur C: par exemple ?
Dernière modification par CarineS (Fri 26 October 2018 09:59)
Hors ligne
#3 Fri 26 October 2018 10:18
- piedro25
- Participant occasionnel
- Date d'inscription: 22 Dec 2016
- Messages: 43
Re: [Python ] crash de arc map
Bonjour Carine
Les couches sont directement sauvegardées sur ma machine, j'ai effacé une partie des chemins utilisés avant de publier mon script sur le forum.
Comme dit précédemment, je travaille sur un arcgis installé en réseau qui ne conserve pas les emplacement configurés lors du lancement d'un script.
Par exemple quand je quitte ma session arc map et que je le relance, mon Model Builder est conservé mais tous les procès ne sont plus compris comme des variables. Ils ne sont plus colorés et il n'est plus possible de les relier à d'autres variables.
Je vais essayer cet après-midi avec un ordinateur où arcgis est directement installé et je vous en dirais des nouvelles.
Dernière modification par piedro25 (Fri 26 October 2018 10:20)
Hors ligne
#4 Mon 29 October 2018 09:31
- piedro25
- Participant occasionnel
- Date d'inscription: 22 Dec 2016
- Messages: 43
Re: [Python ] crash de arc map
Bon après avoir changé de pc et relancé mon script il se trouve que mon erreur provenait de deux paramètres.
Premièrement, il fallait bien spécifier à chaque fois dans le script l'espace de travail en début de script avec la commande suivante
Code:
arcpy.env.setworkspace(votre_espace_de_travail)
Le fait d'être en réseau faisait qu'il fallait effectivement le sauvegarder.
Deuxièmement (et c'est assez cocasse) il fallait faire attention... aux projections. Une de mes couches était projetée à la volée. Ainsi elle apparaissait en correspondance sur le papier mais pas dans la réalité. Du coup quand je lançais ma superposition pondérée la fonction ne trouvait pas de correspondances entre les couches vu qu'elles ne se superposait pas. Seulement, comme elle était spécifiées dans la fonction, cette dernière cherchait absolument une couche qui ne se superposait pas et crashait à la fin.
Voilà pour l'explication que j'ai trouvée !
Hors ligne