banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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

 

Pied de page des forums

Powered by FluxBB