Suite

Extraire le nom d'une classe d'entités et l'ajouter à un champ

Extraire le nom d'une classe d'entités et l'ajouter à un champ


Je construis un ensemble de données de réseau cyclable basé sur un réseau routier existant. Chaque piste cyclable/route/chemin a un numéro d'identification unique (attribué par notre service technique) qui doit être inclus dans un champ d'identification distinct au sein de chaque classe d'entités. Nous avons récemment changé la base de notre réseau routier, nécessitant un redessin d'environ 4000 segments.

Pour gagner du temps en ajoutant manuellement des champs, j'ai construit un modèle pour ajouter le nouveau champ ID "BPID" (qui doit être enregistré sous forme d'entier court), un champ "BPID_Temp", utilisé pour convertir les valeurs de chaîne en nombres en rognant le premier caractère (l'expression est =Droite( [BPID_TEMP], Longueur( [BPID_TEMP] )-1 ) puis en le copiant dans le champ BPID permanent. Enfin, je supprime le champ ID temporaire.

Voici une image du modèle ci-dessous :

À la première étape Calculer le champ, la valeur de Parse Path n'est pas transférée dans le champ BPID_TEMP. L'expression de l'étape est "Valeur", en PYTHON. Parse Path est défini sur NAME et le modèle s'exécute sans générer d'erreurs.

J'ai utilisé la classe d'entités "Nom" à partir de l'itération des classes d'entités pour calculer le champ avec ModelBuilder ?. Cependant, l'ajout de caractères génériques à l'expression « Value » renvoie une erreur d'expression non valide. Si je lie la sortie "Value" de Parse Path directement dans le champ Calculate (plutôt que comme condition préalable), cela me dit que j'essaie de calculer un nombre trop grand ou de mélanger des types de données incompatibles.

Est-ce que je manque quelque chose de critique ici. Je peux exécuter les étapes manuellement sans problème, mais dès que j'essaie d'automatiser avec un itérateur, tout s'effondre. Je ne suis pas encore très doué avec Python, mais j'ai l'impression que ce n'est même pas nécessaire ici.


Donc, je ne sais pas s'il y avait toujours un problème de syntaxe, mais je suis passé à une autre machine, et avec quelques ajustements, cela a fonctionné correctement.

J'ai dû reconstruire le modèle, car je n'avais pas accès à mes fichiers originaux sur cette nouvelle machine. Construit exactement de la même manière, et s'il s'est déroulé parfaitement.

Outre la configuration matérielle, la seule chose qui a changé était la version d'ArcMap ; la première tentative était avec 10.2, et la version fonctionnelle était avec 10.3. Le modèle final avec les expressions est ci-dessous :

modelbuilderin-line-substitutionfield-calculator


La technique que vous utilisez est appelée substitution en ligne, c'est ainsi que vous passez une valeur dans une variable autour d'un modèle. Vous trouverez plus d'exemples et d'informations dans l'aide du bureau.

Vous avez une mauvaise syntaxe. Lorsque vous référencez une variable, elle doit être comprise entre %%, donc dans votre cas, ce serait %Valeur%. Comme certains outils prennent des chaînes comme entrées, vous devrez peut-être inclure votre variable en ligne entre guillemets tels que "%Valeur%". Je ne sais pas si vous devez le faire car la sortie du chemin d'analyse est une chaîne, essayez-la.


Voir la vidéo: What is Technology Stack? - Fast Tech Skills