Existe-t-il un moyen de calculer un champ trié avec des nombres séquentiels? J'ai vu Classe d'entités de tri pour calculer un champ d'ID séquentiel à l'aide d'ArcGIS Field Calculator? qui explique comment calculer les nombres séquentiels, mais cela est toujours calculé sur ordre FID, pas sur ordre trié.
#Pre-logic Script Code:
rec=0
def autoIncrement():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec += pInterval
return rec
#Expression:
autoIncrement()
Un exemple de ce que j'essaie de faire. J'ai utilisé un tri avancé pour trier par année, mois, jour et je souhaite maintenant avoir des numéros séquentiels dans le Seq
champ. Vous verrez que mon OBJECTID
champ n'est pas en ordre, donc le code ci-dessus ne fonctionnera pas.
Cela peut-il être fait dans la calculatrice de champ ou en utilisant un curseur de mise à jour dans arcpy?
Réponses:
"Solution" avec 2 champs triés (croissant):
--------------------------------------
VERSION MISE À JOUR:
-----------------------
prend 1,5 seconde pour terminer la tâche sur 10000 enregistrements. L'original prend un peu plus de 2 minutes
la source
Il s'agit d'un processus en deux étapes et, par conséquent, la calculatrice de champ ne lui convient pas. Il est préférable de l'exécuter dans un script autonome. Cependant, cela peut être fait dans la calculatrice de terrain, à condition d'utiliser une astuce. Vous devez utiliser un curseur pour charger toutes les valeurs dans un dictionnaire global à partir d'une liste triée, mais uniquement lors du calcul du premier enregistrement. Pour tous les autres enregistrements, vous devez ignorer la création du dictionnaire pour éviter de relire constamment la table entière pour chaque ligne.
Les trois valeurs de champ doivent être placées dans un tuple pour agir comme une clé qui triera correctement. Je suppose que toutes les valeurs de combinaison à 3 champs sont uniques dans la table SamplePoint, mais j'ai ajouté l'ObjectID pour m'assurer qu'il est unique. Vous devez fournir le chemin et le nom du fichier de formes à la ligne 8 (ou je pourrais utiliser la technique que FelixIP utilise là où la première couche de la carte actuelle est utilisée). Si vous souhaitez utiliser différents champs pour une clé, vous devez modifier la liste des champs à la ligne 10 et les faire correspondre avec les champs d'entrée à la ligne 3 et à la ligne 15.
Je ne recommanderais pas non plus d'utiliser les noms de champs Année, Mois et Jour, car ceux-ci ne fonctionnent que dans les fichiers de formes et ne sont pas autorisés dans les géodatabases. Une géodatabase changera les noms en Year_1, Month_1, Day_1 si vous essayez de les ajouter à la liste des champs dans les propriétés de la table.
Si le but de ce tableau est de le relier à une autre table / classe d'entités sur une clé multi-champs, envisagez d'utiliser l'outil que j'ai créé dans mon blog nommé Clé de champ multiple à l'outil de clé de champ unique - Relier deux couches basées sur plusieurs. Champ
la source
J'avais la même question mais pour un problème plus simple, basé sur le fait d'avoir un seul champ à trier. J'ai réussi avec le script suivant:
la source