当你要按关键词选择内容,无从下手?
当你要修改字段的部分内容,不知所措?
当你要提取出字段的某些内容,毫无头绪?
当你要按照位数来提取字符内容,力不从心?
当你要为字段补充一些新的内容,目瞪口呆?
当你要把一个字段分割成多个字段,抓耳挠腮?
......
属性表的编辑,你绝对会经常用到,
它可不只是单纯的输入内容那么简单,
还有很多高级又高效的技术,你真的值得拥有!
NO.1—按关键词选择
当你面对海量数据,希望按关键词提取出需要的内容的时候,
例如,在餐饮数据中选择出所有的“茶餐厅”:
在香港10000+的餐饮数据中,选择关键词为“茶餐厅”的数据——
这时,就需要用到模糊查询:Like+通配符
表达式
"name" LIKE '%茶餐厅%'
NO.2—修改字段部分内容
当你要修改一个字段的一部分内容,
例如,将【XZQHMC】字段中的“管理范围”改为“所在地”——
这时,需要用到“Replace()”命令
表达式
Replace( [XZQHMC], "管理范围","所在地" )
NO.3—提取字段部分内容
当你要提取一个字段的一部分内容,
例如,将【XZQHMC】字段中的村名单独提取出来——
这时,需要“Left()或Right()”命令与“”Instr()”命令结合使用
表达式
Left( [XZQHMC],InStr( [XZQHMC],"村" ) )
NO.4—按照位数提取内容
当你要按照位数来提取字段内容的时候,
例如,例如,将【DMTQ】字段中的前三位数字提取出来——
这时,需要在Python环境下使用提取命令
表达式
!DMTQ![0:3]
NO.5—为字段补充新内容
当你要为现有字段补充新内容的时候,
例如,将【XZQHMC】字段补充上“管理范围”四个字——
这时,需要用到“&”连接符
表达式
[XZQHMC] &"管理范围"
NO.6—将字段拆分为多个
当你要将一个字段拆分为多个字段的时候,
例如,将【type】字段的内容拆按照“大、中、小”三类拆分为三个字段——
这时,需要Python环境下用到“Split()”命令
表达式
!type! .split(";")[0]
以上转载于微信公众号:ArcGIS带你飞,感谢原作者的分享!
NO.7—arcgis属性表某个字段自动编号
例如:从1开始往后自动编号。
将下图中数据类型为文本型的typeid字段进行自动编号,数据记录从1开始往后递增。
在该字段上右键,进入字段计算器,勾选“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()方法前不能有空格,否则会报错!!!)
补充:
上述的案例是基于FID进行自动编号,如何根据其它字段进行自动编号呢?
思路:使用sort工具,基于某个字段进行编号,生成新的输出数据,然后基于新的输出数据使用案例1中的python代码进行自动编号。
参考资料:http://www.cnblogs.com/liweis/p/4153333.html
//使用Python给要素添加序号
NO.8—对属性表中某一字段自动编号
例如:属性表中的“县级”行政单位进行自动编号,存在县名称重复的情况,例如: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)
NO.9—对属性表中某一字段进行分段
情景一:如何把一个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
NO.10—查出省级行政区划名称(Chinese_Ch)为山开头,面积(Shape_Area)大于8000000的记录。
查询文本框输入:
"Chinese_Ch" LIKE '山%' AND "Shape_Area" >8000000
一般查询过程是在字段名称选择区中双击字段名、再选运算符,建立查询条件,并用Like、
And、Or、Not将几个条件组合起来。在设置字段的查询条件时,可在取值区中用鼠标选取,也可直接键入属性值。
字符型字段还可使用通配符,如用“%”替代多个字符,用“_”替代一个字符。例如:
"NAME"LIKE'张%'表示查询NAME字段,第一个字符为"张",不管后续有几个字符。
"LANDUSE"LIKE'F_'表示查询LANDUSE字段,第一个字符"F",第二个字符任意,但后续只能有一个。
按属性选择记录会出现语法错误,软件提示不能完成操作,引号、括号不匹配是常见差错,以下是注意事项:
- 字符型操作不能用等号代替LIKE;
- 字段名自身带双引号,如"LANDUSE",字符型取值用单引号,如'C',数字型取值不带引号;
- 单引号、双引号必须都用英文字符,不能用中英字符。
- 多用鼠标,少用键盘,可避免语法差错;
NO.11—查询属性表相同项
首先数据要求是存放在个人地理数据库(mdb)中,如果不是,需要先导入进去。这是因为个人地理数据库对子查询支持更好。
如果这个字段名叫name,表名叫area,SQL可类似如下写:
[name] in (select [name] from area group by [name] having count([name]) > 1)
参考资料:
http://zhihu.esrichina.com.cn/question/6606
文件地理数据库对子查询提供了有限的支持,而个人地理数据库和 ArcSDE 地理数据库则提供完全支持,详情见链接介绍:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00s500000033000000/
NO.12—查询属性表中要素记录的长度
例如:查询属性表中要素记录长度大于6的要素
CHAR_LENGTH(string_exp)
例如:查询字段名为‘名称’的长度大于6的要素
CHAR_LENGTH( 名称 ) >=6
链接:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00s500000033000000
文章转载于CSDN,作者gislaozhang
版权归原作者所有