解析ArcGis的字段计算器(一)——数值型数据计算,从“面积计算”开始
先来点儿背景知识铺垫:
ArcMap的字段计算器提供了两种脚本语言的支持用以计算,两种脚本语言是VBScript与Python。
多数人选择使用前者,因为它的基本函数和Excel的函数貌似一样。注意我这里用了一个“貌似”,虽然Excel函数与VB函数有着千丝万缕的关系,但它毕竟不是VB函数(ArcMap里用VBScript),把Excel函数照搬进ArcMap的计算器,许多是不可以运行的。使用VBScript函数正确的打开方式应该是查询VBScript帮助。至于VB、VBA、VBScript啥关系,不讲。
在ArcMap的字段计算器里,VBScript语句中字段(Field)应该用“[field_Name]”的样式输入,Python语句中字段应该用“!field_Name!”的样式输入。(提醒“新来的”,①不要把这玩意儿“”抄过去,②所有符号应为英文的)。
Tip:数值型与字符串型拼接的常见错误
不论在VBScript还是Python,"面积:"+1.2 这样的写法都是错误的。
+适用于字符串类型的连接,在VB中,字符串与数值连接可以使用 & ;而在Python中, "面积:"+str(1.2) 这样一个转换是必要的。
作者:yzhyingcool
ArcGis交流群:
Blog:https://www.cnblogs.com/yzhyingcool/
获取图斑(面要素)面积:
面积值是double型的,所以要放到Double型字段计算。
方法一:常用的,是在字段标题上右键——计算几何(Calculate Geometry)
方法二:使用Python语句的方式,在字段计算器中“解析语言”勾选Python,在语句块输入框填 !shape.area!
方法二中使用Python语句,在ArcMap中要素的一些几何(Geometry)属性,可以通过“!shape.?!”的方式进行计算,这个我们以后继续分解。
有“新来的”可能会遇到面积不能计算的情况,这一般是因为数据的空间参考没有设置好,至于“空间参考”是神马玩意,不知道的请百度或者发红包给作者,包教不会。
面积的单位转换(平方米转亩): 直接[MJ]*0.0015
面积的舍入与取整:
1、舍入
一般我们会采用四舍五入的方式进行小数舍入,下面我们来贴图
VBScript,使用round( [MJ],3)对面积字段的值取小数后3位,结果如图:
Python(ArcGis10.1使用Python2.7),使用round( !MJ! ,3)对面积字段的值取小数后3位,结果就不贴图了,和上边一样。
有点意思吧?和你想的结果一样吗?一般使用中这样不会有问题,下面部分是闲扯扩展,有兴趣可读。
在编程语言中小数舍入一般采用“四舍六入五凑双”的方式,说的通俗点就是看舍入位数之后的数
距离哪个近就进位位给谁:
保留1位的话2.449是2.4 2.451是2.5
如果一样远(5),那就凑双数:
如果取3位,第4位是末位值为5,进位后第3位不是双数就不进,所以2.2325是2.232,而2.2315也是2.232。
那么,怎么实现四舍五入呢?
①VBScript用 FormatNumber( [MJ],3)试试;
②Python用下面的函数试试:
def getRound(val,n):
"""
:function:替换内置round函数,实现保留n位小数的精确四舍五入
:param val: 类型string或数值型
:param n: 需要保留小数的位数,要求大于0
:return: 四舍五入后的数据,类型string
"""
n = int(n)
f = '{:.%sf}'%n
return f.format(round(float(val) * pow(10,n)) / pow(10.0,n))
不知道怎么使用?给你个见下图
③确定没问题的方法——Excel函数处理后挂接回来。
2、 取整
取整一般有两种,一种是直接取整数位,一种是舍入取整。
第一种在VBScript或者Python里都可以使用int函数实现
第二种使用round函数,这时候就有比较大的差距了。
题外话,再来点随机凑数
vb的随机数函数是rnd,它返回一个小于1,大于等于0的数
如果生成2-10之间的数,可以用 rnd()*2+8 不过有一个问题是它永远取不到10。
解析ArcGis的字段计算器(一)——数值型数据计算,从“面积计算”开始的更多相关文章
- 解析ArcGis的字段计算器(三)——文本型字段计算,编号那些事儿
实际操作中我们一般会将编号字段定义为文本型,因为编号不是序号,序号是一个递增数值,而编号往往是一个数字串代码. 本篇无说明的均使用VBScript语句1.怎么编号?最简单的编号—>直接在编号字段 ...
- 解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面
这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”.重复往往是在合并多Shpfile文件时不小心重复导入造成的. 这里提供一种可能的解决办法,数据无价,请备份! ...
- 解析ArcGis的标注(一)——先看看分数式、假分数式标注是怎样实现的
该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. ArcGis的标注表达式支持VBScrip ...
- ArcGis 字段计算器表达式(Field calculator expression).cal文件与标注表达式(label expression).lxp的实质及其编码方式、解析方法
ArcGis 字段计算器表达式可以保存为一个扩展名为.cal的文件,该文件的实质是一个文本文件,编码方式为 UTF-16-LE. 官方的说明是“ArcGIS 应用程序使用 UTF-16-LE 编码读写 ...
- ArcGIS 字段计算器 Python 坑
最近要处理个简单数据,一个字段中为文本类型,包含各种描述.要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来. 比如 字段值为 “非法占用100平方米” 处理后结果为 100 ...
- ArcGIS字段计算器分割字段中的字符串
ArcGIS字段计算器分割字段中的字符串 实例:在一个字段中存有长宽高三个属性数据,以x分割.例如sss为字段名(字段属性为文本类型),数据格式为:100x200x300,利用字段计算器分别将三个数存 ...
- arcgis字段计算器
arcgis字段计算器 一.VB脚本 1.取某字段前几位或者后几位 ) ) 2.合并字段,中间加符号 Dim a if [ZDDM2] ="" Then a= [ZDDM1] el ...
- 由ArcMap属性字段自增引出字段计算器使用Python的技巧
1.前言 前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQL Server中对于数值型字段可以设置自增.所以我打开ArcCatalog查看发现只提供默认值 ...
- ArcMap中属性字段计算器(Field Calculator)的使用技巧
很多时候,我们在使用ArcGIS进行属性数据编辑时,需要批量修改某些字段值,这时候ArcGIS提供的属性字段计算器(Field Calculator)就是一把利器.下面我就Field C ...
随机推荐
- 在VS中安装nuget离线包nupkg文件
1.下载 nupkg文件 2.打开VS,工具,选项,如下图,复制右侧圈圈地址,把下载文件复制丢进去 3.管理当前解决方案的nuget包 n 4.左侧选择你下载的包名,在右侧选择需要安装在哪一层项目,点 ...
- zabbix agent 自定义 UserParameter
有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParamet ...
- 浏览器在DPI缩放时变化问题
在高分辨笔记本电脑上,如果使用了"放大".那么原来在笔记本上很小的字和图就看起来大很多了.看起来舒服. 这个笔记本电脑是 1920 1080 装W10,系统推荐说125%佳.于是设 ...
- BZOJ2244 拦截导弹
此题最早看到是在我还什么都不会的去年的暑期集训,是V8讲的DP专题,我当时还跑去问这概率怎么做.这道题要求的是二维最长不上升子序列,加上位置一维就成了三维偏序问题,也就是套用CDQ分治,对位置排序,然 ...
- 20165223 《JAVA程序设计》第五周学习总结
教材学习内容总结 第七章要点 内部类 匿名类 异常类 断言 第十章要点 File类 文件字节/字符的输入.输出流 缓冲流 随机流 数组流 数据流 对象流 序列化和对象克隆 使用Scanner解析文件 ...
- Typescript学习笔记(三)变量声明及作用域
ts的变量声明有var,let和const,这尼玛完全跟es6一样嘛.就稍微介绍一下. 大多数js开发者对于var很熟悉了,原生js里没有块级作用域,只有函数作用域和全局作用域,还存在var的变量提升 ...
- Lambda 表达式有何用处?如何使用?
强烈推荐!!! 作者:Sevenvidia链接:https://www.zhihu.com/question/20125256/answer/324121308来源:知乎著作权归作者所有.商业转载 ...
- wildfly 10上使用最新的 Hibernate ORM OGM
ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...
- vue2.0项目实战(2)使用 vue-cli 搭建项目
Vue-cli是官方推荐的快速构建单页应用的脚手架.官方给的建议,如果你是初次尝试Vue,哪就老老实实用普通的书写引入js文件,这里牵扯太多的东西,例如webpack .npm .nodejs 等等, ...
- django 通过邮箱和用户名都能登录
一. 在settings.py 文件中的#Application definition 下增加代码: AUTHENTICATION_BACKENDS=( 'users.views.CustomBack ...