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é ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB