背景:由于在做网格统计的时候需要对数据进行归一化统计,但是使用自带的字段计算器计算的值往往不是所有的值,而是前几位,因此在进行手动归一化处理的时候,归一化值不会达到真实值。比如笔者在进行格网路网密度计算后,希望对路网密度进行归一化,但出来的值有差,如最大值的归一化值是0.99379,并不精确。

解决:
本次使用arcpy代码进行处理。
归一化公式:(x - min) / (max - min)
根据归一化公式,输入arcpy代码,并在arcmap python 工具中运行,得到准确的结果。

import arcpy
fc = "roads_join" #图层
field = "density" #字段
out_field = "NormValue"
vals = [r[0] for r in arcpy.da.SearchCursor(fc, [field]) if r[0] is not None]
min_val, max_val = min(vals), max(vals)
if out_field not in [f.name for f in arcpy.ListFields(fc)]:
arcpy.AddField_management(fc, out_field, "DOUBLE")
with arcpy.da.UpdateCursor(fc, [field, out_field]) as cursor:
for row in cursor:
val = row[0]
norm = (val - min_val) / (max_val - min_val) if max_val != min_val else 0
row[1] = norm
cursor.updateRow(row)
2310

被折叠的 条评论
为什么被折叠?



