私は現在、川沿いの場所を表す辞書を検索する再帰関数に取り組んでいます。ディクショナリは、キーとして使用して 4 つの並列配列にインデックスを付けstart
ます。
並列配列:
start
= 累積流量が少ない終点の位置、
end
= もう一方の終点の位置 (より大きな流れの蓄積を伴う)、
length
= セグメントの長さ、および;
shape
= 最初から最後まで実行するように方向付けられた実際の形状。
辞書:
G = {}
for (st,sh,le,en) in zip(start,shape,length,end):
G[st] = (sh,le,en)
私の目標は、 で表される開始点の 1 つから川を下って検索し、 まで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)
とキーエラーが返されます。チェックkey in G
したところ、キーは false を返しますが、検索すると、false を返すものを含めてG.keys ()
表されるすべてのキーが返されます。start
たとえば、キーは(1478475.0, 12065385.0)
. このキーをテキストとして使用し、2 つの double 値のタプルと 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 を使用しています。これは、再帰関数を使用する最初の試みです。
この質問と回答は、データを整理し、この再帰関数を作成する際に、どのようにしてこの時点に到達したかを示しています。
例:
>>> 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)),...