Suite

Utilisation de Calculate Field pour déterminer si un segment est supérieur à une certaine longueur dans ModelBuilder

Utilisation de Calculate Field pour déterminer si un segment est supérieur à une certaine longueur dans ModelBuilder


J'ai un modèle qui isole le réseau routier d'un lieu en fonction de ma saisie du nom du lieu. Ce que je dois déterminer, c'est si l'un des segments de route du réseau est supérieur à 500 m. Pour ce faire, j'ai écrit ce qui suit dans un onglet Calculer la valeur de ModelBuilder :

def isLongerThanAllowed() : import arcpy fc = "C:UsersUSER1DocumentsArcGISScratch.gdbplaceNetwork" fields = "LENGTH_GEO" avec arcpy.da.SearchCursor (fc, fields) comme curseur : #itérer les lignes pour ligne dans le curseur : si ligne > 500 : renvoie "VRAI" sinon : renvoie "FAUX"

Pour une raison quelconque, il renvoie True même lorsque toutes les longueurs de route sont inférieures à 500 m.

L'objectif final est d'utiliser un autre modèle que j'ai créé qui divise en deux les entités routières supérieures à une certaine distance afin qu'aucun segment ne dépasse 500 m. Ainsi, la logique du résultat final sera "lorsque le réseau routier a des routes supérieures à 500 m, exécutez le modèle divisé".


Votre code est défectueux à plusieurs niveaux, je fournis le code corrigé ci-dessous. Veuillez noter que j'ai ajusté certaines des valeurs de mes données de test, vous devez donc les modifier.

import arcpy def isLongerThanAllowed (): fc = "confinementlines" has500 = False fields = ["SHAPE_Length"] avec arcpy.da.SearchCursor (fc, fields) comme curseur : # itérer les lignes pour la ligne dans le curseur : si ligne[0] > 500 : # Longueur supérieure à 500 m trouvée inutile de tester d'autres lignes has500 = True break return has500

Votre code d'origine teste uniquement la première ligne et quitte, vous souhaitez parcourir jusqu'à ce qu'une longueur supérieure à 500 m soit trouvée, puis quittez. Notez qu'il renvoie un booléen, vous renvoyiez une chaîne. Vous avez référencé l'objet de ligne et non la valeur de la ligne et il s'agit désormais d'un champ dans une liste.

Assurez-vous que le type de données de la valeur de calcul est défini sur booléen.


Voir la vidéo: Basic Field Calculator