我目前正在研究一个递归函数来搜索表示沿河位置的字典。start
字典使用作为键索引 4 个并行数组。
并行阵列:
start
= 流量累积较小的端点位置,
end
= 另一个端点的位置(流量累积较大),
length
= 段长度,和;
shape
= 实际形状,面向从头到尾运行。
字典:
G = {}
for (st,sh,le,en) in zip(start,shape,length,end):
G[st] = (sh,le,en)
我的目标是从一个由 表示的起点沿河向下搜索,p
并选择一个以 2000 米(由 表示x
)间隔的位置,直到end
. 这是我正在使用 Python 处理的递归函数:
def Downstream (p, x, G):
... e = G[p]
... if (IsNull(e)):
... return ("Not Found")
... if (x < 0):
... return ("Invalid")
... if (x < e.length):
... return (Along (e.shape, x))
... return (Downstream (e.end, x-e.length,G))
目前,当我输入Downstream ("(1478475.0, 12065385.0)", 2000, G)
它时,它会返回一个 keyerror。我已经检查key in G
并且该键返回false,但是当我搜索G.keys ()
它时,它返回由start
包含给出false的键表示的所有键。
例如一个键是(1478475.0, 12065385.0)
. 我已将此键用作文本和 2 个双精度值的元组,并且两次都返回了 keyerror。
错误:
Runtime error
Trackback (most recent call last):
File “<string>”, line 1, in <module>
File “<string>”, line 1, in Downstream
KeyError: (1478475.0, 12065385.0)
是什么导致了密钥错误,我该如何解决这个问题以达到我的目标?
我在 ArcGIS 中使用 Python,因为这是使用折线 shapefile 中的属性表,这是我第一次尝试使用递归函数。
这个问题和答案是我在组织数据和编写这个递归函数时如何达到这一点的。
例子:
>>> G.keys ()
[(1497315.0, 11965605.0), (1502535.0, 11967915.0), (1501785.0, 11968665.0)...
>>> print G
{(1497315.0, 11965605.0): (([1499342.3515172896, 11967472.92330054],), (7250.80302528,), (1501785.0, 11968665.0)), (1502535.0, 11967915.0): (([1502093.6057616705, 11968248.26139775],), (1218.82250994,), (1501785.0, 11968665.0)),...