Daha çox

Bir alət üçün parametrlər yaratmaqda problem


Hələ bir arpy yeni başqasıyam, amma sintaksis, dəyişənlər, modullar və s. Daxil olmaqla əsasları başa düşdüyümü düşünürəm. Sualım bir vasitə yaratarkən parametrlərin istifadəsi ilə bağlıdır.

Xüsusiyyət qatının "səviyyələri" sahəsini hesablayacaq və ümumiləşdirəcək bir vasitə yaratmağa çalışıram. Cədvəl olaraq çıxan xüsusiyyət qatının hesablanması və ümumiləşdirilməsi üçün işləyən skriptim var, amma alət işləyən parametr girişlərini ala bilmirəm. Sintaksis yoxlayır (PyScripter-dən IDE kimi istifadə olunur), lakin ArcMap-da aləti çalıştırmaya çalışdığımda "Bu alətin parametrləri yoxdur" görünür. İdeal olaraq, istifadəçinin xüsusiyyət səviyyə "səviyyələrini" parametr olaraq daxil etməsini və xülasə cədvəlini qaytarmasını istərdim, ancaq mümkünsə sahə xülasəsini göstərən bir mesaj pəncərəsi daha yaxşı olardı. Xahiş edirəm parametrlərdə nəyin səhv olduğunu və ya çıxışı bir mesaj pəncərəsinə necə dəyişə biləcəyimi bildirin.

import arcpy class GeoArea (object): def __init __ (self): "" "Alətlər qutusunu təyin edin (alət qutusunun adı .pyt faylının adıdır)." "" self.label = "GeoArea" self.alias = "Tom" # Bu alət qutusu ilə əlaqəli alət siniflərinin siyahısı self.tools = [LevelsCalcTool] sinif LevelsCalcTool (obyekt): def __init __ (self): self.label = "LevelsCalcTool" self.description = "Səviyyə sahəsini hesablayır və ümumiləşdirir kvadrat metr "self.canRunInBackground = False def getParameterInfo (self): param0 = arcpy.Parameter (displayName =" Input Features ", name =" in_features ", datatype =" GPFeatureLayer ", parameterType =" Required ", direction =" Input " ) params = [param0] return params def exute (özünü, parametrləri, mesajları): "" "Alətin mənbə kodu." "" arcpy.AddField_management (params, "area", "DOUBLE", "#", " # "," # "," # "," NULLABLE "," NON_REQIRED "," # ") arcpy.CalculateField_management (params," area ","! [email protected]! "," PYTHON_9.3 "," # ") arcpy.Statistika_ təhlili (params," out_table.dbf ", [[" area "," SUM "]]) qayıt

Sinif adını dəyişdirmədiyiniz təqdirdə alət qutunuz düzgün işləməyəcəkdirAlət qutusuyardımda təsvir olunduğu kimi:

Python alət qutusunun ArcGIS tərəfindən düzgün tanınmasını təmin etmək üçün alət qutusu sinifinin adı qalmalıdırAlət qutusu.

Bu dəyişikliyi etdikdən sonra alətiniz düzgün açıldı:

Daha bir neçə şərh:

  1. Parametrlər siyahısını arcpy-yə ötürürsünüz.SomeTool tək bir parametr yerinə icra metodunuzda çağırır, yəni.arcpy.AddField_management (parametrlər [0], və s.)
  2. siz təyin edirsinizparametrlər2-ci arqument kimiicra etməküsul ancaq istifadə etməyə cəhd edinparamsmetodun gövdəsində. Sizə də ehtiyacınız var:

    1. 2.-nin arqumentini dəyişdirinicra etməkmetodparametrlərüçünparamsVə ya
    2. dəyişdirməkparamsüçünparametrlərmetodun gövdəsində

Sabit kod:

idxal arcpy sinfi Toolbox (obyekt): def __init __ (self): "" "Alətlər qutusunu təyin edin (alət qutusunun adı .pyt faylının adıdır)." "" self.label = "GeoArea" self.alias = "Tom" # Bu alət qutusu ilə əlaqəli alət siniflərinin siyahısı self.tools = [LevelsCalcTool] sinif LevelsCalcTool (obyekt): def __init __ (self): self.label = "LevelsCalcTool" self.description = "Səviyyə sahəsini hesablayır və ümumiləşdirir kvadrat metr "self.canRunInBackground = False def getParameterInfo (self): param0 = arcpy.Parameter (displayName =" Input Features ", name =" in_features ", datatype =" GPFeatureLayer ", parameterType =" Required ", direction =" Input " ) params = [param0] return params def exute (self, params, messages): "" "Alətin mənbə kodu." "" arcpy.AddField_management (params [0], "area", "DOUBLE", "# "," # "," # "," # "," NULLABLE "," NON_REQUIRED "," # ") arcpy.CalculateField_management (params [0]," area ","! [email protected]! "," PYTHON_9.3 "," # ") arcpy.Statistika_ təhlili (params [0]," out_table.dbf ", [[" area "," SUM "]]) re növbə

Buraya göndərdiyiniz zaman, formatlaşdırma ilə bağlı bir problem olduğu görünürgetParameterInfometod. Girintinizin fayl boyunca uyğun olduğundan əmin olmalısınız. Düşünürəm ki, belə olmalıdır:

def getParameterInfo (self): param0 = arcpy.Parameter (displayName = "Input Features", name = "in_features", datatype = "GPFeatureLayer", parameterType = "Required", direction = "Input") params = [param0] return params

Göndərildiyi kimi, buna bənzəyirqayıdış parametrləribəyanat əslində bir hissəsi deyilgetParameterInfo, bu funksiyanın geri döndüyü deməkdirYoxdur. Alətinizdə heç bir parametr görmədiyinizi izah edəcəkdir.