一、在Arcgis中打开面要素文件(shp文件-投影坐标!!)
要是面要素文件一开始是经纬度坐标的,可以先将其转换为投影坐标。
我比较喜欢先用91卫图转换坐标。
1、在Arcgis中打开要素文件

2、打开面要素文件的属性表

3、打开属性表左上角的表选项

4、添加字段

5、输入字段名称、选择精度类型、确定

二、面积、周长---计算几何





上述为计算面积的过程、计算周长是一样的,只不过字段名称、计算几何中的属性是周长。其他过程都是一样的。
三、高度(长度)、宽度---字段计算器
计算长度和宽度时,在添加字段时填写对应的字段名称。
高度:!Shape.extenT.YMax! -!Shape.extenT.YMin!
宽度:





上述高度、宽度就都计算好了。可以对计算的结果用测量工具进行检验。


可见结果可靠。
四、最大直径(最大轴长)---字段计算器-显示代码块
添加字段:Max_diameter(但是这个字段名称的长度有一定要求,多出来的字符会被直接删掉)
字段计算器
显示代码块
预逻辑脚本代码:
import math
def true_max_axis_length(shape):
# 初始化最大长度为0
max_length = 0.0
# 获取面要素的第一个部分的折点数组
# .first() 用于处理可能的多部分要素(MultiPart),我们取第一个图形
array = shape.getPart(0)
# 获取顶点总数
pnt_count = array.count
# 双层循环,遍历计算每两个点之间的距离
for i in range(pnt_count):
for j in range(i + 1, pnt_count): # 从i+1开始,避免重复计算和自身比较
# 获取第i个和第j个点
pnt_i = array.getObject(i)
pnt_j = array.getObject(j)
# 计算两点间的欧氏距离
distance = math.sqrt(math.pow(pnt_i.X - pnt_j.X, 2) + math.pow(pnt_i.Y - pnt_j.Y, 2))
# 更新最大长度
if distance > max_length:
max_length = distance
# 返回计算出的最大长度
return max_length
表达式框:
true_max_axis_length(!Shape!)
最后点击确定就好了。


这里计算稍微慢点,尤其是当面要素文件比较大的时候。

检验结果准确。
这样所有的就都算完了。
总结就是:
面积、周长------【计算几何】
宽度、长度------【字段计算器】
最大直径------【字段计算器】------【显示代码块】------输入【预逻辑脚本代码】------输入【Max_diamet】
(需要用到python脚本代码块的时候,不论是直径还是其他字段的计算,只要需要用到自己编写的代码时,就用显示代码块,并在预逻辑脚本代码中输入代码即可。)
最后Arcgis的帮助系统
在Arcgis的帮助系统中也有一些常规的使用python计算字段的代码示例。可以现在这里面看看有没有需要的。
