День добрый! Столкнулся с такой интересной ситуацией: при выполнении одной и той же функции различными способами (речь идет о функции Con интерфейса IConditionalOp библиотеки Spatial Analyst) получается различный результат! Вызов функции Con напрямую создает впечатление, что она не обрабатывает условный параметр conditionalRaster или параметр falseRaster, т.е. результатом является чистая копия trueRaster. Если же вызывать ее посредством метода Execute интерфейса IMathAlgebraOp с теми же параметрами, то результат соответствует ожидаемому, т.е. все параметры учитываются. Если кто сталкивался с подобной проблемой, подскажите, пожалуйста, т.к. подобная ситуация, честно говоря, настораживает... Пример кода:
Dim inraster, Htemp1, Htemp2, tgrid1, tgrid2, tgrid3, Heff_grid As IGeoDataset
Dim rwsp As IWorkspace
Dim rwsf As IWorkspaceFactory = New RasterWorkspaceFactory
Dim logop As ILogicalOp = New RasterMathOps
Dim condop As IConditionalOp = New RasterCondition
Dim analysis As IRasterAnalysisEnvironment
Dim rmakerop As IRasterMakerOp = New RasterMakerOp
Dim mathop As IMathOp = New RasterMathOps
Dim pAlgbOp As IMapAlgebraOp = New RasterMapAlgebraOp
rwsp = rwsf.OpenFromFile("c:\temp", 0)
analysis = mathop
analysis.OutWorkspace = rwsp
analysis.SetAsNewDefaultEnvironment()
analysis = rmakerop
analysis.OutWorkspace = rwsp
analysis.SetAsNewDefaultEnvironment()
analysis = condop
analysis.OutWorkspace = rwsp
analysis.SetAsNewDefaultEnvironment()
analysis = logop
analysis.OutWorkspace = rwsp
analysis.SetAsNewDefaultEnvironment()
analysis = pAlgbOp
analysis.OutWorkspace = rwsp
Htemp1 = rmakerop.MakeConstant(10, False)
Htemp2 = mathop.Minus(Htemp1, inraster)
tgrid1 = rmakerop.MakeConstant(ant.location.Z, False)
tgrid2 = rmakerop.MakeConstant
tgrid3 = logop.GreaterThan(tgrid1, inraster)
pAlgbOp.BindRaster(tgrid2, "tgrid2")
pAlgbOp.BindRaster(Htemp2, "htemp2")
pAlgbOp.BindRaster(tgrid3, "tgrid3")
и собственно виновницы:
Heff_grid = pAlgbOp.Execute("CON([tgrid3], [htemp2], [tgrid2])")
или
Heff_grid= condop.Con(tgrid3, Htemp2, tgrid2)
Вызов одной и той же функции с одними параметрами дает различный результат?! Недоумеваю...