Pages: 1
- Sujet précédent - [ArcGIS 10.1] Calculateur de champs : comparer des valeur - Sujet suivant
#1 Mon 24 November 2014 16:54
- Pivès001
- Participant actif
- Date d'inscription: 23 Jan 2008
- Messages: 138
[ArcGIS 10.1] Calculateur de champs : comparer des valeur
Bonjour, je bloque sur une manipulation dans le calculateur de champs :
J'ai des ilots dans lesquels se trouvent une ou plusieurs cultures (stockées dans différents champs). Chaque culture à 3 champs : code culture, libellé et surface. Je cherche à comparer les valeurs de surfaces, ne garder que la valeur max (jusque là ça va) et rapatrier le libellé de la culture associé.
J'ai donc cherché du coté du if mais j'ai un pb de syntaxe. Voilà ce que j'ai mis dans mon champ CULT_MAJ (=culture majoritaire) :
Code:
def Calcul(S_CULT_MAJ,S_CULT01, LIB_CULT01): if (S_CULT01==S_CULT_MAJ): return LIB_CULT01 else: return 0
Code:
Calcul(!S_CULT_MAJ!,!S_CULT01!, !LIB_CULT01!)
C'est un exemple où S_CULT01 serait la culture majoritaire et S_CULT_MAJ est la surface de ma culture dominante (calculé précédemment par un max). Je dois très mal m'y prendre puisque cela ne donne rien et j'ai beau regarder des syntaxes à droite à gauche, cela semble assez proche. De plus il y a surement possibilité de comparer sur l'ensemble des cultures avec des conditions imbriquées (j'ai 10 colonnes cultures).
Si quelqu'un à une idée, je suis preneur.
ps: j'ai mis un doc excel pour voir comment est structurée la table.
Dernière modification par Pivès001 (Mon 24 November 2014 17:01)
Hors ligne
#2 Mon 24 November 2014 20:35
- Pivès001
- Participant actif
- Date d'inscription: 23 Jan 2008
- Messages: 138
Re: [ArcGIS 10.1] Calculateur de champs : comparer des valeur
J'ai un début de résultat. Dans ce calcul je compare la surface de mes 10 cultures à la valeur de ma surface maximale (que j'avais calculé au préalable avec un max), ce qui donne un code à rallonge mais qui fonctionne :
Code:
def myCalc(surfMax,surf01,surf02,surf03,surf04,surf05,surf06,surf07,surf08,surf09,surf10,lib01,lib02,lib03,lib04,lib05,lib06,lib07,lib08,lib09,lib10 ): if (surf01 == surfMax): return lib01 elif (surf02 == surfMax): return lib02 elif (surf03 == surfMax): return lib03 elif (surf04 == surfMax): return lib04 elif (surf04 == surfMax): return lib04 elif (surf05 == surfMax): return lib05 elif (surf06 == surfMax): return lib06 elif (surf07 == surfMax): return lib07 elif (surf08 == surfMax): return lib08 elif (surf09 == surfMax):
Code:
myCalc(!S_CULT_MAJ!,!S_CULT01!,!S_CULT02!,!S_CULT03!,!S_CULT04!,!S_CULT05!,!S_CULT06!,!S_CULT07!,!S_CULT08!,!S_CULT09!,!S_CULT10!,!CULT01!,!CULT02!,!CULT03!,!CULT04!,!CULT05!,!CULT06!,!CULT07!,!CULT08!,!CULT09!,!CULT10!)
Il faudrait que j'y intègre le calcul du max car dans ce code si 2 cultures ont la même surface je n'aurais que le code de la dernière trouvée. L'idéal serait de pouvoir l'identifier avec un code à part (XX par exemple).
Je cherche toujours mais si quelqu'un à une idée qu'il/elle n'hésite pas.
Hors ligne
Pages: 1
- Sujet précédent - [ArcGIS 10.1] Calculateur de champs : comparer des valeur - Sujet suivant