实际上这是GIS中的Python,所以我在Arcgis中使用table并尝试计算字段并使用类别进行划分。
我的字段名为 Elevation
数据包含整数示例:
1 - 2
3 - 6
2 - 3
8.5 - 12
11 - 12
我需要使用规则来分类,如果
高度< 1然后指数= 0.3,如果高度= 2-3指数= 0.6,如果高程> 1。 3指数= 1
我有这段代码:
def Reclass( Elevation ):
r_min, r_max = (float(s.strip()) for s in Elevation.split('-'))
print "r_min: {0}, r_max: {1}".format(r_min,r_max)
if r_min < 1 and r_max < 1:
return 0.333
elif r_min >= 1 and r_max >= 1 and r_min <= 3 and r_max <= 3:
return 0.666
elif r_min > 3 and r_max > 3:
return 1
elif r_min <= 3 and r_max > 3:
return 1
else:
return 999
我的问题是如何剥离它,并使用我上面的规则对其进行分类? 先谢谢
答案 0 :(得分:1)
根据评论,您的字段是一个字符串,其中包含您在上面描述的表单范围。
首先,这是可怕的数据库设计。最小值和最大值应该是整数类型的单独列。为了阻止良好的数据库设计,更加震撼了ESRI
此外,您的规则不足以处理范围。范围检查要么需要与范围的1端或两端进行比较。因此,您将 明确说明您对“索引”规则的要求。
鉴于您有表示范围的字符串,您唯一的选择是将范围解析为其最小值和最大值并使用它们。这在Python中并不太难:
>>> r = "3 - 6"
>>> r_min, r_max = (int(s.strip()) for s in r.split('-'))
>>> r_min
3
>>> r_max
6
-
。然后它遍历结果列表,每个元素都删除了前导和尾随空格,然后转换为int
。最后,Python在右侧解包生成器以填充左侧的变量。
请注意格式错误的数据会导致错误。
一旦澄清了“索引”规则,就可以弄清楚如何使用这个最小值和最大值来获得“索引”。
答案 1 :(得分:0)
我从你那里借了代码,下面是@jpmc26。此代码(减去仅用于测试的print
语句)应该适用于ArcMap的Field Calculator,但它只是Python代码。问题是当一个范围的两端分成不同的类别时你没有告诉我们你想做什么,所以现在我用else
语句来输出999。
def Reclass( Elevation ):
r_min, r_max = (float(s.strip()) for s in Elevation.split('-'))
print "r_min: {0}, r_max: {1}".format(r_min,r_max)
if r_min < 1 and r_max < 1:
return 0.333
elif r_min >= 1 and r_max >= 1 and r_min <= 3 and r_max <= 3:
return 0.666
elif r_min > 3 and r_max > 3:
return 1
else:
return 999
print Reclass("0 - 1.1")
print Reclass("5.2 - 10")
print Reclass("2 - 3")
print Reclass("0 - 0")