因工作需要,最近编辑已经矢量化好,却没有具体属性信息的地理数据,编辑过程中遇到很多问题,特此整理记录。

主要遇到三类问题:
(一)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 ScriptPython.

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 语句也可用 ORAND 串联起来,扩大搜索范围。

3 总结

本篇文章重点在属性表的编辑方面,介绍了常用的批处理操作技巧,内容偏新手向。同时也提到了 VB ScriptSQL 的一些常识,不论是否面向ArcGIS都需要掌握。接下来两篇为 Editor 和 Topology 相关操作,承接了新建属性表 --> 编辑字段 --> 编辑矢量图斑 --> 检查并完善矢量图斑 这一顺序,也是对整个项目的总结 。
本文成章匆忙,如有错误纰漏,欢迎评论区指正。


  1. 原文链接:ArcGIS属性字段名设置不超过四个中文的解决方法 ↩︎

ArcGIS 矢量编辑札记(一):Field Calculator 篇相关推荐

  1. arcgis 矢量编辑过程时,防止误移动操作设置粘滞移动容差设置大一点

    arcgis 矢量编辑过程时,防止误移动操作设置:编辑下,选项设置----粘滞移动容差设置大一点

  2. ArcGIS栅格编辑札记:剪裁、提取与对齐

    一.问题 某些模型需要多张栅格数据,作为输入变量.在模型处理过程中,往往需要保证数据的一致性,否则会报错(如下图的 different extent 报错). 所谓的一致性有3种含义: 数据格式一致 ...

  3. ArcGIS字段计算器 Field Calculator错误

    正常计算出错: ArcGIS Field Calculator: there was a failure during processing, check the Geoprocessing resu ...

  4. ArcGIS 10.6字段计算器(Field Calculator)字段任意填充编码序列(奇数、偶数序列、自定义间隔)

    有关ArcGIS 10.x中属性数据采集和字段计算器(Field Calculator)的文章,需要的读者可以参照: <ArcGIS实验教程--实验四:数字化属性数据的采集>,文章中就属性 ...

  5. ArcGIS用Field Calculator 批量处理shp属性,添加标准图幅号(并且标记跨图幅图斑)

    这个可以用arcpy做,但太麻烦了,想了个简单的法子,直接用属性计算器计算了. 我用的是10.2版本的arcgis,而且是没汉化的英文版 主要分两部分,一部分是提取图斑包络四边形顶点,另一个是计算图幅 ...

  6. ArcGIS Field Calculator 计算,错误 “Error running VBA code: 语句未结束” 解决方法

    在ArcGIS 中的Field Calculator ,当使用 VBA script 进行计算时,出现错误 "Error running VBA code: 语句未结束". 解决办 ...

  7. ArcMap中属性字段计算器(Field Calculator)的使用技巧

    首发地址:https://www.cnblogs.com/esrichina/p/3199475.html 很多时候,我们在使用ArcGIS进行属性数据编辑时,需要批量修改某些字段值,这时候ArcGI ...

  8. ArcGIS Engine 编辑介绍

    转自原文 ArcGIS Engine 编辑介绍 IWorkspaceEdit接口是ArcGIS Engine 实现空间数据编辑的重要接口,它让程序启动或者停止一个编辑流程,在这个编辑流程内,可以对数据 ...

  9. arcgis 地图_ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤

    今天给大家带来的干货是[ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤],欢迎大家收藏查阅! 在桌面上新建一个文件夹,打开ArcCatalog, "文件"--" ...

  10. ArcGIS Engine 编辑- ITask

    转自原文ArcGIS Engine 编辑- ITask 下面的代码是我们定制的一个工作流-给等高线赋值 namespace EngineApplication { [Guid("5b0c06 ...

最新文章

  1. 可想实现一个自己的简单jQuery库?(五)
  2. centos 6.x 升级内核
  3. leetcode刷题实录:4
  4. android 帧动画旋转,安卓动画实现
  5. Java的内存分配策略有哪些_Java的内存分配策略
  6. Apexchart整数多出小数点
  7. Python for i in range ()用法详解
  8. Java多线程 - 线程组
  9. python华为面试题10个人数3获取下标
  10. STM32F7xx —— CAN通信
  11. 淘宝应用柔性架构的探索
  12. 关掉内核线程linux,c – 如何在rmmod上停止Linux内核线程?
  13. java 8 jre_Java 8——JAVA jre运行环境
  14. A deep learning model integrating FCNNs and CRFs for brain tumor segmentation
  15. pytorch中创建多个空的tensor、pycharm从自己写的.py中引用函数下面画红线等问题
  16. Git Cheat sheet
  17. 【渝粤教育】电大中专消费者心理学作业 题库
  18. FTP服务器架设速成手册
  19. linux下载文件命令
  20. pytorch实现resnet50

热门文章

  1. 像素密度(衡量屏幕显示能力)
  2. FineRepot学习及使用总结
  3. layui上传文件请求接口异常_解决layui table表单提示数据接口请求异常的问题
  4. 【渝粤题库】广东开放大学物业管理基本制度与政策 形成性考核
  5. 公安大数据智能化平台(大数据人工智能公司)
  6. matlab的grid网格线属性设置,修改网格线密度
  7. c++自动抢购_软件神器—全网口罩监控抢购
  8. 微信支付商户平台app支付开通方法详解
  9. 单击选定单元格后输入新内容_excel表格,要双击选定后才能输入,单击不能输入为什么...
  10. Python修改证件照底色,get新技能