| 
众所周知,shp文件中的线段是按[(110,30),(111,30),(112,31),...]这种元组的序列来表示的,
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  但是,有的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)]]
 
 心得:
 其实,我是比较排斥递归算法的,这玩意很抽象,逻辑对不对,纯粹靠感觉和验算,计算效率又低,不过它对某些特殊情境的确有奇效,算是个偏门算法吧
 
 
 
 
 
 
 |