Suite

Utilisation de caractères génériques de chaîne python dans le calculateur de champ ArcGIS 10.3.1


J'ai deux champs. Un champ a un ID. L'autre champ a une liste d'ID. En utilisant le Calculateur de champ j'ai à calculer 1 ou 0 si l'un ou l'autre champ contenir le même numéro d'identification. J'ai réussi à écrire une requête arcpy ligne par ligne, mais il y a des millions ou des enregistrements et un test linéaire de lignes n'est pas efficace. Je dois le calculer en un seul coup.

Je dois prendre un champ et en faire une valeur générique et tester l'autre champ pour cette valeur. J'ai essayé les méthodes "*" et "in". Mais il ne renvoie pas la valeur correcte.

Quelqu'un peut-il m'aider à savoir pourquoi c'est faux?

Code un :

def myCal(reportnumber,spatialjoin): reportnumbercheck = ('*'+(str(reportnumber))+'*') if (reportnumbercheck in spatialjoin): return 1 else: return 0

Cela devrait fonctionner comme une chaîne normaledansChèque

def myCal(reportnumber, spatialjoin): if reportnumber in spatialjoin: return 1 else: return 0

ou même un comme :

def myCal(reportnumber, spatialjoin): return 1 if reportnumber in spatialjoin else 0

je ne l'ai pas testé, mais vous n'aurez peut-être pas du tout besoin des caractères génériques - si vous convertissez la valeur du champ de jointure spatiale en une liste - quelque chose comme

def myCal(reportnumber,spatialjoin): #spatialjoin = spatialjoin.split(';') if reportnumber in spatialjoin: return(1) else: return(0)

diable, peut-être même pas besoin de convertir la jointure spatiale en liste… en effet, aucune conversion de liste n'est nécessaire - je vais commenter cette partie…


Voir la vidéo: ArcGis - Introduction à Python et au Calculateur de champs field caculator (Octobre 2021).