爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 17394|回复: 41

能否利用MeteoInfo类库开发流域面雨量显示?

[复制链接]

新浪微博达人勋

发表于 2012-9-17 13:14:52 | 显示全部楼层 |阅读模式

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

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

x
王老师您好,想请教您一个问题:能否利用MeteoInfo类库开发出流域面雨量的显示平台呢?
举个例子:假设某个流域已划分好,并且其面雨量也求得,最后将该流域范围内全部按某一色系填充。。。不知道利用MeteoInfo类库能否实现这样的功能?谢谢!
实现如下图所示的类似效果:

流域面雨量.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-17 13:41:57 | 显示全部楼层
这个用MeteoInfo实现起来应该比较简单。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-17 14:16:32 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-17 15:45:41 | 显示全部楼层
wbriver 发表于 2012-9-17 14:16
王老师能否给点具体的实现思路呢?不甚感激!

给流域Polygon图层加一个属性字段(比如"rain"),在程序中将计算出来的面雨量赋给各流域该字段中,利用该字段设置LegendScheme来显示图层就可以了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-17 19:27:53 | 显示全部楼层
MeteoInfo 发表于 2012-9-17 15:45
给流域Polygon图层加一个属性字段(比如"rain"),在程序中将计算出来的面雨量赋给各流域该字段中,利用该 ...

王老师,摸索了半天,还是没搞定啊,在Demo程序里面没找到如何给该图层添加属性段的代码。。。
  1. aFile = Application.StartupPath + @"\Shp\NT_流域.shp";
  2.             aLayer = MapDataManage.OpenLayer(aFile);
  3.             aLayer.。。。。。。。。。//写不下去了,呵呵
复制代码
您给稍微提示下吧,水平比较菜呢~谢谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-17 22:02:39 | 显示全部楼层
wbriver 发表于 2012-9-17 19:27
王老师,摸索了半天,还是没搞定啊,在Demo程序里面没找到如何给该图层添加属性段的代码。。。您给稍微提 ...

可以参考我刚发的二次开发教程贴:MeteoInfo二次开发教程(九)
http://bbs.06climate.com/forum.p ... 024&fromuid=106
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-19 11:36:00 | 显示全部楼层
MeteoInfo 发表于 2012-9-17 22:02
可以参考我刚发的二次开发教程贴:MeteoInfo二次开发教程(九)
http://bbs.06climate.com/forum.php?mo ...

王老师您好,学习了您的教程九后,写了如下代码:
  1. //加载流域
  2. aFile = Application.StartupPath + @"\Shp\Liuyu.shp";
  3. aLayer = MapDataManage.OpenLayer(aFile);
  4.   
  5. //以下为测试流域面雨量
  6. VectorLayer lyLayer = new VectorLayer(ShapeTypes.Polygon);
  7. lyLayer = (VectorLayer)MapDataManage.OpenLayer(aFile);//加载流域Polygon图层
  8. lyLayer.LayerName = "流域面雨量";
  9. lyLayer.EditAddField("rain", typeof(double));//添加“rain”字段
  10. for (int i = 0; i < 60; i++)
  11. {
  12.     lyLayer.EditCellValue("rain", i, i);//给各流域的“Rain”字段赋值

  13. }
  14. LegendScheme aLS = LegendManage.CreateUniqValueLegendScheme(lyLayer, 0, 60);
复制代码
您讲的“给流域Polygon图层加一个属性字段(比如"rain"),在程序中将计算出来的面雨量赋给各流域该字段中”上面应该已经实现了吧,接下来的“利用该字段设置LegendScheme来显示图层”。。。。不知如何实现?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-19 14:33:50 | 显示全部楼层
wbriver 发表于 2012-9-19 11:36
王老师您好,学习了您的教程九后,写了如下代码:您讲的“给流域Polygon图层加一个属性字段(比如"rain") ...

就是给图层设置一个LegendScheme,具体可以参考此帖:LegendScheme aLS参数问题
http://bbs.06climate.com/forum.p ... 928&fromuid=106
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-20 08:04:21 | 显示全部楼层
MeteoInfo 发表于 2012-9-19 14:33
就是给图层设置一个LegendScheme,具体可以参考此帖:LegendScheme aLS参数问题
http://bbs.06climate.c ...

王老师,是不是将各流域Polygon图层添加的字段“Rain”的值看成Demo中的“站点数据”,然后就像显示“StationData”类似的方式来显示流域面雨量?关键如何将各流域Rain字段的值转成站点数据格式呢?这点好像和显示其它数据不太一样,demo中都是首先加载站点或格点数据,这里的“rain”字段的值如何像他们一样加载进来?demo中都是等值线,栅格等等,缺少按地图某个字段的值显示图形的,王老师最好能开个这方面的课程呢!呵呵~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-22 17:09:17 | 显示全部楼层
MeteoInfo 发表于 2012-9-17 22:02
可以参考我刚发的二次开发教程贴:MeteoInfo二次开发教程(九)
http://bbs.06climate.com/forum.php?mo ...

王老师,不好意思老师打扰您,LegendScheme aLS参数也设置好了,最后一步创建图层的时候还是不知道用哪个方法?
  1.            //以下为测试流域面雨量
  2.             VectorLayer lyLayer = new VectorLayer(ShapeTypes.Polygon);
  3.             lyLayer = (VectorLayer)MapDataManage.OpenLayer(aFile);
  4.             lyLayer.LayerName = "流域面雨量";
  5.             lyLayer.EditAddField("Rain", typeof(double));//添加字段
  6.             double[] rainfall=new double[60];
  7.             Color[] colors = new Color[60];
  8.             for (int i = 0; i < 60; i++)
  9.             {
  10.                 lyLayer.EditCellValue("Rain", i, i);
  11.                 rainfall[i]=i;
  12.                 colors[i] = Color.FromArgb(i, 100, 150);
  13.             }
  14.             MeteoDataInfo aDataInfo = new MeteoDataInfo();
  15.             LegendScheme aLS = LegendManage.CreateGraduatedLegendScheme(rainfall, colors, ShapeTypes.Polygon, 1, 60, false, -9999);
  16.             for (int i = 0; i < aLS.BreakNum; i++)
  17.                 ((PolygonBreak)aLS.breakList[i]).OutlineSize = 8;
复制代码
最后一步,用设置的aLS参数来创建图层,如例子中:VectorLayer aLayer = DrawMeteoData.CreateSTPointLayer(visData, aLS, "StationPoint_Vis", "Vis")的这一步,我应该用哪个函数来创建呢?思考了好久,还是没想出来啊。。。。希望王老师能提示下学生,灰常感激!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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