IConditionalOp vs IMapAlgebraOp

0 голосов
спросил 11 Март, 08 от a-subbotin (500 баллов) в категории Программные продукты Esri
День добрый! Столкнулся с такой интересной ситуацией: при выполнении одной и той же функции различными способами (речь идет о функции 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)
Вызов одной и той же функции с одними параметрами дает различный результат?! Недоумеваю...

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...