arcgis中python计算面积的表达式_解析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) 这样一个转换是必要的。

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

面积值是double型的,所以要放到Double型字段计算。

方法一:常用的,是在字段标题上右键——计算几何(Calculate Geometry)

方法二:使用Python语句的方式,在字段计算器中“解析语言”勾选Python,在语句块输入框填 !shape.area!

方法二中使用Python语句,在ArcMap中要素的一些几何(Geometry)属性,可以通过“!shape.?!”的方式进行计算,这个我们以后继续分解。

有“新来的”可能会遇到面积不能计算的情况,这一般是因为数据的空间参考没有设置好,至于“空间参考”是神马玩意,不知道的请百度或者发红包给作者,包教不会。

1458014-20181205165309437-44650295.png

面积的单位转换(平方米转亩): 直接[MJ]*0.0015

面积的舍入与取整:

1、舍入

一般我们会采用四舍五入的方式进行小数舍入,下面我们来贴图

VBScript,使用round( [MJ],3)对面积字段的值取小数后3位,结果如图:

1458014-20181205165501560-1505830153.png

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))

不知道怎么使用?给你个见下图

1458014-20181205173002889-982576144.png

③确定没问题的方法——Excel函数处理后挂接回来。

2、 取整

取整一般有两种,一种是直接取整数位,一种是舍入取整。

第一种在VBScript或者Python里都可以使用int函数实现

第二种使用round函数,这时候就有比较大的差距了。

1458014-20181205201429018-1761351189.png

题外话,再来点随机凑数

vb的随机数函数是rnd,它返回一个小于1,大于等于0的数

如果生成2-10之间的数,可以用 rnd()*2+8 不过有一个问题是它永远取不到10。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值