博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析ArcGis的字段计算器(一)——数值型数据计算,从“面积计算”开始
阅读量:4339 次
发布时间:2019-06-07

本文共 1864 字,大约阅读时间需要 6 分钟。

先来点儿背景知识铺垫:

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:


 

获取图斑(面要素)面积:

面积值是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。

转载于:https://www.cnblogs.com/yzhyingcool/p/10071154.html

你可能感兴趣的文章
MySQL详解--锁
查看>>
前端基础知识
查看>>
libevent 源码学习三 —— 基本使用场景和事件流程
查看>>
JAVA基础知识——数组
查看>>
java 项目request.getParameter("")接收不到值
查看>>
Cheatsheet: 2011 12.20 ~ 12.28
查看>>
基础知识
查看>>
《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
查看>>
CDH5.2+CM5.2+impala2+Spark1.1 集群搭建基础环境准备
查看>>
101 LINQ Samples: Query Execution
查看>>
selenium学习笔记(二)
查看>>
Socket通讯实例-基本Socket
查看>>
JS验证身份证号码,包含15和18位
查看>>
简单的屏幕适配
查看>>
Deep Reinforcement Learning 基础知识
查看>>
Shell 获取Shell所在目录
查看>>
五一结束
查看>>
xBIM 基础16 IFC的空间层次结构
查看>>
Deep Learning ——Yann LeCun,Yoshua Bengio&Geoffrey Hinton
查看>>
Redis-Java
查看>>