爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3850|回复: 5

王老师,请教您关于二次开发的问题

[复制链接]

新浪微博达人勋

发表于 2014-1-20 11:42:39 | 显示全部楼层 |阅读模式

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

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

x
我的程序是读nc文件,做风的图。照着您的关于MeteoInfo二次开发教程(六)里边的步骤做的。这是我的代码:
  1. private void TSIVector_Click(object sender, EventArgs e)        {            MeteoDataInfo aDataInfo = new MeteoDataInfo();            string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";            aDataInfo.OpenNCData(file);            GridData uData = aDataInfo.GetGridData("u10m");            GridData vData = aDataInfo.GetGridData("v10m");            LegendScheme aLS  = LegendManage.CreateLegendSchemeFromGridData(vData,LegendType.GraduatedColor,MeteoInfoC.Shape.ShapeTypes.Point);            VectorLayer aLayer = DrawMeteoData.CreateGridVectorLayer(uData, vData, vData, aLS, true, "Vector_T", true);            mapView1.AddLayer(aLayer);            mapView1.MoveLayer(aLayer, 2);            layersLegend1.ActiveMapFrame.AddLayer(aLayer);            layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 2);            LayoutGraphic aTitle = mapLayout1.GetTexts()[0];            aTitle.SetLabelText("MeteoInfo Class Library Demo - ");        }        private void TSIBarb_Click(object sender, EventArgs e)        {            MeteoDataInfo aDataInfo = new MeteoDataInfo();            string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";                        aDataInfo.OpenNCData(file);            //aDataInfo.TimeIndex = 2;            //aDataInfo.LevelIndex = 3;            GridData uData = aDataInfo.GetGridData("u10m");            GridData vData = aDataInfo.GetGridData("v10m");            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(MeteoInfoC.Shape.ShapeTypes.Point, Color.Blue, 10);            VectorLayer aLayer = DrawMeteoData.CreateGridBarbLayer(uData, vData, uData, aLS, false, "Barb_F", true);            mapView1.AddLayer(aLayer);            layersLegend1.ActiveMapFrame.AddLayer(aLayer);            layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 2);            layersLegend1.Refresh();            LayoutGraphic aTitle = mapLayout1.GetTexts()[0];            aTitle.SetLabelText("MeteoInfo Class Library Demo - Wind Barb Layer");        }        private void TSIStreamLine_Click(object sender, EventArgs e)        {            MeteoDataInfo aDataInfo = new MeteoDataInfo();            string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";            aDataInfo.OpenNCData(file);            GridData uData = aDataInfo.GetGridData("u10m");            GridData vData = aDataInfo.GetGridData("v10m");            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(MeteoInfoC.Shape.ShapeTypes.Polyline, Color.Blue, 1);            VectorLayer aLayer = DrawMeteoData.CreateStreamlineLayer(uData, vData, 4, aLS, "StreamLine_F", true);            mapView1.AddLayer(aLayer);            layersLegend1.ActiveMapFrame.AddLayer(aLayer);            layersLegend1.Refresh();            LayoutGraphic aTitle = mapLayout1.GetTexts()[0];            aTitle.SetLabelText("MeteoInfo Class Library Demo - Wind StreamLine Layer");        }


这是我的nc文件信息:
Dimensions: 3
        latitude = 151;
        longitude = 251;
        times = 181;
Global Attributes: 0
Variations: 5
        NC_FLOAT latitude(latitude);
                latitude: units = "degrees_north";
                latitude: long_name = "latitude";
        NC_FLOAT longitude(longitude);
                longitude: units = "degrees_east";
                longitude: long_name = "longitude";
        NC_FLOAT u10m(times,latitude,longitude);
                u10m: units = "m/s";
                u10m: _FillValue = 1E+30;
                u10m: long_name = "U at 10m";
        NC_FLOAT v10m(times,latitude,longitude);
                v10m: units = "m/s";
                v10m: _FillValue = 1E+30;
                v10m: long_name = "V at 10m";
        NC_FLOAT slp(times,latitude,longitude);
                slp: units = "hPa";
                slp: _FillValue = 1E+30;
                slp: long_name = "Sea Level Pressure";
Unlimited dimension: -1


在做Vector图层时,关于“T”变量是否是时间?tData变量在创建LegendScheme和VectorLayer两个函数里边都用到了,由于对NetCDF文件格式只是初步了解,所以不太明白。

另外,做Barb和StreamLine图层时,由于nc文件数据过密,画出来的图也过密。如图:
QQ截图20140120113749.png
QQ截图20140120113914.png

这该如何解决?
期待您的解答
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-1-20 11:43:52 | 显示全部楼层
代码有点乱
  1. private void TSIVector_Click(object sender, EventArgs e)
  2.         {
  3.             MeteoDataInfo aDataInfo = new MeteoDataInfo();
  4.             string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";
  5.             aDataInfo.OpenNCData(file);

  6.             GridData uData = aDataInfo.GetGridData("u10m");
  7.             GridData vData = aDataInfo.GetGridData("v10m");

  8.             LegendScheme aLS  = LegendManage.CreateLegendSchemeFromGridData(vData,LegendType.GraduatedColor,MeteoInfoC.Shape.ShapeTypes.Point);
  9.             VectorLayer aLayer = DrawMeteoData.CreateGridVectorLayer(uData, vData, vData, aLS, true, "Vector_T", true);

  10.             mapView1.AddLayer(aLayer);
  11.             mapView1.MoveLayer(aLayer, 2);
  12.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  13.             layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 2);

  14.             LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
  15.             aTitle.SetLabelText("MeteoInfo Class Library Demo - ");
  16.         }

  17.         private void TSIBarb_Click(object sender, EventArgs e)
  18.         {
  19.             MeteoDataInfo aDataInfo = new MeteoDataInfo();
  20.             string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";
  21.             
  22.             aDataInfo.OpenNCData(file);

  23.             //aDataInfo.TimeIndex = 2;
  24.             //aDataInfo.LevelIndex = 3;

  25.             GridData uData = aDataInfo.GetGridData("u10m");
  26.             GridData vData = aDataInfo.GetGridData("v10m");

  27.             LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(MeteoInfoC.Shape.ShapeTypes.Point, Color.Blue, 10);

  28.             VectorLayer aLayer = DrawMeteoData.CreateGridBarbLayer(uData, vData, uData, aLS, false, "Barb_F", true);

  29.             mapView1.AddLayer(aLayer);
  30.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  31.             layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 2);
  32.             layersLegend1.Refresh();

  33.             LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
  34.             aTitle.SetLabelText("MeteoInfo Class Library Demo - Wind Barb Layer");
  35.         }

  36.         private void TSIStreamLine_Click(object sender, EventArgs e)
  37.         {
  38.             MeteoDataInfo aDataInfo = new MeteoDataInfo();
  39.             string file = Application.StartupPath + @"\WRF_Meteo_QD_2013070212UTC_180_1hr.nc";
  40.             aDataInfo.OpenNCData(file);

  41.             GridData uData = aDataInfo.GetGridData("u10m");
  42.             GridData vData = aDataInfo.GetGridData("v10m");

  43.             LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(MeteoInfoC.Shape.ShapeTypes.Polyline, Color.Blue, 1);

  44.             VectorLayer aLayer = DrawMeteoData.CreateStreamlineLayer(uData, vData, 4, aLS, "StreamLine_F", true);

  45.             mapView1.AddLayer(aLayer);
  46.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  47.             layersLegend1.Refresh();

  48.             LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
  49.             aTitle.SetLabelText("MeteoInfo Class Library Demo - Wind StreamLine Layer");
  50.         }
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-20 12:11:45 | 显示全部楼层
GridData类有Skip方法来生成更稀疏的GridData,Skip方法有两个参数,分布是x方向和y方向间隔点数(也就是每隔几个点取一个)。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-1-20 12:59:46 | 显示全部楼层

嗯,谢谢王老师!我研究研究。貌似这帖子应该放在二次开发里边,我放错地方了
关于第一个问题您还没有解答,由于MeteoInfo的创建LegendScheme和VectorLayer的方法都没有参数提示,所以我想问“T”参数tData是什么参数?

另外还有一个问题:经纬的的精度问题
截图20140120122825.png
Layout显示的经度只有一个,维度直接就不显示了。这个精度是否可以调整?还是在shape文件里边固定了

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

新浪微博达人勋

发表于 2014-1-20 15:05:07 | 显示全部楼层
在layout的坐标系上双击,
会谈出坐标系的属性框,修改就可以起作用了.
如果要自己在程序中修改,用程序代码修改相应的属性就可以了.
QQ截图20140120150035.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-1-20 15:16:38 | 显示全部楼层
Mc.Fish 发表于 2014-1-20 15:05
在layout的坐标系上双击,
会谈出坐标系的属性框,修改就可以起作用了.
如果要自己在程序中修改,用程序代码 ...

好强大的meteoinfo
还不知道有这个功能,谢了!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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