该数据集格式为GRIB2格式,格式详情:Introduction to GRIB2 using the GFS forecasts 2/2013 Wesley Ebisuzaki GRIB2物理量介绍:https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-1.shtml#0
- 使用pygrib对数据进行抽取,其中处理数据为温度场(TMP),气压场(VVEL),风场(UGRD, VGRD).
- 使用matplotlib、cartopy(由于basemap被废弃所以不用)进行画图。
- 画图结果如 https://github.com/GiganticRay/Mentor_Practise/blob/main/myProj/coastlines3.png 所示(其中图片还未进行微调)。
- 从contour的allsegs片段中提取出每组等势线的拟合坐标,用LsqEllipse进行近似椭圆拟合,此处还未对拟合程度的好与坏进行评价。
- 绘制长短半轴很简单啦,对长短半轴进行一个旋转,加上中心点坐标即可
如子图二所示,此方法有所缺陷。等势线内的极值中心计算很粗糙(此数据集内存放的数据是每个经纬度坐标(间隔为1)一个value,没有进行一个平滑拟合),现做法办法就是直接暴力遍历contour内部数据点(整数经纬度点)求最大最小值。显示内容格式为[lon, lat, value]
如子图一所示,标注出椭圆的长短半轴、并标注出顶点的坐标,保留两位小数。
- Draw.py: 主文件
- result.png: 结果文件
- input_path: Draw.py的input_path,输入文件为grib2数据文件
- output_path: Draw.py的output_path,输出文件为图片
- start_lon: 起始经度
- end_lon: 结束经度
- start_lat: 起始纬度
- end_lat: 结束纬度
- precision:绘制地图精度(10m, 50m, 110m)
- 对等高线142, 143进行椭圆拟合
- 对等高线格点高度标注
- Practice2.py: 更改FitIsoContourToEllipse函数,可指定椭圆拟合的值,默认为全部。 新增PlotGridValue函数,绘制格点出的值。
- result_practice2.png: 结果输出文件
- 输出椭圆拟合半径的斜率及地理距离
- 标注出拟合椭圆上的估计最小值
绘制温度平流,绘制省边界
使用metpy, 进行绘制
使用**省边界shp文件,链接: https://pan.baidu.com/s/1eIGV_GXN0bMpr6Pj3n6DCA 提取码: hygg 复制这段内容后打开百度网盘手机App,操作更方便哦(失效邮件联系1443742816@qq.com) 其中直接用经纬度标注出四川与重庆的位置
如图所示
转换数据集为nc格式的
- 加载的库:netCDF4
- 原始数据格式为[time, level, lat_data, lon_data], 此处加载数据时time纬度选择的第一个,level选择的第四个(850)。如 dataSet.variables['u'][0][3]
- FitIsoContourToEllipse中,将拟合数值点个数阈值提升至20(测试结果,少于该阈值的椭圆无法拟合,会报错。)
- netCDF4 库加载进来的是 masked_arrary, 而 metpy 需要用到array,所以需要进行一个转换
- [start/end]_[lon/lat]数值进行了改变,变成了与数据集匹配的经纬度。
如图所示
将每个时间段的数值绘制出来,并将拟合椭圆数值写入csv。
经测试在iMinEllipseGribSum=30的情况下可全部跑通,但是必要的话应该可以修改pointinpolygon文件源代码,进行异常处理
修改时间:2021.06.23
文件: ERA5_Zny_One_0622_w02.py
修改地方:为 FitIsoContourToEllipse 函数引入 l_region_restriction 参数,给出椭圆中心的范围
solution is located in the Q1 solution.
2. individually paint the ellipse whose center point is located in the appointed area. (edited in 2021/8/18)
文件输出格式为 output_dir + 'ERA5_Zny_One_0622_w02_'+str_curr_time + "_restricted" + ".png"
判别方式:在拟合椭圆函数FitIsoContourToEllipse
中,看l_region_restriction
函数是否为空,如果不空表明有指定的多边形区域
添加IsInsidePolygon(pending_p, polygon)
函数,判定pending_P
是否在polygon
之内
遵循matplotlib绘图逻辑,绘制拟合椭圆图形,如果没有位于 polygon 中的拟合椭圆,则不输出文件。