ArcGIS 矢量编辑札记(一):Field Calculator 篇
因工作需要,最近编辑已经矢量化好,却没有具体属性信息的地理数据,编辑过程中遇到很多问题,特此整理记录。
主要遇到三类问题:
(一)Shapefile 属性表编辑
(二)提取边界线
(三)检查拓扑
本篇针对第一类问题。
1 添加字段
拿到堪称信息沙漠的属性表,首先要做的自然是 Add Field. 然而添加字段时需要注意以下几点:
1.1 添加 Text 类字段时,字段名不能超过3个中文字符
原因:Shapefile 文件中,属性表字段名不得超过10Byte. 而ArcGIS 10.3 将 dbf 编码由原先系统默认的GBK
强制改为utf-8
,这样,中文字段名限制由5个变为3个。
解决方法1:
(1)在window+R中输入下面内容,回车
reg add HKEY_CURRENT_USER\Software\ESRI\Desktop10.3\Common\CodePage /v dbfDefault /t REG_SZ /d 936 /f
*10.5 版本只需要将 \Desktop10.3
更改为 \Desktop10.5
这样字段名就可以输入5个中文字符。
(2)可以新建Geodatabase, 如下图Personal Geodatabase支持64 Byte字段名。
1.2 字段重命名
ArcGIS 10.3 不支持字段重命名,必须新建一个字段。
另外,也可以修改字段别名,在属性表设置中显示。
2 Field Calculator 操作
通过繁琐细致的编辑,已经完成了属性赋值,但想进一步对属性进行批处理,怎么办?这时候 Field Calculator 便不可或缺。这一部分也是本篇的主要内容。
Field Calculator 主要有两种语言实现方式:VB Script
和 Python
.
VB Script
是微软公司出品的动态脚本语言,而 Python
大家都很熟悉,需要注意的是由于 Python
对于格式的依赖,在Field Calculator中使用 Python
语句时,要用Tab和Enter调整格式。
对字段的批处理大部分都是处理字符串,Python
的字符串函数多且灵活,而VB Script
有限的字符串函数也能够实现很多功能。
本篇主要介绍VB Script
的几个字符串函数。
函数 | 描述 |
---|---|
InStr | 返回字符串在另一字符串中首次出现的位置。搜索从字符串的第一个字符开始。 |
InStrRev | 返回字符串在另一字符串中首次出现的位置。搜索从字符串的最末字符开始。 |
LCase | 把指定字符串转换为小写。 |
Left | 从字符串的左侧返回指定数量的字符。 |
Len | 返回字符串中的字符数量。 |
LTrim | 删除字符串左侧的空格。 |
RTrim | 删除字符串右侧的空格。 |
Trim | 删除字符串左侧和右侧的空格。 |
Mid | 从字符串中返回指定数量的字符。 |
Replace | 使用另一个字符串替换字符串的指定部分指定的次数。 |
Right | 从字符串的右侧返回指定数量的字符。 |
Space | 返回由指定数量的空格组成的字符串。 |
StrComp | 比较两个字符串,返回代表比较结果的一个值:-1, 0, 1 或 Null。 |
String | 返回包含指定长度的重复字符的字符串。 |
StrReverse | 反转字符串。 |
UCase | 把指定的字符串转换为大写。 |
2.1 字符串简单分割
Left()
函数、Right()
函数和Mid()
函数都能够选取字符串中特定数量的字符,类似于Python
中的切片,返回特定位置上的字符。
语法
Left(string,length) '从左起length个长度的字符
Mid(string,start,length) '从start开始的length个长度的字符
实例
如图,我们要把 “细分类” 中的 ‘黄土塬<100’ 提取至 “黄土” 中,应该怎么办呢?
输入语句及结果:
同理,可提取“承压水<100”
或
结果:
2.2 字符串的条件分割
字符串统一时,上一个操作比较好用,若本字段中,某一length对应的字符不一致该怎么办?
我们需要用到 InStr()
函数,查找出特定字符的位置。
语法
InStr(string1,string2) 'string1字符串中首次出现string2字符串的位置
实例
将 “细分类” 中 ‘黄土塬’ 和 ‘黄土梁峁’ 后的 ‘承压水*’ 提取至 “黄土” 中。
在对话框中输入以下语句,Mid(string,start,length) 函数中,length可以缺省。
Mid ( [细分类], InStr( [细分类], "承"))
结果:
2.3 字符串替换
想替换字符串中某个字符,应该怎么办?
用 replace()
函数可以轻松实现这个功能。
语法
Replace(string,find,replacewith) '从string中找到find, 用replacewith替换。
实例
将 “细分类” 中的 ‘+’ 去掉。
语句及结果如下:
2.4 Select 的使用
Field Calculator 的语句都是对特定字段的操作,且编写条件语句、循环结构等较为麻烦,这时灵活结合Select By Attributes 工具就可以对特定记录进行操作。
语法
SELECT * FROM filename WHERE field LIKE string;
实例
水库和湖泊不属于黄土,对应的黄土字段要填无怎么办?
在对话框中输入以下语句:
"细分类" LIKE '%水库'
OR "细分类" LIKE '%湖'
OR "细分类" LIKE '%河%'
注意到SQL语句中通配符 %
的使用,可以代替前后字符,较为常用。
另外多个搜索条件 WHERE
语句也可用 OR
或 AND
串联起来,扩大搜索范围。
3 总结
本篇文章重点在属性表的编辑方面,介绍了常用的批处理操作技巧,内容偏新手向。同时也提到了 VB Script
和 SQL
的一些常识,不论是否面向ArcGIS都需要掌握。接下来两篇为 Editor 和 Topology 相关操作,承接了新建属性表 --> 编辑字段 --> 编辑矢量图斑 --> 检查并完善矢量图斑 这一顺序,也是对整个项目的总结 。
本文成章匆忙,如有错误纰漏,欢迎评论区指正。
原文链接:ArcGIS属性字段名设置不超过四个中文的解决方法 ↩︎
ArcGIS 矢量编辑札记(一):Field Calculator 篇相关推荐
- arcgis 矢量编辑过程时,防止误移动操作设置粘滞移动容差设置大一点
arcgis 矢量编辑过程时,防止误移动操作设置:编辑下,选项设置----粘滞移动容差设置大一点
- ArcGIS栅格编辑札记:剪裁、提取与对齐
一.问题 某些模型需要多张栅格数据,作为输入变量.在模型处理过程中,往往需要保证数据的一致性,否则会报错(如下图的 different extent 报错). 所谓的一致性有3种含义: 数据格式一致 ...
- ArcGIS字段计算器 Field Calculator错误
正常计算出错: ArcGIS Field Calculator: there was a failure during processing, check the Geoprocessing resu ...
- ArcGIS 10.6字段计算器(Field Calculator)字段任意填充编码序列(奇数、偶数序列、自定义间隔)
有关ArcGIS 10.x中属性数据采集和字段计算器(Field Calculator)的文章,需要的读者可以参照: <ArcGIS实验教程--实验四:数字化属性数据的采集>,文章中就属性 ...
- ArcGIS用Field Calculator 批量处理shp属性,添加标准图幅号(并且标记跨图幅图斑)
这个可以用arcpy做,但太麻烦了,想了个简单的法子,直接用属性计算器计算了. 我用的是10.2版本的arcgis,而且是没汉化的英文版 主要分两部分,一部分是提取图斑包络四边形顶点,另一个是计算图幅 ...
- ArcGIS Field Calculator 计算,错误 “Error running VBA code: 语句未结束” 解决方法
在ArcGIS 中的Field Calculator ,当使用 VBA script 进行计算时,出现错误 "Error running VBA code: 语句未结束". 解决办 ...
- ArcMap中属性字段计算器(Field Calculator)的使用技巧
首发地址:https://www.cnblogs.com/esrichina/p/3199475.html 很多时候,我们在使用ArcGIS进行属性数据编辑时,需要批量修改某些字段值,这时候ArcGI ...
- ArcGIS Engine 编辑介绍
转自原文 ArcGIS Engine 编辑介绍 IWorkspaceEdit接口是ArcGIS Engine 实现空间数据编辑的重要接口,它让程序启动或者停止一个编辑流程,在这个编辑流程内,可以对数据 ...
- arcgis 地图_ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤
今天给大家带来的干货是[ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤],欢迎大家收藏查阅! 在桌面上新建一个文件夹,打开ArcCatalog, "文件"--" ...
- ArcGIS Engine 编辑- ITask
转自原文ArcGIS Engine 编辑- ITask 下面的代码是我们定制的一个工作流-给等高线赋值 namespace EngineApplication { [Guid("5b0c06 ...
最新文章
- 可想实现一个自己的简单jQuery库?(五)
- centos 6.x 升级内核
- leetcode刷题实录:4
- android 帧动画旋转,安卓动画实现
- Java的内存分配策略有哪些_Java的内存分配策略
- Apexchart整数多出小数点
- Python for i in range ()用法详解
- Java多线程 - 线程组
- python华为面试题10个人数3获取下标
- STM32F7xx —— CAN通信
- 淘宝应用柔性架构的探索
- 关掉内核线程linux,c – 如何在rmmod上停止Linux内核线程?
- java 8 jre_Java 8——JAVA jre运行环境
- A deep learning model integrating FCNNs and CRFs for brain tumor segmentation
- pytorch中创建多个空的tensor、pycharm从自己写的.py中引用函数下面画红线等问题
- Git Cheat sheet
- 【渝粤教育】电大中专消费者心理学作业 题库
- FTP服务器架设速成手册
- linux下载文件命令
- pytorch实现resnet50
热门文章
- 像素密度(衡量屏幕显示能力)
- FineRepot学习及使用总结
- layui上传文件请求接口异常_解决layui table表单提示数据接口请求异常的问题
- 【渝粤题库】广东开放大学物业管理基本制度与政策 形成性考核
- 公安大数据智能化平台(大数据人工智能公司)
- matlab的grid网格线属性设置,修改网格线密度
- c++自动抢购_软件神器—全网口罩监控抢购
- 微信支付商户平台app支付开通方法详解
- 单击选定单元格后输入新内容_excel表格,要双击选定后才能输入,单击不能输入为什么...
- Python修改证件照底色,get新技能