请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 20711|回复: 12

[混合编程] 读取雷达数据文件时报错

[复制链接]

新浪微博达人勋

发表于 2019-4-19 11:26:16 | 显示全部楼层 |阅读模式

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

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

x
程序是这样的:
import numpy as np
import string
from array import array
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# read radar binary data
def radar_read(file_path):
        pi=np.pi
        # 读数据
        flag=open(file_path,"r")
        data=np.asarray(array("B",flag.read()))
        data=data.reshape([len(data)/2432,2432])
        # 找仰角
        if data[0,72]==11:
                phi=[0.50,0.50,1.45,1.45,2.40,3.35,4.30,5.25,6.2,7.5,8.7,10,12,14,16.7,19.5]
        if data[0,72]==21:
                phi=[0.50,0.50,1.45,1.45,2.40,3.35,4.30,6.00,9.00,14.6,19.5]
        if data[0,72]==31:
                phi=[0.50,0.50,1.50,1.50,2.50,2.50,3.50,4.50]
        if data[0,72]==32:
                phi=[0.50,0.50,2.50,3.50,4.50]
        g1=np.zeros([len(data),460])
        h1=np.zeros([len(data),460])
        i1=np.zeros([len(data),460])
        j1=np.zeros([len(data),460])
        count=0
        while count<len(data):
                print( "径向数据编号 : ",count)
                b1=data[count,44]+256*data[count,45]                                #仰角序数
                c1=(data[count,36]+256*data[count,37])/8*180/4096                                #方位角
                d1=data[count,54]+256*data[count,55]                                #径向库
                print ("仰角序数,方位角,径向库 : ",b1,c1,d1)
                if d1==0:
                        count+=1
                        continue
                else:
                        count+=1
                i=0
                while i<460:
                        g1[count-1,i]=phi[b1-1]                                                                        #仰角
                        h1[count-1,i]=c1                                                                                                #方位角
                        i1[count-1,i]=0.5+i-1                                                                                        #径向
                        if i>d1:                                                                                                                                        #反射率
                                j1[count-1,i]=0
                        else:
                                if data[count-1,128+i]==0:                                                        #无数据
                                        j1[count-1,i]=0
                                else:
                                        if data[count-1,128+i]==1:                                                #距离模糊
                                                j1[count-1,i]=0
                                        else:                                                                                                                                #数据正常
                                                j1[count-1,i]=(data[count-1,128+i]-2)/2-32
                        i+=1
        n=3
        a2=0                                                                                                                        #仰角序数
        while a2<len(data):
                if data[a2,44]>(n-1):
                        break
                a2+=1
        a3=a2
        while a3<len(data):
                if data[a3,44]>n:
                        break
                a3+=1
        yj=g1[a2:a3,:]
        fwj=h1[a2:a3,:]
        jx=i1[a2:a3,:]
        fsl=j1[a2:a3,:]
        return yj,fwj,jx,fsl
       
def sph2cart(elevation,azimuth,r):
        ele,a= np.deg2rad([elevation,azimuth])
        x=r*np.cos(ele)*np.cos(a)
        y= r * np.cos(ele) * np.sin(a)
        z = r * np.sin(ele)
        return x,y,z

# test
y,fw,j,fs=radar_read(r"E:/2017/bj0811/Z_RADR_I_Z9010_20170811000000_O_DOR_SA_CAP.bin")
nx,ny,nz=sph2cart(y,fw,j)
plt.subplot(1, 1, 1)
plt.pcolor(ny, nx, fs, cmap='Accent')
plt.axis([ny.min(), ny.max(), nx.min(), nx.max()])
plt.show()


貌似是在读取数据文件时报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 4: illegal multibyte sequence
是我的数据有问题吗?菜鸟啊,望指导
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-4-19 12:38:33 | 显示全部楼层
改为:flag=open(file_path,"rb"),读取二进制文件
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-19 13:52:33 | 显示全部楼层
sunlight12138 发表于 2019-4-19 12:38
改为:flag=open(file_path,"rb"),读取二进制文件

按您的提示修改后,又出现TypeError: 'float' object cannot be interpreted as an integer我用的版本python3.6,这个会不会是python2 的编码
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-19 16:43:05 | 显示全部楼层
-逆光年年- 发表于 2019-4-19 13:52
按您的提示修改后,又出现TypeError: 'float' object cannot be interpreted as an integer我用的 ...

好好检查下是哪条语句报错的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-19 16:48:50 | 显示全部楼层
-逆光年年- 发表于 2019-4-19 13:52
按您的提示修改后,又出现TypeError: 'float' object cannot be interpreted as an integer我用的 ...

将该变量强制转换成int类型
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-19 20:00:37 | 显示全部楼层
楼上正解            
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-24 09:56:16 | 显示全部楼层
已经画出来了,但是很丑,分辨率很低,也没有地图背景,请问这样调高分辨率,或叠加地图?
show.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-24 10:10:06 | 显示全部楼层
参照pyCINRAD
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-24 10:32:51 | 显示全部楼层

您在说啥?这是个py文件?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-27 20:20:30 | 显示全部楼层
-逆光年年- 发表于 2019-4-24 10:32
您在说啥?这是个py文件?

一个读雷达数据的模块,多自己网上搜索信息,不要做伸手党
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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