ArcGIS_Pro_Field_Calculator

为ArcGIS_Pro的字段计算器开一帖。


#

购入了正版ArcGIS Pro,竟兴奋地玩起了字段计算器。以下部分每实现一个功能都会新开一个标题。在这里就写一下使用属性表的字段计算器的基础规则吧。

使用字段计算器的 Python 3 时,需要将字段名用 ! 括起。如!shape!!CITY_NAME!等等。且在传参时,把属性字段写在前面。

计算文本或字符字段的字符串时,在对话框中,字符串必须使用双引号(”字符串”),而在脚本中,还必须对使用双引号的字符串两边添加单引号(例如,'”string”‘)。但若在表达式参数中输入数值,则两端无需引号。

在函数的参数传递中,可使用typeextentcentroidfirstPointlastPointarealengthisMultipartpartCountGeometry对象中的属性

Python表达式可以将几何的arealength属性与面积或线性单位结合使用,从而将值转换为不同的测量单位(如!shape.length@kilometers!)。 如果数据存储在地理坐标系中且具有线性单位,例如英里,则使用测地线算法计算长度。 在地理数据中使用面积单位会产生不正确的结果,这是因为沿地球面的十进制度数并不一致。

面积测量单位关键字如下所示:

线性测量单位关键字如下所示:

通过结合使用 geodesicArea 或 geodesicLength 属性与面积或线性测量单位,Python 表达式可用于计算要素的测地线面积或长度(如 !shape.geodesicArea@hectares! 或 !shape.geodesicLength@miles!)。

# 引用模块

增加这一标题主要是为了演示,它在代码块里可以进行一个 import 

new_field = add_random()
Code Block:
import numpy
def add_random():
    return numpy.random.random()

# 全局变量

在代码块中还可以定义全局变量,使用方式和在 PyCharm 中一样,感动。

new_field = add_row_num()
Code Block:
row_num = 0
def add_row_num():
    global row_num
    row_num += 1
    return row_num

# 计算点的坐标

第一晚整了接近一个小时,才获取一个不那么离谱的函数。

计算点数据的点要素的坐标可以用

new_field = get_coordinates(!shape!)

Code Block:
def get_coordinates(shape):
    return shape.getPart(0).X

在属性表的字段计算器中,应该可以使用ArcPy内的类和方法。

计算线数据里每一个线要素的起始坐标终点坐标会用到 shape.firstpoint  shape.lastpoint 类。

first_point_xy = get_startpoint_xy(!shape!)
Code Block:
def get_startpoint_xy(shape):
    return '%s, %s' % (shape.firstpoint.x, shape.firstpoint.y)

last_point_xy = get_endpoint_xy(!shape!)
Code Block:
def get_endpoint_xy(shape):
    return '%s, %s' % (shape.lastpoint.x, shape.lastpoint.y)

有时候不仅需要计算点的坐标,还要进行坐标系的更改以得到正确的数值,可以直接调用ArcPy的方法。

coord_in_wgs84 = get_coord_wgs84(!shape!)
Code Block:
def get_coord_wgs84(shape):
    x = arcpy.PointGeometry(shape.firstpoint, shape.spatialReference).projectAs(arcpy.SpatialReference(4326)).firstPoint.X
    return x
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments