爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7707|回复: 0

[源代码] 递归算法从shp文件中找线段

[复制链接]

新浪微博达人勋

发表于 2022-4-14 15:39:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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)]]

心得:
其实,我是比较排斥递归算法的,这玩意很抽象,逻辑对不对,纯粹靠感觉和验算,计算效率又低,不过它对某些特殊情境的确有奇效,算是个偏门算法吧





密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表