ArcEngine中调用字段计算器的实现Calculate Field工具

功能说明

ArcEngine调用 Calculate Field工具

Calculate Field工具的表达式参数默认使用VB,将表达式参数类型改为PYTHON_9.3。当在ArcGIS Engine和ArcGIS Server中执行Calculate Field工具必须选择表达式类型为Python,许多VB表达式需要VBA支持,但是VBA只在ArcGIS Desktop中可用。

简单表达式 expression 实现

Geoprocessor gp = new Geoprocessor(); 
gp.OverwriteOutput = true; 
CalculateField calc = new CalculateField(); 
calc.in_table = table; 
calc.field = "AAA"; 
calc.expression = 10 + " * " +"!someField!"; 
calc.calc.expression_type = "PYTHON";
//或者calc.expression_type = "PYTHON3";
gp.Execute(calc, null);

复杂表达式 codeblock 实现

def Transform(lxdm):
     finalRes=""
     if lxdm =="010":
        finalRes="基本农田保护区"
     elif lxdm=="020":
         finalRes= "一般农地区"
     elif lxdm=="030":
         finalRes="城镇建设用地区"
     elif lxdm=="040":
         finalRes="村镇建设用地区"
     elif lxdm=="050":
         finalRes="独立工矿用地区"
     elif lxdm=="060":
         finalRes="风景旅游用地区"
     elif lxdm=="070":
         finalRes="生态环境安全控制区"
     elif lxdm=="080":
         finalRes="自然与文化遗产保护区"
     elif lxdm=="090":
         finalRes="林业用地区"
     elif lxdm=="100":
         finalRes="牧业用地区"
     elif lxdm=="990":
         finalRes="其他用地区"
     else:
         finalRes="其他"
     return finalRes

最终实现

Geoprocessor gp = new Geoprocessor(); 
gp.OverwriteOutput = true; 
CalculateField calc = new CalculateField(); 
calc.in_table = table; 
calc.field = "BZ"; 
calc.expression = "Transform( !TDYTQLXDM! )"; 
calc.expression_type = "PYTHON";
//或者calc.expression_type = "PYTHON3";
calc.code_block="def Transform(lxdm):
     finalRes=""
     if lxdm =="010":
        finalRes="基本农田保护区"
     elif lxdm=="020":
         finalRes= "一般农地区"
     elif lxdm=="030":
         finalRes="城镇建设用地区"
     elif lxdm=="040":
         finalRes="村镇建设用地区"
     elif lxdm=="050":
         finalRes="独立工矿用地区"
     elif lxdm=="060":
         finalRes="风景旅游用地区"
     elif lxdm=="070":
         finalRes="生态环境安全控制区"
     elif lxdm=="080":
         finalRes="自然与文化遗产保护区"
     elif lxdm=="090":
         finalRes="林业用地区"
     elif lxdm=="100":
         finalRes="牧业用地区"
     elif lxdm=="990":
         finalRes="其他用地区"
     else:
         finalRes="其他"
     return finalRes";
gp.Execute(calc, null);

在ArcEngine中调用字段计算器来批量为新字段赋值的功能完成

You may also like...

发表评论

跳至工具栏