2016-12-06 2 views
-1
taxNo = arcpy.GetParameterAsText(0) 
thisMap = arcpy.mapping.MapDocument("CURRENT") 
myDF = arcpy.mapping.ListDataFrames(thisMap)[0] 
myLayers = arcpy.mapping.ListLayers(myDF) 
for lyr in myLayers: 
if lyr.name == "Address Numbers": 
    arcpy.SelectLayerByAttribute_management(lyr,"NEW_SELECTION","EKEY = " + taxNo[0]) 
    for tax in taxNo: 
     arcpy.SelectLayerByAttribute_management(lyr,"ADD_TO_SELECTION","EKEY = " + tax) 
     arcpy.AddWarning("Additional Selection " + tax) 

J'essaye de construire un script dans ArcGIS qui va sélectionner une série de valeurs définies par l'utilisateur, dans ce cas j'essaie de sélectionner 1784102 et 1784110. Quand j'utilise arcpy.AddWarning (taxNo) avant de la boucle, j'obtenir la sortie « 1.784.102; 1.784.110 », mais il est itérer à travers elle un chiffre à la fois ieitération à travers une liste définie par l'utilisateur avec arcpy

sélection supplémentaires 1

sélection supplémentaire 7

de sélection supplémentaire 8

Sélection supplémentaire 4 etc.

puis affiche une erreur lorsqu'il atteint le point-virgule. Les paramètres de taxNo sont définis dans ArcMap en tant que String, Multivalue, Valuelist.

Répondre

1

Je vais supposer que vous appelez votre script comme ceci:

python script.py 1784102;1784110 

votre variable taxNo = arcpy.GetParameterAsText(0) est alors une seule chaîne "1784102;1784110". Si vous utilisez « index de tableau » sur les chaînes (par exemple taxNo[0], taxNo[1] etc.), vous obtenez des caractères uniques sur cette chaîne, à savoir « 1 », « 7 », « 8 » ...

Appel à .split(';') votre résultat arcpy.GetParameterAsText(0) pour diviser la chaîne "1784102;1784110" en un tableau de deux chaînes: ["1784102", "1784110"]. Si vous avez besoin d'un élément numérique, c'est-à-dire des nombres entiers, essayez aussi this.

taxNo = arcpy.GetParameterAsText(0).split(';')