- 积分
- 4182
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-27
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 孤蓝et 于 2011-10-3 13:29 编辑
近期总算着手从VB6想C#转变,主要是有meteoinfo强大的气象分析类库做为后盾,使我有信心将以前做过和后续的开发向Meteoinfo类库转换。而且斑竹的Meteoinfo类库完整的demo程序,基本能给大家一个着手写基于meteoinfo类库开发的引子。不过作为C#初学者,对代码的阅读和理解毕竟有限,还是希望能通过学习,多做一些进步吧。之前在demo的基础上修改程序的过程中,也遇到不少问题,大部分是我不精通C#和meteoinfo的说明文档,但是斑竹还是给予细心的解答。所以希望我此处的提问、技术疑问能得到大家的帮助,也把自己的问题和解决方案写出来与大家分享。
1、demo程序中的default.mip中出现中文字符乱码情况。
解决方法(修改部分代码,在程序中加入<?xml version='1.0' encoding='gb2312'?>,或者在default.mip第一行加入<?xml version="1.0" encoding="gb2312"?>):
- public void SaveProjFile(string aFile)
- {
- m_FileName = aFile;
- XmlDocument doc = new XmlDocument();
- doc.LoadXml("<?xml version='1.0' encoding='gb2312'?><MeteoInfo name='" + Path.GetFileNameWithoutExtension(aFile) + "' type='projectfile'></MeteoInfo>");
- XmlElement root = doc.DocumentElement;
- //Add MapView content
- frmMain.G_LayerLegend.MapView.ExportProjectXML(ref doc, root, m_FileName);
- //Save project file
- doc.Save(aFile);
- }
复制代码
2、图层名称自定义
demo程序中,比如绘制第一类数据的示例程序,默认情况,左侧图层列表中的名词前部写为“stationmodel_”,这部分字段假如我不需要,或者改为其他名称,能实现吗?
通过下述两句代码,即可实现图层名称的自定义。很简单。
aLayer.IsMaskout = true;
aLayer.LayerName = "测试数据";
- private void TSMI_MICAPS1_StationModel_Click(object sender, EventArgs e)
- {
- MICAPS1DataInfo aDataInfo = new MICAPS1DataInfo();
- string aFile = Application.StartupPath + @"\Sample\09031417.000";
- aDataInfo.ReadDataInfo(aFile);
- LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Blue, 12);
- double[,] stationModelData = new double[10, 1];
- Extent aExtent = new Extent();
- stationModelData = aDataInfo.GetStationModelData(ref aExtent);
- VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);
- aLayer = DrawMeteoData.CreateStationModelLayer(stationModelData,
- aDataInfo.UNDEF, aLS, "MICAPS1");
- aLayer.IsMaskout = true;
- aLayer.LayerName = "测试数据";
- int aLayerHandle = G_LayerLegend.AddLayer(aLayer, true);
- }
复制代码
3、地名显示【没有实现】
目前meteoinfo支持丰富的地图文件,暂时不太熟需shp文件。所以我在着手考虑实现micaps 第17类数据的支持,来实现台站名的显示,这个在业务平台的开发中还算重要,能让预报人员明白相关台站的信息。此部分参照GIS相关知识或http://bbs.06climate.com/forum.p ... &extra=page%3D1中介绍的方法,目前本人未能实验成功。如有解决方案,立即呈上。
4、利用MICAPS第一类数据进行离散点分析。
读入数组的使用,stationmodel和stationdata的使用?以及等值线分析方法。
今天看了许久的demo和meteoinfo class library help,忙活了一晚上也没有实现我需要的结果,为了实现打开micaps第一类数据后,自动分析温度等值线。我想参照TSMI_LLStShaded_Click,TSMI_MICAPS1_StationModel_Click这两部分的代码,看能不能合并实现我的想法,可是在数据读入就发现很没有头绪:
micaps 第一类数据的读入方法
stationModelData = aDataInfo.GetStationModelData(ref aExtent);
经纬度的数据
StationData stationData = aDataInfo.GetStationData(0);
//Read micaps_1 data info,将micaps 第一类数据使用linlatstationdata方法读入。
//stationModelData[0, 0] stationModelData[1, 0] 经纬度
//stationModelData[2, 0] stationModelData[3, 0] 风向 风俗
//stationModelData[7, 0] 温度
//stationModelData[8, 0] 露点
//stationModelData[9, 0] 修正海平面气压
//GetStationData,将micaps 第一类数据使用GetStationData方法读入。
//GetStationData(1) 风向
//GetStationData(2) 风速
//GetStationData(3) 气压
//GetStationData(11) 露点/相对湿度
//GetStationData(14) 温度
//stationData 得到符合要求的经纬度、数据记录。这个是程序用来绘制LATLON数据。
我怎么能从stationModelData = aDataInfo.GetStationModelData(ref aExtent);里面找到经纬度、温度数据在数组的位置,然后赋值给S = ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,gridInterp.GridDataParaV.dataExtent, stationData.UNDEF);用来绘图?
以下代码即为我修改后的代码。大家可以试试。
- private void TSMI_MICAPS1_StationModel_Click(object sender, EventArgs e)
- {
- MICAPS1DataInfo aDataInfo = new MICAPS1DataInfo();
- string aFile = Application.StartupPath + @"\Sample\09031417.000";
- aDataInfo.ReadDataInfo(aFile);
- LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Blue, 12);
- double[,] stationModelData = new double[10, 1];
- Extent aExtent = new Extent();
- stationModelData = aDataInfo.GetStationModelData(ref aExtent);
- //Read micaps_1 data info,将micaps 第一类数据使用linlatstationdata方法读入。
- //stationModelData[0, 0] stationModelData[1, 0] 经纬度
- //stationModelData[2, 0] stationModelData[3, 0] 风向 风俗
- //stationModelData[7, 0] 温度
- //stationModelData[8, 0] 露点
- //stationModelData[9, 0] 修正海平面气压
- VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);
- aLayer = DrawMeteoData.CreateStationModelLayer(stationModelData,
- aDataInfo.UNDEF, aLS, "MICAPS1");
- aLayer.IsMaskout = true;
- aLayer.LayerName = "测试数据";
- int aLayerHandle = G_LayerLegend.AddLayer(aLayer, true);
- //GetStationData,将micaps 第一类数据使用GetStationData方法读入。
- //GetStationData(1) 风向
- //GetStationData(2) 风速
- //GetStationData(3) 气压
- //GetStationData(11) 露点/相对湿度
- //GetStationData(14) 温度
- //stationData 得到符合要求的经纬度、数据记录。这个是程序用来绘制LATLON数据。
- StationData stationData = aDataInfo.GetStationData(14);
- double[,] S = stationData.Data;
-
- //Interpolate
- GridDataPara aGDP = new GridDataPara();
- aGDP.dataExtent.minX = 70;
- aGDP.dataExtent.maxX = 100;
- aGDP.dataExtent.minY = 33;
- aGDP.dataExtent.maxY = 50;
- aGDP.xNum = 30;
- aGDP.yNum = 17;
- GridInterpolation gridInterp = new GridInterpolation();
- gridInterp.GridDataParaV = aGDP;
- gridInterp.GridInterMethodV = GridInterMethod.IDW_Radius;
- gridInterp.Radius = 2;
- gridInterp.MinPointNum = 1;
- double[] X = new double[1];
- double[] Y = new double[1];
- ContourDraw.CreateGridXY(gridInterp.GridDataParaV, ref X, ref Y);
-
- S = ContourDraw.FilterDiscreteData_Radius(S, gridInterp.Radius,
- gridInterp.GridDataParaV.dataExtent, stationData.UNDEF);
- GridData gridData = ContourDraw.InterpolateDiscreteData_Radius(S,
- X, Y, gridInterp.MinPointNum, gridInterp.Radius, stationData.UNDEF);
- //Create legend scheme 等值线
- bool hasNoData = true;
- LegendScheme aLS_2 = LegendManage.CreateLegendSchemeFromGridData(gridData, LegendType.GraduatedColor,
- ShapeTypes.Polyline, ref hasNoData);
-
- //Create layer
- VectorLayer aLayer_2 = new VectorLayer(ShapeTypes.Polyline);
- aLayer_2 = DrawMeteoData.CreateContourLayer(gridData, aLS_2, "Rain");
- aLayer_2.IsMaskout = true;
- G_LayerLegend.AddLayer(aLayer_2, true);
- //Create legend scheme 网格点 point
- //Create legend scheme 填色 shade
-
- this.Cursor = Cursors.Default;
- }
复制代码
后续完成这部分的修改,我会把我修改的demo程序共享出来,也想把自己使用meteoinfo做二次开发的过程写下来,能为其他人做一个借鉴把。也希望更多的人能使用这个类库开发更实用的业务平台。
感谢meteoinfo斑竹无私的奉献。
|
评分
-
查看全部评分
|