爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3309|回复: 4

MeteoInfo二次开发的问题。

[复制链接]

新浪微博达人勋

发表于 2014-10-20 13:24:58 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 guba82 于 2014-10-20 13:29 编辑

之前调用老版本的dll文件,程序运行正常,更新到最新版本后,程序运行到如下代码,出现错误!
  1. //Add layer            
  2. layersLegend1.ActiveMapFrame.AddLayer(aLayer);   //chucuo
  3. layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 0);            
  4. layersLegend1.Refresh();

报如下错误:
索引超出范围。必须为非负值并小于集合大小。
参数名: index





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

新浪微博达人勋

发表于 2014-10-20 14:14:24 | 显示全部楼层
仅凭这几句代码和错误信息还不能判断为何出错,你至少贴出来详细的错误信息看看到底哪里出错
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-10-20 14:39:41 | 显示全部楼层
本帖最后由 guba82 于 2014-10-20 14:41 编辑

这是详细的错误信息

这是详细的错误信息

就是在我程序控制添加新层的时候出错了。

详细代码

string Titletxt, Datetxt;

            MeteoDataInfo aDataInfo = new MeteoDataInfo();
            aDataInfo.OpenMICAPSData(YbFileName);

            MeteoInfoC.Data.MeteoData.MICAPS3DataInfo M3DataInfo = (MeteoInfoC.Data.MeteoData.MICAPS3DataInfo)aDataInfo.DataInfo;

            Titletxt = M3DataInfo.Description.ToString().Substring(10);
            Datetxt = M3DataInfo.DateTime.ToShortDateString();

            StationData stationData=aDataInfo.GetStationData("Var1");

            //Interpolate
            GridDataSetting aGDP = new GridDataSetting();
            aGDP.DataExtent.minX = 110.354;
            aGDP.DataExtent.maxX = 116.644;
            aGDP.DataExtent.minY = 31.384;
            aGDP.DataExtent.maxY = 36.874;
            aGDP.XNum = 200;
            aGDP.YNum = 200;
            InterpolationSetting gridInterp = new InterpolationSetting();
            gridInterp.GridDataSet = aGDP;

            gridInterp.InterpolationMethod = InterpolationMethods.IDW_Radius;
            gridInterp.Radius = 0.5;
            gridInterp.MinPointNum = 1;

            double[] X = new double[1];
            double[] Y = new double[1];
            ContourDraw.CreateGridXY(gridInterp.GridDataSet, ref X, ref Y);
            double[,] S = stationData.Data;
            S = ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,
                gridInterp.GridDataSet.DataExtent, 9999);
            GridData gridData = ContourDraw.InterpolateDiscreteData_Radius(S,
                X, Y, gridInterp.MinPointNum, gridInterp.Radius, 9999);

            //Create legend scheme
            bool hasNoData = true;
            LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(gridData, LegendType.GraduatedColor,
                ShapeTypes.Polygon, ref hasNoData);
            ((PolygonBreak)aLS.LegendBreaks[0]).DrawFill = false;

            //Create layer
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Polygon);

            if (IsJcData)
            {
                aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS, Datetxt + "监测等级", "Dj");
            }
            else if (IsYbData)
            {
                aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS, Datetxt + "预警等级", "Dj");
            }

            aLayer.IsMaskout = true;
            aLayer.LegendScheme.ImportFromXMLFile(Application.StartupPath + "\\DjColor.lgs");

            //Add layer
            layersLegend1.ActiveMapFrame.AddLayer(aLayer);
            layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 0);
            layersLegend1.Refresh();

            //Change title of the layout
            LayoutGraphic aTitle = mapLayout1.GetTexts()[0];

            aTitle.SetFont("黑体", 18);  //设置标题为小二号黑体
            aTitle.SetLabelText(Titletxt);

            //Add or change the legend in layout
            LayoutLegend aLegend;
            if (mapLayout1.GetLegends().Count > 0)
                aLegend = mapLayout1.GetLegends()[0];
            else
                aLegend = mapLayout1.AddLegend(650, 100);
            aLegend.LegendStyle = LegendStyles.Normal;
            aLegend.LegendLayer = aLayer;

            TitleLegend = aLegend;

            if (xtraTabControl1.SelectedTabPageIndex == 1)
                mapLayout1.PaintGraphics();

            xtraTabControl1.SelectedTabPageIndex = 1;

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

新浪微博达人勋

发表于 2014-10-20 14:49:15 | 显示全部楼层
guba82 发表于 2014-10-20 14:39
就是在我程序控制添加新层的时候出错了。

详细代码

要在CreateShadedLayer语句之前设置好LegendScheme(aLS)。

LegendScheme aLS = new LegendScheme(ShapeTypes.Polygon);
aLS.ImportFromXMLFile(Application.StartupPath + "\\DjColor.lgs");

if (IsJcData)
{
       aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS, Datetxt + "监测等级", "Dj");
}
else if (IsYbData)
{
       aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS, Datetxt + "预警等级", "Dj");
}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-10-20 15:02:57 | 显示全部楼层
本帖最后由 guba82 于 2014-10-20 15:04 编辑

谢谢,王老师,问题已经解决了。因为没有详细的说明,只能按照你的demo来做,中间过程不是很理解,希望你有空能给出个较为详尽的中文说明。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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