登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
众所周知,shp文件中的线段是按[(110,30),(111,30),(112,31),...]这种元组的序列来表示的,
但是,有的shp文件里的数据结构比较乱,例如:
line=[[[
[(1,2), (3,4), (5,6)],
[[(11,22), (33,44), (55,66)],
[[(110,220), (330,440), (550,660)]]]
]]]
它虽然也包含了线段的信息,但是需要我们自己把最纯粹的那段剥离出来,比较烦。
于是,我想写一个算法,自动寻找识别类似:[(xx,xx),(xx,xx),(xx,xx),...]这样的结构,
那就不需要每个shp文件都检查它的数据层次了。
识别算法如下:
line=[[[
[(1,2), (3,4), (5,6)],
[[(11,22), (33,44), (55,66)],
[[(110,220), (330,440), (550,660)]]]
]]]
outcome=[] # 结果的线段存入该变量
# 递归算法:
def extract(x):
if type(x)==list:
if type(x[0])==tuple and len(x[0])==2:
outcome.append(x)
else:
for i in x:
extract(i)
extract(line)
print(outcome)
结果是正确的,3个线段:
[[(1, 2), (3, 4), (5, 6)], [(11, 22), (33, 44), (55, 66)], [(110, 220), (330, 440), (550, 660)]]
心得:
其实,我是比较排斥递归算法的,这玩意很抽象,逻辑对不对,纯粹靠感觉和验算,计算效率又低,不过它对某些特殊情境的确有奇效,算是个偏门算法吧
|