python - 我得到了一个不受支持的操作数类型 -: 'str' 和 'str 但我无法弄清楚。我读了很多问题,但仍然无法得到它
问题描述
我正在尝试在 ArcGIS 中构建一个计算 Landsat8 波段 (b8-b4)/(b8+b4) 的工具。我在 arcmap 中构建了模型,然后导出为脚本。它运行一个模型,但作为一个工具。我在计算波段的最后一行出现错误。
# Import arcpy module
import arcpy
# Script arguments
band8_input = arcpy.GetParameterAsText(0)
if band8_input == '#' or not band8_input:
band8_input = "band8_input" # provide a default value if unspecified
band4_input = arcpy.GetParameterAsText(1)
if band4_input == '#' or not band4_input:
band4_input = "band4_input" # provide a default value if unspecified
RGB_input = arcpy.GetParameterAsText(2)
if RGB_input == '#' or not RGB_input:
RGB_input = "RGB_input" # provide a default value if unspecified
clip_polygon = arcpy.GetParameterAsText(3)
if clip_polygon == '#' or not clip_polygon:
clip_polygon = "clip_polygon" # provide a default value if unspecified
# Local variables:
RGB_clp = "C:\\egm722\\RGB_clp"
RGB_clp_prj = RGB_clp
b8_clp = "C:\\egm722\\b8_clp"
b8_clp_prj = b8_clp
b4_clp = "C:\\egm722\\b4_clp"
b4_clp_prj = b4_clp
NVDI = "C:\\egm722\\NVDI.img"
NVDI_prj = NVDI
# Process: Clip_RGB
arcpy.Clip_management(RGB_input, "321255.095287406 5732480.81845376 327031.683798733 5736711.6778568", RGB_clp, clip_polygon, "256", "NONE", "NO_MAINTAIN_EXTENT")
# Process: Prj_RGB
arcpy.DefineProjection_management(RGB_clp, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]")
# Process: Clip_b8
arcpy.Clip_management(band8_input, "321255.095287406 5732480.81845376 327031.683798733 5736711.6778568", b8_clp, clip_polygon, "-32768", "NONE", "NO_MAINTAIN_EXTENT")
# Process: Prj_b8
arcpy.DefineProjection_management(b8_clp, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]")
# Process: Clip_b4
arcpy.Clip_management(band4_input, "321255.095287406 5732480.81845376 327031.683798733 5736711.6778568", b4_clp, clip_polygon, "-32768", "NONE", "NO_MAINTAIN_EXTENT")
# Process: Prj_b4
arcpy.DefineProjection_management(b4_clp, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]")
# Process: Calc_NVDI
arcpy.gp.RasterCalculator_sa("Float(\"%b8_clp_prj%\" - \"%b4_clp_prj%\") / (\"%b8_clp_prj%\" + \"%b4_clp_prj%\")", NVDI)
# Process: Prj_NVDI
arcpy.DefineProjection_management(NVDI, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]")
我收到以下错误
Traceback (most recent call last):
File "C:\egm722\NVDI_arcpy.py", line 59, in <module>
arcpy.gp.RasterCalculator_sa("Float(\"%b8_clp_prj%\" - \"%b4_clp_prj%\") / (\"%b8_clp_prj%\" + \"%b4_clp_prj%\")", NVDI)
File "c:\program files (x86)\arcgis\desktop10.5\arcpy\arcpy\geoprocessing\_base.py", line 510, in <lambda>
return lambda *args: val(*gp_fixargs(args, True))
ExecuteError: ERROR 000539: Error running expression: rcexec()
Traceback (most recent call last):
File "<expression>", line 1, in <module>
File "<string>", line 5, in rcexec
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Failed to execute (RasterCalculator).
Failed to execute (NVDI)
谢谢您的帮助。从我阅读的内容来看,这似乎是一个语法错误,但我无法弄清楚。非常感谢您的时间和帮助。
解决方案
arcpy.gp.RasterCalculator_sa("Float(\"%b8_clp_prj%\" - \"%b4_clp_prj%\") / (\"%b8_clp_prj%\" + \"%b4_clp_prj%\")", NVDI)
包括表达式
Float(\"%b8_clp_prj%\" - \"%b4_clp_prj%\")
但两个操作数都是字符串
b8_clp = "C:\\egm722\\b8_clp"
b8_clp_prj = b8_clp
b4_clp = "C:\\egm722\\b4_clp"
b4_clp_prj = b4_clp
在 Python 中,字符串不能彼此相减,因此会出现错误。
推荐阅读
- r - R按事件序列过滤
- jquery - 每个多步骤表单卡的多个 DIV 不起作用
- javascript - 如何将 'xxth Mar XXXX' 格式的日期转换为 'DD/MM/YY' 格式?
- python - 我可以在 python selenium switch_to.frame() 中嵌入星号通配符 *
- php - 我正在尝试将图像从数据库中提取到模态中,但图像未显示在模态中
- javascript - 组合 JS 对象键
- java - 如何减去两个日期时间并检查它在 Java 8 中是否少于 12 小时?
- flutter-sliver - 颤振,我需要使用下面的列表作为项目显示在 sliver 列表中
- javascript - 登陆页面时更改背景
- java - 如何使用 JUnit5 的 java main 方法运行 Karate TestRunner