arcgis 字段计算器 条件赋值_ArcGIS中属性表的常用操作汇总

本文详细介绍了ArcGIS中属性表的操作,包括利用字段计算器进行条件赋值,如自动编号、根据特定字段进行编号。同时,讲解了如何按字段分段求和、批量分割文件以及属性查询的语法和注意事项,提供了实用的Python代码示例和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f054fd2d63b9fc0c77a8ebe377bbbc4a.gif

本篇文章将平时对arcgis属性表的相关操作记录下来,防止忘记。此外,在技术摸索中参考了一些gis大牛的博客和技术分享,我在博客结尾也粘贴了他们的博客地址在此表示感谢。

案例一:arcgis属性表某个字段自动编号

例如:从1开始往后自动编号。

将下图中数据类型为文本型的typeid字段进行自动编号,数据记录从1开始往后递增。

4afc1a84a1a4f1e36c7e8eab3db45cb6.png

在该字段上右键,进入字段计算器,勾选“Python”;

在“预逻辑代码块”区域粘贴以下代码;

rec=-1

def autoIncrement():

 global rec

 pStart = 1 #起始值为1,可修改

 pInterval = 1 #间隔值为1,可修改

 if (rec ==-1): 

  rec = pStart 

 else: 

  rec = rec + pInterval 

 return rec

(上述代码含义:首先初始化rec为-1;接着定义一个autoIncrement方法,在这个方法里定义了一个局部变量rec,初始化pStart为1,它也是起始值,如果想typeid起始值为其它值可以修改pStart的值即可,pInterrval是间隔值,即依次递增的数字之间的间隔是1,如果想依次递增的数字之间的间隔是2或者3...等,可以修改pInterrval的值;再接着就是一个if()else语句,最后将rec进行返回。)

然后将autoIncrement()方法给typeid,最后点击“确定”运行。

(注意将autoIncrement()方法给typeid时,autoIncrement()方法前不能有空格,否则会报错!!!)

210311cc8061d82d5748280465d49175.png

补充:

上述的案例是基于FID进行自动编号,如何根据其它字段进行自动编号呢?

思路:使用sort工具,基于某个字段进行编号,生成新的输出数据,然后基于新的输出数据使用案例1中的python代码进行自动编号。

d35257fba240090e65a20252bdab1a63.png

e4023cb7d6963c4c9a25b2e6404aa1b2.png

参考资料:http://www.cnblogs.com/liweis/p/4153333.html

//使用Python给要素添加序号

案例二:对属性表中某一字段自动编号

例如:属性表中的“县级”行政单位进行自动编号,存在县名称重复的情况,例如:A县有多次重复,那就按A0001、A0002、A0003自动编号,每个县都从0001开始编号。

python代码如下:

UniqueDict = {}

def isDuplicateIndex(inValue):

   UniqueDict.setdefault(inValue,0)

   UniqueDict[inValue] += 1

   return str(UniqueDict[inValue])

字段中写:

isDuplicateIndex( !NAME! ).zfill(4)

e09412ec84f856f31ddae1244e5a2b37.png

案例三:对属性表中某一字段进行分段

情景一:如何把一个shp文件批量均分为n个?比如:一个shp文件属性表共有10000个行,我想分为50组,200为1组,请问除了按属性选择,是否有批量直接分的方法?

(1)字段计算器  int([字段]/200+1) 

(2)split-by-attributes,具体见链接:http://pro.arcgis.com/zh-cn/pro-app/tool-reference/analysis/split-by-attributes.htm

参考资料:http://zhihu.esrichina.com.cn/question/34781

情景二:对某一字段进行分段求和,现有一个矢量图层,其中ACRES字段记录了每一个面要素的面积,如何分段对该字段求和,如该字段数值在以下范围时0-50,50-300,300-1000,>4000,其面积分别是多少?

参考资料:http://zhihu.esrichina.com.cn/article/2785

案例四:查出省级行政区划名称(Chinese_Ch)为山开头,面积(Shape_Area)大于8000000的记录。

查询文本框输入:

"Chinese_Ch" LIKE '山%' AND "Shape_Area" >8000000 

eae66beeb531c66c0ec9199faa6e3cf6.png

5a40c01e5d51761385cedc001c7789a6.png

一般查询过程是在字段名称选择区中双击字段名、再选运算符,建立查询条件,并用Like、

And、Or、Not将几个条件组合起来。在设置字段的查询条件时,可在取值区中用鼠标选取,也可直接键入属性值。

字符型字段还可使用通配符,如用“%”替代多个字符,用“_”替代一个字符。例如:

"NAME"LIKE'张%'表示查询NAME字段,第一个字符为"张",不管后续有几个字符。

"LANDUSE"LIKE'F_'表示查询LANDUSE字段,第一个字符"F",第二个字符任意,但后续只能有一个。

按属性选择记录会出现语法错误,软件提示不能完成操作,引号、括号不匹配是常见差错,以下是注意事项:

  1. 字符型操作不能用等号代替LIKE;

  2. 字段名自身带双引号,如"LANDUSE",字符型取值用单引号,如'C',数字型取值不带引号;

  3. 单引号、双引号必须都用英文字符,不能用中英字符。

  4. 多用鼠标,少用键盘,可避免语法差错;

案例五:查询属性表相同项

首先数据要求是存放在个人地理数据库(mdb)中,如果不是,需要先导入进去。这是因为个人地理数据库对子查询支持更好。

如果这个字段名叫name,表名叫area,SQL可类似如下写:

[name] in (select [name] from area group by [name] having count([name]) > 1)

9a6d60dc3f7292c0425993f569ddffd3.png

参考资料:

http://zhihu.esrichina.com.cn/question/6606

文件地理数据库对子查询提供了有限的支持,而个人地理数据库和 ArcSDE 地理数据库则提供完全支持,详情见链接介绍:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00s500000033000000/

案例六:查询属性表中要素记录的长度

例如:查询属性表中要素记录长度大于6的要素

CHAR_LENGTH(string_exp)

例如:查询字段名为‘名称’的长度大于6的要素

CHAR_LENGTH( 名称 ) >=6

d9626df81c31a3f1bf90fc0425bd36f0.png

链接:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00s500000033000000

文章转载于优快云,作者gislaozhang版权归原作者所有,如有侵权请告知删除

- END -

7.72GB ARCGIS  ERDAS  ENVI干货教程网盘下载ArcGIS生成等值线图的方法ArcGIS课程包——拓扑编辑、坐标提取、属性数据常见操作ArcGIS网络分析之常见问题分析、诊断汇总

393a8fcd5c1297f63acf54d82012a666.png

<think>嗯,用户想在ArcGIS中使用字段计算器进行赋值重分类,他们需要具体的操作方法或表达式示例。首先,我需要回忆一下字段计算器的基本用法,以及如何通过条件语句来实现重分类。根据之前的引用,特别是引用[2]提到的条件赋值,可能需要使用VB Script或Python解析器。用户的问题是关于重分类,也就是根据某个字段的值,将数据分成不同的类别,并赋值到新字段中。例如,将数值分为高、中、低,或者将连续数据转换为分类等级。这时候,字段计算器中的条件判断函数就派上用场了。首先,我需要确定用户使用哪种解析器,VB还是Python。引用[3]中提到了VBScript的DatePart函数,而引用[4]提到了Python3的方法。两种方法都可能适用,但语法不同。用户可能需要两种方法的示例,或者其中一种更常见。通常,VBScript在ArcMap中常用,而ArcGIS Pro可能更推荐Python,但两者都支持。接下来,考虑具体的条件表达式。例如,如果用户想根据一个数值字段的值进行分类,比如将小于100的归为1类,100到200的归为2类,以此类推。这时候,在VB中可以用IIF函数嵌套,而在Python中使用if-elif-else的逻辑。另外,需要注意字段计算器的使用步骤:添加新字段,打开计算器,选择解析器,输入表达式。用户可能需要详细的步骤说明,比如如何添加字段,如何选择解析器,以及如何编写表达式。还要考虑可能的错误,比如字段类型是否正确,是否在编辑模式下进行计算,或者表达式中的字段名是否正确引用。例如,在VB中字段名用方括号,而在Python中用感叹号。此外,用户可能需要示例来具体展示如何操作。例如,将坡度百分比分为平坡、缓坡、陡坡,或者将GDP分为不同等级。这时候,给出具体的表达式和步骤会更清晰。同时,引用[1]和[2]提到字段计算器可以处理字段的综合计算,比如百分比,这也可能和重分类相关。用户可能需要将某个字段的值转换为百分比,然后进行分类,或者直接根据原始值分类。最后,需要提醒用户注意的事项,比如备份数据,因为字段计算器操作不可撤销(如引用[3]提到的),或者在计算前确保字段类型正确,比如文本或数值类型是否匹配分类结果。总结一下,回答的结构应该包括步骤说明、两种解析器的示例(VB和Python)、注意事项,以及相关问题。这样用户可以根据自己的情况选择合适的解析器,并正确应用表达式进行重分类。</think>在ArcGIS中使用字段计算器进行赋值重分类的操作方法如下: ### 一、操作步骤 1. **添加新字段** 在属性表中右键新建字段,设置字段类型(数值型用于分类代码,文本型用于类别名称) 2. **打开字段计算器** 右键目标字段 → 选择"字段计算器" → 选择解析器(VB Script或Python) 3. **编写条件表达式** 根据原始字段值编写逻辑判断语句,实现重分类 ### 二、表达式示例 #### 案例1:数值型重分类(坡度分级) ```vbscript ' VB Script解析器 IF [Slope] < 5 THEN 1 ELSEIF [Slope] >=5 AND [Slope] <15 THEN 2 ELSE 3 END IF ``` ```python # Python解析器 def reclass(slope): if slope < 5: return 1 elif 5 <= slope <15: return 2 else: return 3 ``` 表达式:`reclass(!Slope!)` #### 案例2:文本型重分类(GDP等级) ```vbscript ' VB Script解析器 SELECT CASE [GDP] CASE 0 TO 1000 "低" CASE 1001 TO 5000 "中" CASE ELSE "高" END SELECT ``` ```python # Python解析器 def classify(gdp): if gdp <= 1000: return "低" elif 1000 < gdp <=5000: return "中" else: return "高" ``` 表达式:`classify(!GDP!)` ### 三、注意事项 1. 字段名称需用方括号包裹(VB)或感叹号包裹(Python) 2. 数值型字段计算结果需与字段类型匹配[^2] 3. 编辑状态下可撤销操作,非编辑模式计算结果不可逆[^3] 4. 复杂计算建议分步执行验证逻辑 ### 四、进阶应用 1. **多字段组合分类** ```python def complex_class(value1, value2): if value1 > 100 and value2 < 50: return "A" else: return "B" ``` 表达式:`complex_class(!Field1!, !Field2!)` 2. **空间属性结合** 使用`!shape.area!`获取要素面积进行分级[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值