Daha çox

TypeError: * üçün dəstəklənməyən operand tip (lər) i: 'float' və 'Layer obyektini geeoprosessing'

TypeError: * üçün dəstəklənməyən operand tip (lər) i: 'float' və 'Layer obyektini geeoprosessing'


Çox aydın olmayan bir tip səhv alıram və onlayn axtarışdan sonra kömək edəcək heç bir həll tapa bilmirəm. Wifi router siqnal itkisi üçün öz python alət qutumu yaratmağa çalışıram və bir tənlikdən doldurulacaq bir neçə girişə əsaslanan bir raster yaratmağa çalışıram. Aldığım səhv tənlik xətti olan 107-ci sətirdədir

fspl = (4 * math.pi * distmod * dist_float * hertz) / (2.99792458 * (10 ** 8)) output_rast = fspl

Bu xətaya nəyin səbəb olduğunu anlaya bilmirəm, əvvəlcə float əvəzinə bir raster istifadə etməyimi bəyənmədim, buna görə də məsafəni raster'i bir şamandıra çevirdim və indi floatın bir hissəsi olmasını sevmirəm tənlik. Budur kodumun qalan hissəsi, səhv əvvəlki bir səhvdən qaynaqlanır. Xüsusi səhvimlə əlaqəli bir şey tapa bilmirəm və bu məsələ ətrafında işləmək üçün heç bir yol tapa bilmədim. Hər hansı bir təklif?

idxal arcpy idxal riyaziyyat 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 = "Toolbox Label Property" self.alias = "Toolbox Alias ​​Property" # Bu alət qutusu ilə əlaqəli alət siniflərinin siyahısı self.tools = [FSPL, WAP_Buffer] sinif FSPL (obyekt): def __init __ (self): "" "Aləti təyin edin (alət adı sinifin adı). "" "self.label =" Sərbəst Yer Yolu İtkisi "self.description =" Bu python skript aləti, WAP-lardan dB aralığında çıxışı təyin etmək üçün Pulsuz Məkan Yolu Zərərini yaradacaq. " self.canRunInBackground = False def getParameterInfo (self): "" "Parametr təriflərini təyin edin" "" param0 = arcpy.Parameter (displayName = "Wireless Access Points", name = "wireless_pts", datatype = "GPFeatureLayer", parameterType = "Required ", direction =" Input ") param1 = arcpy.Parameter (displayName =" Network Frequency Type ", name =" network_freq ", datatype =" String ", parameterType =" Required ", direction =" Input ") param1.filter. type = "ValueList" param1.filter.list = ["2.4 GHz", "5 GHz"] param2 = arcpy.Parameter (displayName = "Distance Raster Float", name = "dist_float", datatype = "GPLayer", parameterType = "Zəruri", istiqamət = "Giriş") param3 = arcpy.Parameter (displayName = "Məsafə Raster vahidləri", name = "ədəd", datatype = "String", parameterType = "Lazım", yön = "Giriş") param3. filter.type = "ValueList" param3.filter.list = ["Feet", "Meters"] param4 = arcpy.Parameter (displayName = "Output Raster", name = "output_rast", datatype = "GPRasterLayer", parameterType = " Tələb olunur ", istiqamət =" Çıxış ") qayıt [param0, para m1, param2, param3, param4] def isLicensed (self): "" "Tool-un icrası üçün lisenziyalı olub olmadığını təyin edin." "" return True def updateParameters (self, parametrlər): "" "Parametrlərin dəyərlərini və xüsusiyyətlərini daxili parametrlərdən əvvəl dəyişdirin. doğrulama aparılır. Bu metod bir parametr dəyişdirildikdə çağırılır. "" "Return def updateMessages (self, parametrlər):" "" Hər bir alət parametri üçün daxili doğrulama ilə yaradılan mesajları dəyişdirin. Bu metod daxili doğrulamadan sonra çağırılır. "" "Return def execute (self, parametrlər, mesajlar):" "" Alətin mənbə kodu. "" "# Girişləri əldə edin wireless_pts = parametrlər [0] .value network_freq = parametrlər [ 1] .value dist_float = parametrlər [2] .value unit = parametrlər [3] .value output_rast = parametrlər [4] .value # network_freq == "2.4 GHz" ifadə et: hertz = 2400000000 else: hertz = 5000000000 == "Ayaqlar": distmod = 0.3048 başqa: distmod = 1 # bərabərlik fspl = (4 * math.pi * distmod * dist_float * hertz) / (2.99792458 * (10 ** 8)) output_rast = fspl return

Raster Kalkulyator bir seçimdir, ancaq nə edə biləcəyinizi məhdudlaşdırır. Arcpy istifadə edərkən, xəritənin cəbrini yerinə yetirmək üçün raster verilənlər bazasınınızı raster obyektinə çevirməlisiniz.

Python alət qutusundakı parametrləri təyin edərkən, məlumat tipini GPRasterLayer və ya GPRasterDataset olaraq dəyişdirmək kifayət ola bilər. Əks təqdirdə, raster yolunu Raster () ilə bir raster obyektinə atın.


Videoya baxın: Overriding Height Detail in Substance Painter