爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3940|回复: 9

遇到2个问题 请老师解答

[复制链接]

新浪微博达人勋

发表于 2017-4-27 14:18:09 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xuzheyong 于 2017-4-27 14:35 编辑

问题1

问题1
            

          问题1:中文名显示问题
            LonLatStationDataInfo aDataInfo = new LonLatStationDataInfo();                        
            string aFile = Application.StartupPath + @"\Sample\ZhejiangCity.csv";
            aDataInfo.ReadDataInfo(aFile);
            // 1、即绘制台站位置点信息。   
            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 2);
            VectorLayer aLayerV = new VectorLayer(ShapeTypes.Point);                                // Point类型
            aLayerV = DrawMeteoData.CreateSTInfoLayer(aDataInfo.GetStationInfoData(0, 0), aLS, "台站位置信息");
            layersLegend1.ActiveMapFrame.AddLayer(aLayerV);

            //Set label,首先获得变量名,然后绘制标签数据数据。!!!!
            List<string> fieldNameList = aLayerV.GetFieldNameList();
            aLayerV.LabelSet.FieldName = fieldNameList[3];   //台站名称存储位置
            aLayerV.LabelSet.AvoidCollision = true;
            aLayerV.LabelSet.LabelAlignType = MeteoInfoC.Legend.AlignType.Right;
            aLayerV.LabelSet.XOffset = -2;
            FontFamily ff = new FontFamily("Arial");
            aLayerV.LabelSet.LabelFont = new System.Drawing.Font(ff, 9);
            aLayerV.LabelSet.LabelColor = Color.Black;
            aLayerV.LabelSet.DrawShadow = false;
            aLayerV.LabelSet.ShadowColor = Color.Black;
            aLayerV.LabelSet.ColorByLegend = false;

            //Add labels            
            aLayerV.AddLabels();
            this.mapView1.PaintLayers();




                               
登录/注册后可看大图




问题2

问题2

          问题2:色标图最高一格无显示
           参考的是这段代码
           //            ls = LegendScheme(ShapeTypes.Polygon)
           //            ls.setLegendType(LegendType.GraduatedColor)
           //            values = [450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950,1000, 1050]
           //            colors = [Color(160,0,200),Color(110,0,220),Color(30,60,255),Color(0,160,255),Color(0,200,200),Color(0,220,0),
           //                          Color(160,230,50),Color(230,220,50),Color(230,175,45),Color(240,130,40),Color(250,60,60),Color(240,0,130)]
           //            lbs = ls.getLegendBreaks()
           //            for i in range(0, len(colors)):
           //            lb = PolygonBreak()
           //            lb.setColor(colors)
           //            lb.setStartValue(values)
           //            lb.setEndValue(values[i + 1])
           //            lb.setCaption(str(values) + ' ' + str(values[i + 1]))
           //            lb.setDrawOutline(False)
           //            lbs.add(lb)
           //            layer = DrawMeteoData.createShadedLayer(gdata, ls, 'Pressure_Shaded', 'PS', True)



                               
登录/注册后可看大图



            LegendScheme aLS1 = new LegendScheme(ShapeTypes.Polygon);
            aLS1.LegendType = LegendType.GraduatedColor;
            double[] values = new double[11] {0,0.1,1,5,10,25,50,100,150,200,10000 };
            Color[] colors = new Color[10] { Color.FromArgb(255,255,255) ,Color.FromArgb(194,238,181),
                                                           Color.FromArgb(166,242,143), Color.FromArgb(61,186,61),
                                                           Color.FromArgb(97,184,255), Color.FromArgb(0,0,255) ,   
                                                           Color.FromArgb(250,0,250),  Color.FromArgb(128,0,64),  
                                                           Color.FromArgb(214,79,116), Color.FromArgb(166,242,143) };

            List<ColorBreak> lbs = aLS1.LegendBreaks;
            PolygonBreak lb;

            for (int i = 0; i < colors.Length; i++)
            {
                lb = new PolygonBreak();
                lb.Color = colors;
                lb.StartValue = values[i ];
                lb.EndValue = values[i + 1];
                lb.Caption = values + "-" + values[i + 1] ;
                //lb.DrawOutline = false;
                lbs.Add(lb);
            }

            // 反转色标图
            aLS1.LegendBreaks.Reverse(0, aLS1.BreakNum);                                 
            ((PolygonBreak)aLS1.LegendBreaks[0]).DrawFill = false;


            //Create layer
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Polygon);
            aLayer = DrawMeteoData.CreateShadedLayer(gridData, aLS1, "Rain", "Rain");
            aLayer.IsMaskout = true;

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

            //layersLegend1.Refresh();   
            this.mapView1.PaintLayers();
            MaskOut ma = new MaskOut(mapView1);
            ma.MaskLayer = "3.shp";
            ma.SetMaskLayer = true;
            mapView1.MaskOut = ma;
            mapView1.PaintLayers();




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

新浪微博达人勋

发表于 2017-4-27 19:47:42 | 显示全部楼层
1、中文名需要用中文字体,还有就是看看编码是不是有问题,可以用MeteoInfo打开文件看看能不能正常显示。2、需要你自己调试看看问题出在哪里。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-27 21:04:04 来自手机 | 显示全部楼层
嗯 好的 老师 谢谢您的解答 我试一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-30 09:53:31 | 显示全部楼层
老师 又遇到一个问题 关于插值的 取得数据是站点风 然后在海面上有空白 这种情况可以怎么处理呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-30 09:54:44 | 显示全部楼层
本帖最后由 xuzheyong 于 2017-4-30 10:14 编辑

刚刚不会用回复功能,就把 经过老师指导之后的 解决了 中文地名还有色标条 两个问题的图片发上来一下,实在是抱歉
1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-30 09:56:44 | 显示全部楼层
本帖最后由 xuzheyong 于 2017-4-30 10:00 编辑
MeteoInfo 发表于 2017-4-27 19:47
1、中文名需要用中文字体,还有就是看看编码是不是有问题,可以用MeteoInfo打开文件看看能不能正常显示。2 ...


老师又遇到一个问题,取得是自动站的风力资料,在杭州湾空白 这种情况可以怎么解决?
2.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-30 09:59:18 | 显示全部楼层
xuzheyong 发表于 2017-4-30 09:56
老师又遇到一个问题,取得是自动站的风力资料,在海上空白 这种情况可以怎么解决?

你是怎么插值的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-30 10:03:13 | 显示全部楼层
本帖最后由 xuzheyong 于 2017-4-30 10:10 编辑
MeteoInfo 发表于 2017-4-30 09:59
你是怎么插值的?


           MeteoDataInfo aDataInfo = new MeteoDataInfo();
            aDataInfo.OpenLonLatData(@"E:\surfer\surferApplication3\surfer\data\WindMwsUV.txt");   
            StationData stationDataU = aDataInfo.GetStationData("U");
            StationData stationDataV = aDataInfo.GetStationData("V");
            GridDataSetting aGDP = new GridDataSetting();
            aGDP.DataExtent.minX = xMin;
            aGDP.DataExtent.maxX = xMax;
            aGDP.DataExtent.minY = yMin;
            aGDP.DataExtent.maxY = yMax;
            aGDP.XNum = 100;
            aGDP.YNum = 100;

            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(25);
            t.Add(20);
            t.Add(15);
            t.Add(10);
            t.Add(5);
            gridInterp.RadList = t;

            double[] X = new double[1];
            double[] Y = new double[1];
            MeteoInfoC.Drawing.ContourDraw.CreateGridXY(gridInterp.GridDataSet, ref X, ref Y);
            double[,] Su = stationDataU.Data;
            double[,] Sv = stationDataV.Data;
            Su = MeteoInfoC.Drawing.ContourDraw.FilterDiscreteData_Radius(Su, gridInterp.Radius,        gridInterp.GridDataSet.DataExtent, -9999);
            Sv = MeteoInfoC.Drawing.ContourDraw.FilterDiscreteData_Radius(Sv, gridInterp.Radius, gridInterp.GridDataSet.DataExtent, -9999);
            GridData ugridData = MeteoInfoC.Drawing.ContourDraw.InterpolateDiscreteData_Cressman(Su,X, Y, -9999, gridInterp.RadList);
            GridData vgridData = MeteoInfoC.Drawing.ContourDraw.InterpolateDiscreteData_Cressman(Sv,X, Y, -9999, gridInterp.RadList);

            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Blue, 10);
            VectorLayer aLayer = DrawMeteoData.CreateGridBarbLayer(ugridData, vgridData, ugridData, aLS, true, "Barb_UV", true);
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-30 10:14:03 | 显示全部楼层
xuzheyong 发表于 2017-4-30 10:03
MeteoDataInfo aDataInfo = new MeteoDataInfo();
            aDataInfo.OpenLonLatData( ...

Cressman差值有半径的设置,如果某个格点在设定的半径内没有站点数据则该格点值为缺测值,这是差值算法本身决定的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-30 10:21:28 | 显示全部楼层
恩 好的 谢谢老师 我刚刚把回复链接点错了 就把经您指点后的 解决了主题所提的问题后的图片发了一下,谢谢您 是UTF_8的问题   我是这样解决的

解决导出csv中文乱码问题:将csv用txt打开,另存为,选择utf8编码即可。【方法来自网络】

那也就是说,在自动站数据插值的时候,会不可避免的出现缺测,应该如果是格点资料导入的话,就不会了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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