我正在使用以下代码使用 python 一次重新分类多个栅格。在 "GP = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")" 行之后,我收到此错误:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
GP = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")
File "C:\Python27\ArcGIS10.1\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:\Python27\ArcGIS10.1\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python27\ArcGIS10.1\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221231, 'ClassFactory cannot supply requested class', None, None)
有谁知道问题可能是什么?同样在 reclassTable 下,我没有使用 .dbf 而是使用 .csv excel 文件。这可能是原因吗?我不知道如何制作 .dbf 文件。提前感谢任何急需的帮助/克里斯汀
代码
inputDir = "c:\\tmp\\gis\\rasterReclass\\" # where all the rasters are located
outputDir = "c:\\tmp\\gis\\rasterReclass\\" # where the output rasters are to be saved
outputPrefix = "R_" # prefix of the output rasters
reclassTable = r"c:\tmp\gis\rasterReclass\reclassTable.dbf" # the reclass data table
fieldRasterName = "RASTERNAME" # column with the name of the raster
fieldRasterThreshold = "THRESHOLD" # column with the threshold value
import win32com.client, sys
GP = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")
GP.RefreshCatalog(inputDir)
GP.RefreshCatalog(outputDir)
total = 0
ok = 0
tableRows = GP.SearchCursor(reclassTable)
tableRow = tableRows.Next()
while tableRow:
print ""
total = total + 1
rasterName = tableRow.GetValue(fieldRasterName)
threshold = tableRow.GetValue(fieldRasterThreshold)
sourceRaster = inputDir + rasterName
print "Processing " + rasterName + " with threshold value " + str(threshold)
if GP.Exists(sourceRaster):
expression = "SetNull(\"" + sourceRaster + "\" < " + str(threshold) + ", 1)"
outputRaster = outputDir + outputPrefix + rasterName
try:
GP.SingleOutputMapAlgebra(expression, outputRaster)
print "... done"
ok = ok + 1
except:
print "... " + rasterName + " failed"
else:
print rasterName + " does not exists"
tableRow = tableRows.Next()
print "--------------------------"
print str(ok) + " out of " + str(total) + " rasters sucessfully reclassified !"