爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13494|回复: 10

[经验总结] 最新Python绘制micaps第14类数据

[复制链接]

新浪微博达人勋

发表于 2022-4-14 01:34:37 | 显示全部楼层 |阅读模式

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

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

x
参考:https://bbs.06climate.com/forum. ... ;highlight=%B5%DA14
完善代码,差最后美化。
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
def get_drylines_position_coordinate(filename):
    '''
    读取micaps第14类数据,micaps数据类型介绍如下链接:
    https://www.bbsmax.com/A/WpdKqqOrJV/

    input: 文件路径
    output: micaps底图上叠加的线条对应的经纬度
    '''
    #读取文件
    f=open(filename,mode='r')
    data=f.readlines()  

    #获取该文件中包含几条线
    num_drylines=int(data[2].strip().split()[-1])
    print("获取该文件中包含几条线:",num_drylines)
    n=3 #前五行为数据说明

    all_position=[]
    #print(data[3])
    #获取每条线的经纬度坐标
    for i in range(num_drylines):
       # print("hang:",n)
        #获取该线条用多少个点来描述,其中每个点对应一个经度和维度(和一个额外的数字,不重要)
        n_points=int(data[n].strip().split()[-1])
       # print(i,"获取该线条用多少个点来描述,其中每个点对应一个经度和维度:",n_points)
        #由于默认每行仅支持输出个4数据点,因此,会存在多行数据
        n_rows=int(np.ceil(n_points))
       # print("会存在多行数据",n_rows)
        #把包含这条线所有点的列连接起来
        point_data=data[n+1]
        for j in range(n_rows-1):
            point_data=point_data+data[n+2+j]
        #去除换行符和将每个数据隔开
        point_data=point_data.strip().split()

        #将数据类型由str转换为float型
        point_data=[float(point_data) for i in range(len(point_data))]
        #前面说到,每个点包含三个数据,其中第一个为经度,第二个为维度
        point_lon=point_data[0::3]
        point_lat=point_data[1::3]
        #print(point_lon)
        #print(point_lat)
        #将该条线的经纬度坐标记录下来
        coordinate=[point_lon,point_lat]
        all_position.append(coordinate)
       # print("hang111:",data[n+n_rows+1].strip().split()[-1])
        nn=int(data[n+n_rows+1].strip().split()[-1])
        #每条线差两列
        n=n+n_rows+nn+2
    print(coordinate)

    return all_position ,data
filename=r'D:\pres\9999.000'
coor_data,data=get_drylines_position_coordinate(filename)
#print(data)
import pandas as pd
import os
import matplotlib.pyplot as plt
figure=plt.figure(figsize=(16,10))
num_lines=len(coor_data)
print(num_lines)
for i in range(num_lines):
    print(coor_data[0],coor_data[1])
    plt.plot(coor_data[0],coor_data[1])
    plt.text(14.188,6.5574,"927.5")#标记数据



Figure_1.png
Figure_1.png

9999.000

1.22 MB, 下载次数: 9, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2022-4-14 09:44:09 | 显示全部楼层
其实读取micaps数据的话,国家气象中心预报技术研发检验科研发了个meteva库,提供了micaps数据的直接读取,并且能读取成xarray dataarrayd的https://www.showdoc.com.cn/meteva/
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-14 18:11:12 | 显示全部楼层
1163087557 发表于 2022-4-14 09:44
其实读取micaps数据的话,国家气象中心预报技术研发检验科研发了个meteva库,提供了micaps数据的直接读取, ...

是倒是  就是他的文档不够详细  才开始使用了 就是没整通  所以就自己修改别人的整了一个
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-16 21:45:53 | 显示全部楼层
美化后
2022031723test.png
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-21 11:28:08 | 显示全部楼层
您好,照搬了一下您的代码,报了这个错
TypeError: float() argument must be a string or a number, not 'list'
是您采用   data=f.readlines()  这个读出来返回值是一个列表,怎么给他转换成字符串或数字呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-4-21 18:38:03 来自手机 | 显示全部楼层
你好,有micaps第三类加密自动站降水绘制的吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-5-18 17:14:05 | 显示全部楼层

请问能否共享美化的程序?等值线上标注的值怎么做的?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-5-19 16:16:33 | 显示全部楼层

请问,您这个等值线上的数字咋标上去的,代码能否共享?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-5-27 12:48:33 | 显示全部楼层
好像作者迭代了不少版本……前面代码里留了不少坑😄
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-3 17:40:59 | 显示全部楼层
huyaoxing 发表于 2022-4-21 18:38
你好,有micaps第三类加密自动站降水绘制的吗?

加密的应该都是一种类型,你可以搜一下mdfs加密数据的读取,论坛里应该有。数据读取出来,怎么画就取决于个人了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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