爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 25706|回复: 5

[经验总结] 利用geometry函数和shp文件进行数据的精确筛选

[复制链接]

新浪微博达人勋

发表于 2021-4-2 10:31:11 | 显示全部楼层 |阅读模式

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

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

x
利用geometry函数和shp文件进行数据的精确筛选

本帖主要介绍的是利用shp文件和geometry函数实现数据的精确筛选,意思就是加入作者只需要一个省的数据,手上确是全国或者全球的数据,怎么去清洗数据,只得到符合省界经纬度圈内的数据。
先上结果图(以雷电数据为例)
Figure_3.png
图中是全国及周边的FY4闪电数据,但是作者只需要湖南省的,就需要数据清洗
Figure_1.png
Figure_2.png
说明:
1.这里只介绍重点部分,对于画图将不再介绍,源代码里面可以看懂
2.geometry函数其实就在shapely库中
3.该方法经作者实测应该不是最优解,因为作者i7十一代的CUP依然运行了很久,如果进行逐个点的判断,会比较慢,需要先进行处理,减少数据量。
4.需要进行初步的数据清洗,利用经纬度先做大致的裁剪,然后再进行精细的判断。


具体实现:
#本期重点,利用shp文件判断数据是否再内部
sf = shapefile.Reader('Hunan_Province')#读取shp文件
sf = sf.shapeRecords()[0].shape#获得经纬度的边缘,这里简写了,实际步骤为读取shapeRecords(),再读取第0个,再读取shape

flat_points = np.column_stack((lon, lat))#将一维的经纬度整合成二维
in_shape_points = []#建立一个list存储所需数据
for pt in flat_points:
    if geometry.Point(pt).within(geometry.shape(sf)):#判断点是否再shp形状内部
        in_shape_points.append(pt)#存入数组
selected_lon = [elem[0] for elem in in_shape_points]#重新展开为一维
selected_lat = [elem[1] for elem in in_shape_points]#重新展开为一维


代码解释:
1.lon, lat经纬度已经进行了初步的筛选,得到了一小区域的所有点
2.sf代表shp文件的shape属性,代码中进行了缩写,可以分开一步一步写
3.代码中用的shp文件是单省的,有的人可能是全国的文件,需要做循环进行判断
例如:
for city_rcd in sz_shp.shapeRecords():  # 遍历每一条shaperecord
         if city_rcd.record[6] == 'Shenzhen':  # 遍历时,record字段是地区的信息(由字符串表示)
             sz_shp = city_rcd.shape  # 遍历时,shape字段是shape——形状(由点组成)



4.geometry.Point(pt).within(geometry.shape(sf))就是精细的判断数据是否再shp这个圈里
5.将得到的数据再次展开成一维的,用于画散点图




具体代码里面有详细的解释,但是因为版权的关系,没有附上测试数据,往见谅














精确筛选.rar

1.66 MB, 下载次数: 42, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-4-2 11:00:00 | 显示全部楼层
既然有shp边界文件,那直接用matplotlib建立一个path类,用path的类函数contains_points去判断复数个点在不在边界内就行,算上import库的代码,这程序不会超过10行
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-2 13:11:35 来自手机 | 显示全部楼层
Masterpiece 发表于 2021-04-02 11:00
既然有shp边界文件,那直接用matplotlib建立一个path类,用path的类函数contains_points去判断复数个点在不在边界内就行,算上import库的代码,这程序不会超过10行

数了一下,7行
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-4 02:00:57 | 显示全部楼层
A2021011103078357900001文件方便分享一下吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-4 07:14:46 来自手机 | 显示全部楼层
kingjames 发表于 2021-04-04 02:00
A2021011103078357900001文件方便分享一下吗?

这个不方便,网友分享给我的,让我读一下,不然分享。可以看读取fy4a闪电数据那一贴,里面有说哪里能下载
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-4 10:44:41 | 显示全部楼层
jl2587t 发表于 2021-4-4 07:14
这个不方便,网友分享给我的,让我读一下,不然分享。可以看读取fy4a闪电数据那一贴,里面有说哪里能下载

ok  理解,谢谢答复
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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