我一直无法获得简单的代码块,希望有人能够发现问题所在。我感觉自己像个瞎子。
1) 我在 ArcGIS 属性表中创建一个名为“SpeedLimit”的新短整数字段,表示道路类型的速度限制。
2) 道路类型是在同一个表的“fclass”字段中找到的字符串。
我打开 SpeedLimit 字段的字段计算器并填写以下内容:
预逻辑脚本代码:
def Speed(class):
if (class == ‘secondary’ or class == ‘tertiary’ or class == ‘trunk’ or class == ‘motorway’ or class == ‘primary’):
return 70
elif (class == ‘secondary_link’ or class == ‘tertiary_link’ or class == ‘trunk_link’ or class == ‘motorway_link’ or class == ‘primary_link’):
return 45
elif (class == ‘service’ or class == ‘track_grade1’ or class == ‘track_grade2’ or class == ‘track_grade3’ or class == ‘track_grade4’ or class == ‘track_grade5’):
return 15
else:
return 30
速度限制=
Speed(!fclass!)
任何人都可以发现我做错了什么而收到语法错误吗?
编辑回应评论: 我因运行更短、更简单的代码而收到错误:
def Speed(road):
if (road == 'secondary'):
return 70
else:
return 30
** 答案** 我只是没有选择“Python”单选按钮...... 感谢大家的帮助。
最佳答案
您可能想要这个:
def speed(aClass):
if (aClass == 'secondary' or aClass == 'tertiary' or aClass == 'trunk' or aClass == 'motorway' or aClass == 'primary'):
return 70
elif (aClass == 'secondary_link' or aClass == 'tertiary_link' or aClass == 'trunk_link' or aClass == 'motorway_link' or aClass == 'primary_link'):
return 45
elif (aClass == 'service' or aClass == 'track_grade1' or aClass == 'track_grade2' or aClass == 'track_grade3' or aClass == 'track_grade4' or aClass == 'track_grade5'):
return 15
else:
return 30
fclass = 'tertiary_link'
print(speed(fclass))
但是在 Python 中这样更优雅:
def speed(aClass):
if aClass in ['secondary',
'tertiary',
'trunk',
'motorway',
'primary']:
return 70
if aClass in ['secondary_link',
'tertiary_link',
'trunk_link',
'motorway_link',
'primary_link']:
return 45
if aClass in ['service',
'track_grade1',
'track_grade2',
'track_grade3',
'track_grade4',
'track_grade5']:
return 15
else:
return 30
fclass = 'tertiary_link' # Only for testing
print(speed(fclass))
请注意,我使用 elif
代替 if
,因为每个分支都会返回一个值(因此会跳过接下来的语句)。
关于ArcGIS 字段计算器中的 Python 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121627/