Mehr

TypeError: nicht unterstützte(r) Operandentyp(en) für *: 'float' und 'geoprocessing Layer object'

TypeError: nicht unterstützte(r) Operandentyp(en) für *: 'float' und 'geoprocessing Layer object'


Ich bekomme einen ziemlich unklaren Typfehler und nach der Suche im Internet kann ich keine Lösungen finden, die helfen. Ich versuche, meine eigene Python-Toolbox für den Signalverlust des WLAN-Routers zu erstellen, und ich versuche, ein Raster basierend auf einigen Eingaben zu erstellen, die aus einer Gleichung aufgefüllt werden. Der Fehler, den ich erhalte, liegt in Zeile 107, der Gleichungszeile

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

Ich kann nicht herausfinden, was diesen Fehler verursacht, anfangs mochte ich es nicht, ein Raster anstelle eines Floats zu verwenden, also habe ich das Distanz-Raster in ein Float geändert, und jetzt scheint es nicht zu gefallen, dass das Float Teil des Gleichung. Hier ist der Rest meines Codes, falls der Fehler auf einen früheren Fehler zurückzuführen ist. Ich kann nichts finden, was sich auf meinen spezifischen Fehler bezieht, und ich konnte keine Möglichkeit finden, dieses Problem zu umgehen. Irgendwelche Vorschläge?

import arcpy import math class Toolbox(object): def __init__(self): """Definiere die Toolbox (der Name der Toolbox ist der Name der .pyt-Datei).""" self.label = "Toolbox Label Property" self.alias = "Toolbox Alias ​​Property" # Liste der mit dieser Toolbox verknüpften Toolklassen self.tools = [FSPL, WAP_Buffer] class FSPL(object): def __init__(self): """Definieren Sie das Tool (Toolname ist der Name der Klasse).""" self.label = "Pfadverlust im freien Speicherplatz" self.description = "Dieses Python-Skript-Tool erstellt Pfadverlust im freien Speicherplatz, um den dB-Bereichsausgang der WAPs zu bestimmen." self.canRunInBackground = False def getParameterInfo(self): """Parameterdefinitionen definieren""" 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= "Required", direction="Input") param3 = arcpy.Parameter( displayName="Distance Raster Units", name="units", datatype="String", parameterType="Required", direction="Input") param3. filter.type="ValueList" param3.filter.list = ["Feet", "Meters"] param4 = arcpy.Parameter( displayName="Output Raster", name="output_rast", datatype="GPRasterLayer", parameterType=" Erforderlich", Direction="Output") return [param0, para m1, param2, param3, param4] def isLicensed(self): """Legen Sie fest, ob das Tool zur Ausführung lizenziert ist.""" return True def updateParameters(self, parameters): """Ändern Sie die Werte und Eigenschaften von Parametern vor internal Validierung durchgeführt wird. Diese Methode wird immer dann aufgerufen, wenn ein Parameter geändert wurde.""" return def updateMessages(self, parameters): """Ändern Sie die Meldungen, die durch die interne Validierung für jeden Werkzeugparameter erstellt wurden. Diese Methode wird nach interner Validierung aufgerufen.""" return def execute(self, parameters, messages): """Der Quellcode des Tools.""" #Get input wireless_pts = parameters[0].value network_freq = parameters[ 1].value dist_float = Parameter[2].value units = Parameter[3].value output_rast = Parameter[4].value #Ausdruck erstellen if network_freq == "2.4 GHz": hertz=2400000000 else: hertz=5000000000 if units == "Feet": distmod=0.3048 else: distmod=1 #equation fspl= (4 * math.pi * distmod * dist_float * hertz)/(2.99792458 * (10**8)) output_rast = fspl return

Der Raster-Rechner ist eine Option, schränkt jedoch die Möglichkeiten ein. Wenn Sie arcpy verwenden, müssen Sie Ihr Raster-Dataset in ein Raster-Objekt konvertieren, um Kartenalgebra auszuführen.

Beim Definieren der Parameter in einer Python-Toolbox kann es ausreichend sein, den Datentyp in GPRasterLayer oder GPRasterDataset zu ändern. Andernfalls wandeln Sie einfach den Pfad des Rasters mit Raster() in ein Rasterobjekt um.


Schau das Video: QGIS Geoprocessing: INTERSECTION tool explained in Simple Way