先来点儿背景知识铺垫:

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的字段计算器(一)——数值型数据计算,从“面积计算”开始的更多相关文章

  1. 解析ArcGis的字段计算器(三)——文本型字段计算,编号那些事儿

    实际操作中我们一般会将编号字段定义为文本型,因为编号不是序号,序号是一个递增数值,而编号往往是一个数字串代码. 本篇无说明的均使用VBScript语句1.怎么编号?最简单的编号—>直接在编号字段 ...

  2. 解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面

    这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”.重复往往是在合并多Shpfile文件时不小心重复导入造成的. 这里提供一种可能的解决办法,数据无价,请备份! ...

  3. 解析ArcGis的标注(一)——先看看分数式、假分数式标注是怎样实现的

    该“标注”系列博文的标注引擎使用“标准标注引擎(standard label engine)”,这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. ArcGis的标注表达式支持VBScrip ...

  4. ArcGis 字段计算器表达式(Field calculator expression).cal文件与标注表达式(label expression).lxp的实质及其编码方式、解析方法

    ArcGis 字段计算器表达式可以保存为一个扩展名为.cal的文件,该文件的实质是一个文本文件,编码方式为 UTF-16-LE. 官方的说明是“ArcGIS 应用程序使用 UTF-16-LE 编码读写 ...

  5. ArcGIS 字段计算器 Python 坑

    最近要处理个简单数据,一个字段中为文本类型,包含各种描述.要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来. 比如 字段值为 “非法占用100平方米” 处理后结果为 100 ...

  6. ArcGIS字段计算器分割字段中的字符串

    ArcGIS字段计算器分割字段中的字符串 实例:在一个字段中存有长宽高三个属性数据,以x分割.例如sss为字段名(字段属性为文本类型),数据格式为:100x200x300,利用字段计算器分别将三个数存 ...

  7. arcgis字段计算器

    arcgis字段计算器 一.VB脚本 1.取某字段前几位或者后几位 ) ) 2.合并字段,中间加符号 Dim a if [ZDDM2] ="" Then a= [ZDDM1] el ...

  8. 由ArcMap属性字段自增引出字段计算器使用Python的技巧

    1.前言       前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQL Server中对于数值型字段可以设置自增.所以我打开ArcCatalog查看发现只提供默认值 ...

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

           很多时候,我们在使用ArcGIS进行属性数据编辑时,需要批量修改某些字段值,这时候ArcGIS提供的属性字段计算器(Field Calculator)就是一把利器.下面我就Field C ...

随机推荐

  1. Gogs 部署安装(Linux)

    环境 centos7:golang+mysqldb+git. 安装配置环境[mysql装了请跳过] yum install mysql-community-server go git -y 配置防火墙 ...

  2. 洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)

    洛谷题目传送门 具体思路看别的题解吧.这里只提两个可能对常数和代码长度有优化的处理方法. I 把一个询问拆成\(9\)个甚至\(16\)个莫队询问实在是有点珂怕. 发现询问的一边要么是一个区间,要么是 ...

  3. Asp.Net Output.Write()

    string name="张三" <div> <label>@Output.Write(name)</label> </div> 在 ...

  4. Palindrome Function HDU - 6156(数位dp)

    要求m-n内在l-r进制下的是回文数的总个数. dp[进制][从第j为开始][目前到达第k位] = 总的方案数 dfs枚举目前的到达的位置,这个数开始的位置,进制,前导零,限制条件,然后枚举的时候如果 ...

  5. Ubuntu常用软件安装(小集合)

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux Linux包系列的知识:https://www.cnblogs.com/dun ...

  6. P3486 [POI2009]KON-Ticket Inspector

    啊!这题做的真是爽!除了DP这个方法是有提示的之外,这题居然没有题解,哈哈哈嘿嘿嘿.很自豪的说:全是我自己独立解出来的一道题,包括设计状态,推倒(☺)转移方程,最后记录路径. 好了,首先,我们发现这题 ...

  7. A1018. Public Bike Management

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  8. Java 多线程篇

    先举个例子 计算机的核心是CPU,它承担了计算机所有计算任务,可以把它理解为像一个工厂,时刻在运行. 假定工厂有一个电力系统,工厂有很多车间,一次只能供给一个车间使用,也就是说一个车间开工的时候,其他 ...

  9. windows c语言 网络

    WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStart ...

  10. Day26--Python--包

    1. from xxxx import * 从xxx导入所有. 如果XXX模块内部有__all__ 导入all中的内容. 如果没有__all__全部都导入 __all__ = ["money ...