爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6786|回复: 17

meteoinfo画风向标图

[复制链接]

新浪微博达人勋

发表于 2016-5-10 16:25:26 | 显示全部楼层 |阅读模式

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

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

x
求助:
      用C#调用meteoinfo画风向标图总是报错,不知何原因,以下是核心代码,因条件有限,只能用csv文件生成。
  public void TSMI_GrADSBarb()
        {
            string datfullpath = GetDatFileData(_interfaceName);
            _datfullpath = datfullpath;
            string file = @"D:\RegionRending\" + _time.Remove(8, 6) + "000000" + @"\" + _featureName + @"\" + _regionName + @"\" + DateTime.Now.ToString("yyyyMMddHH") + "0000" + ".png";
            MeteoDataInfo aDataInfo = new MeteoDataInfo();
            aDataInfo.OpenLonLatData(_datfullpath);   
            StationData stationData = aDataInfo.GetStationData("VR");
            StationData stationData1 = aDataInfo.GetStationData("VS");
            GridDataSetting aGDP = new GridDataSetting();
            aGDP.DataExtent.minX = _xMin;
            aGDP.DataExtent.maxX = _xMax;
            aGDP.DataExtent.minY = _yMin;
            aGDP.DataExtent.maxY = _yMax;
            aGDP.XNum = 15;
            aGDP.YNum = 15;
            InterpolationSetting gridInterp = new InterpolationSetting();
            gridInterp.GridDataSet = aGDP;
            gridInterp.InterpolationMethod = InterpolationMethods.Cressman;
            gridInterp.Radius = 2;
            gridInterp.MinPointNum = 1;
            List<double> t = new List<double>();
            t.Add(10);
            t.Add(7);
            t.Add(4);
            t.Add(2);
            t.Add(1);
            gridInterp.RadList = t;
            double[] X = new double[1];
            double[] Y = new double[1];
            MeteoInfoC.Drawing.ContourDraw.CreateGridXY(gridInterp.GridDataSet, ref X, ref Y);
            double[,] S = stationData.Data;
            double[,] S1 = stationData1.Data;           
            S = MeteoInfoC.Drawing.ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,
                gridInterp.GridDataSet.DataExtent, stationData.UNDEF);
            S1 = MeteoInfoC.Drawing.ContourDraw.FilterDiscreteData_Radius(S1, gridInterp.Radius,
                gridInterp.GridDataSet.DataExtent, stationData1.UNDEF);
            GridData ugridData = MeteoInfoC.Drawing.ContourDraw.InterpolateDiscreteData_Cressman(S,
                 X, Y, stationData.UNDEF, gridInterp.RadList);
            GridData vgridData = MeteoInfoC.Drawing.ContourDraw.InterpolateDiscreteData_Cressman(S1,
                 X, Y, stationData1.UNDEF, gridInterp.RadList);

            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Blue, 10);
            VectorLayer aLayer = DrawMeteoData.CreateGridBarbLayer(ugridData, vgridData, ugridData, aLS, false, "Barb_UV", true);



            LayersLegend layersLegend1 = new LayersLegend();
            layersLegend1.ActiveMapFrame.AddLayer(aLayer);


            string time2 = DateTime.Now.ToString("yyyyMMddHH") + "0000";
            string startTime = string.Empty;
            string endTime = string.Empty;
            string name = string.Empty;
            string dt = time2.Substring(0, 4) + "-" + time2.Substring(4, 2) +
"-" + time2.Substring(6, 2) + " " + time2.Substring(8, 2) + ":" + time2.Substring(10, 2) + ":" + time2.Substring(12, 2);
            switch (_isHourOrDay)
            {
                case "h":
                    startTime = Convert.ToDateTime(dt).AddHours(-1).ToString("yyyy年MM月dd日HH时");
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月dd日HH时");
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "d":
                    startTime = Convert.ToDateTime(dt).AddDays(-1).ToString("yyyy年MM月dd日");
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月dd日");
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "y":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年");
                    name = "      " + startTime + _mapName;
                    break;
                case "m":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年MM月");
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月");
                    name = "      " + startTime + _mapName;
                    break;
                case "cj":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年") + "03月";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年") + "05月";
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "xj":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年") + "06月";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年") + "08月";
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "qj":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年") + "9月";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年") + "11月";
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "dj":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年") + "12月";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年") + "2月";
                    name = "      " + _mapName + "\n" + startTime + " - " + endTime;
                    break;
                case "sx":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "上旬";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "上旬";
                    name = "      " + startTime + _mapName;
                    break;
                case "zx":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "中旬";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "中旬";
                    name = "      " + startTime + _mapName;
                    break;
                case "xx":
                    startTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "下旬";
                    endTime = Convert.ToDateTime(dt).ToString("yyyy年MM月") + "下旬";
                    name = "      " + startTime + _mapName;
                    break;
            }


            MapLayout mapLayout1 = new MapLayout();
            LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
            aTitle.SetLabelText(name);
            aTitle.Left = 140;
            aTitle.Top = 50;
            mapLayout1.ExportToPicture(file);


        }

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

新浪微博达人勋

发表于 2016-5-10 16:43:01 | 显示全部楼层
那一步出错?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-10 16:48:40 | 显示全部楼层
layersLegend1.ActiveMapFrame.AddLayer(aLayer); 这一步,报错未将对象引用设置到对象的实例。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-10 16:59:44 | 显示全部楼层
iij 发表于 2016-5-10 16:48
layersLegend1.ActiveMapFrame.AddLayer(aLayer); 这一步,报错未将对象引用设置到对象的实例。

你在debug中看看那个对象是null
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-11 08:38:24 | 显示全部楼层
前面的都不为null
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-11 08:52:20 | 显示全部楼层
就是这个layersLegend报的错,
LayersLegend layersLegend1 = new LayersLegend();
            layersLegend1.ActiveMapFrame.MapView.LockViewUpdate = true;

            //Load shp layer  _blnPath为shp文件存放的路径
            MapLayer alay = MapDataManage.OpenLayer(_blnPath);
            layersLegend1.ActiveMapFrame.AddLayer(alay);  这样加载一个shp文件也是报错的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-11 09:07:10 | 显示全部楼层
本帖最后由 iij 于 2016-5-11 09:08 编辑

D:\111。png
111.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-11 09:10:19 | 显示全部楼层

这个我也不会
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-13 11:00:18 | 显示全部楼层
王老师,求助求助
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-5-13 11:41:26 | 显示全部楼层
是layersLegend1的CurrentMapFrame引发的异常,该怎么解决呢?王老师。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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