爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: ♂雨已~○

meteoinfo地面填图问题

[复制链接]

新浪微博达人勋

 楼主| 发表于 2013-8-4 20:45:41 | 显示全部楼层

这种极坐标格式的说明就是上面那个描述文件所述的一样啊```现在国外好多的雷达数据都是这种nc格式的极坐标的,这个用ncdump能打开数据及描述文件,也可以用micaps打开,所以我也给不出再具体的格式描述了,希望王老师帮忙研究研究,这种格式还是很有用的```
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-4 21:17:12 | 显示全部楼层
♂雨已~○ 发表于 2013-8-4 20:45
这种极坐标格式的说明就是上面那个描述文件所述的一样啊```现在国外好多的雷达数据都是这种nc格式的极坐标 ...

极坐标至少要知道极点在哪里、每个点的极径和极角。极点可能是Global Attribute里的Latitude和Longitude,Azimuth维应该是极角,Gate维是什么(可能是极径)?如果Gate维是极径,Gate维的值怎么获得?Azimuth维的值可以由Azimuth变量获得。那几个变量都是什么?Global Attribute里的属性都是什么意思?等等,需要知道的细节还有很多,不是你想象的那么简单。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-4 21:32:34 | 显示全部楼层
MeteoInfo 发表于 2013-8-4 21:17
极坐标至少要知道极点在哪里、每个点的极径和极角。极点可能是Global Attribute里的Latitude和Longitude, ...

好吧,嘿嘿,学生愚钝了,难为王老师咯~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-6 13:23:38 | 显示全部楼层
MeteoInfo 发表于 2013-8-4 21:17
极坐标至少要知道极点在哪里、每个点的极径和极角。极点可能是Global Attribute里的Latitude和Longitude, ...

     王老师,我试着用你meteoinfo下面的netcdf.dll自己读取那个雷达的极坐标nc数据然后进行二次开发显示这类数据,但是在读取的过程中遇到了一些问题,想请教王老师帮忙解答一下····这是C#引用netcdf.dll库函数的说明:
public static  class NetCDFInterop
    {
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_open(string path, CreateMode omode, out int ncidp);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_close(int ncidp);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_varid(int ncid, string nvars, out int varid);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_get_var_double(int ncid, int varid, double[,] ip);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl )]
        public static extern int nc_get_var_float(int ncid,  int varid, float[,] ip);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq(int ncid, out int ndims, out int nvars, out int ngatts, out int unlimdimid);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_dim(int ncid, int dimid, string name, out int length);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_dimname(int ncid, int dimid, StringBuilder name);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_dimid(int ncid, string name, out int dimid);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_dimlen(int ncid, int dimid, out int length);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_ndims(int ncid, out int ndims);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_nvars(int ncid, out int nvars);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_varname(int ncid, int varid, StringBuilder name);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_varndims(int ncid, int varid, out int ndims);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_vardimid(int ncid, int varid, int[] dimids);
        [DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int nc_inq_var_fill(int ncid, int varid, out int no_fill, out object fill_value);

        public enum CreateMode : int
        {
            NC_NOWRITE = 0,
            /// read & write
            NC_WRITE = 0x0001,
            NC_CLOBBER = 0,
            /// Don't destroy existing file on create
            NC_NOCLOBBER = 0x0004,
            /// argument to ncsetfill to clear NC_NOFILL
            NC_FILL = 0,
            /// Don't fill data section an records
            NC_NOFILL = 0x0100,
            /// Use locking if available
            NC_LOCK = 0x0400,
            /// Share updates, limit cacheing
            NC_SHARE = 0x0800,
            NC_64BIT_OFFSET = 0x0200,
            /// Enforce strict netcdf-3 rules
            NC_CLASSIC = 0x0100,
            /// causes netCDF to create a HDF5/NetCDF-4 file
            NC_NETCDF4 = 0x1000
        }




然后我用以下代码读取数据:

            int i;
            string path = "radar.nc";
            NetCDFInterop.nc_open(path,NetCDFInterop.CreateMode.NC_NOWRITE,out i);
            int ndims_in, nvars_in, ngatts_in, unlimdimid_in;
            NetCDFInterop.nc_inq(i, out ndims_in, out nvars_in, out ngatts_in, out unlimdimid_in);
            int azimuth_varid, gate_varid, filtered_Intensity_varid;

            NetCDFInterop.nc_inq_varid(i, "Azimuth",out azimuth_varid);
            NetCDFInterop.nc_inq_varid(i, "GateWidth",out gate_varid);
            NetCDFInterop.nc_inq_varid(i, "Filtered_Intensity(Horizontal)", out filtered_Intensity_varid);

            double[,] azimuth_in=new double[865,1];
            double[,] gate_in=new double[480,1];

            float [,] ppidata=new float[865,480];

            NetCDFInterop.nc_get_var_double(i,azimuth_varid,azimuth_in);
            NetCDFInterop.nc_get_var_double(i, gate_varid, gate_in);
            NetCDFInterop.nc_get_var_float(i, filtered_Intensity_varid, ppidata);



但是读到红色代码这个地方的时候就报错了,提示的是ppidata无法获取局部变量或参数,索引超出了数组界限,读不出ppidata数据呢,王老师在您开发这个过程中这个问题是怎么解决的呢?希望王老师教教学生····嘿嘿
这是上次传的数据 radar.nc (1.6 MB, 下载次数: 1)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-6 14:11:59 | 显示全部楼层
♂雨已~○ 发表于 2013-8-6 13:23
王老师,我试着用你meteoinfo下面的netcdf.dll自己读取那个雷达的极坐标nc数据然后进行二次开发显示 ...

试试用一维数组
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-6 21:42:15 | 显示全部楼层
MeteoInfo 发表于 2013-8-6 14:11
试试用一维数组

恩,我试了,问题解决了,谢谢王老师了哈·····
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-8 21:14:58 | 显示全部楼层
MeteoInfo 发表于 2012-8-17 08:41
你下载最新版本的MeteoInfo,安装后如果还不行,可以在安装目录中找到这个字体文件,把它拷贝到c盘Window ...

王老师,我提个建议哇,我建议那个图例的色标增加一个拖动增大或缩小尺寸的功能,有时候存图需要把图例放大一点或者缩小一点,但是现在好像是不能改图例的大小呢·····还有我绘制多站点数据的时候,出图非常慢,能不能做一个像栅格数据(raster图层)那种的绘制站点数据啊,就是站点就是一个像素点,在指定的经纬度绘制像素点就可以了,不做那些圆点绘制方框·····
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-9 12:05:15 | 显示全部楼层
MeteoInfo 发表于 2012-8-14 22:15
目前没有这样的功能

王老师,我想利用如下方式如何把线条加宽呢?
           
            MyApp.OpenLayer(Application.StartupPath + "\\Map\\runway\\EAST.shp");
            MyApp.SetLegendBreak("EAST.shp", 0,Color.White);

这个图层是一条线,我想把它加宽,但是没有这个设置呢····加宽如何写代码呢?希望王老师帮忙解答一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-9 12:30:56 | 显示全部楼层
♂雨已~○ 发表于 2013-8-8 21:14
王老师,我提个建议哇,我建议那个图例的色标增加一个拖动增大或缩小尺寸的功能,有时候存图需要把图例放 ...

修改图例中的字体大小图例也会随之改变尺寸。

点太多显示速度慢是一个比较难解决的问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-9 12:32:08 | 显示全部楼层
♂雨已~○ 发表于 2013-8-9 12:05
王老师,我想利用如下方式如何把线条加宽呢?
           
            MyApp.OpenLayer(Application.S ...

参加此帖:站点降水数据绘制等值线图新脚本
http://bbs.06climate.com/forum.p ... 695&fromuid=106
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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