爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5542|回复: 7

如何实现自定义站点实况渲染?

[复制链接]

新浪微博达人勋

发表于 2012-8-5 10:20:06 | 显示全部楼层 |阅读模式

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

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

x
求教,如何实现自定义的站点实况渲染?比如在温度、露点、风向风速、天气现象之外加入云的量的状高,三小时变压等等。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-8-5 10:37:07 | 显示全部楼层
在engine中做过类似的东东,可以采用picturemarkersymbol 或 IMultiLayerMarkerSymbol 来实现,但在metoinfo中好像没有看见类似的接口。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-8-5 17:27:01 | 显示全部楼层

关于站点填图二次开发教程里有相关内容。MeteoInfo对于站点填图的支持还不完善,云状、3小时变压等还没有考虑。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-8-5 20:12:44 | 显示全部楼层
目前想到两个替代办法,一个是采用graphic画,另外一个可以将站点生成多个图层,比如云状图层,可以载入云状字体后单独渲染,再加上其余的图层,共同来形成站点的渲染,但是这样速度应该会比较慢,最好还是象engine一样,采用IMultiLayerMarkerSymbol 类似的接口来实现相关渲染。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-8-6 10:22:33 | 显示全部楼层
tinysand 发表于 2012-8-5 20:12
目前想到两个替代办法,一个是采用graphic画,另外一个可以将站点生成多个图层,比如云状图层,可以载入云状 ...

没用过ArcEngine,希望你能详细讲解一下ImultiLayerMakerSymbol类的思想和用法,我们也学习学习。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-8-23 11:58:02 | 显示全部楼层
在engine中实现自定义站点渲染的主要代码见下:
                    IUniqueValueRenderer pUniqueValueR = new UniqueValueRendererClass();            
                pUniqueValueR.FieldCount = 1;                                                  
                pUniqueValueR.set_Field(0, "sStaCode");                                          
                        
                while (feature != null)
                {
                    if (feature.Shape is IPoint)
                    {
                        //////////////////////////////////////////////
                        //得到点shp的属性值
                        string  sStaCode      = feature.get_Value(feature.Fields.FindField("sStaCode")).ToString();
                        string  sStaName      = feature.get_Value(feature.Fields.FindField("sStaName")).ToString();
                        int     iN            = int.Parse(feature.get_Value(feature.Fields.FindField("iN")).ToString());
                        float   fWindDir      = float.Parse(feature.get_Value(feature.Fields.FindField("fWindDir")).ToString());
                        float   fWindSpeed    = float.Parse(feature.get_Value(feature.Fields.FindField("fWindSpeed")).ToString());
                        //////////////////////////////////////////////////////
                        //云量
                        //圈
                        ICharacterMarkerSymbol charMrkSymTotalCloud = GetCharFromFont("GSI Weather Symbols", 0xF0C0, pBlackColor,
                            0, 0, 0, (int)(fRate*25));
                        
                        //数字
                        sTemp = GetCloudText(iN);
                        IMarkerSymbol pMakSymCloudAmout = GetTextMarSym(sTemp, (int)(fRate * 8), 0 * fRate, 4 * fRate, pBlackColor);
                       
                        //////////////////////////////////////////////////////
                        //风向、风速
                        int iWindCharIndex = 0x22c + (int)(fWindSpeed / 2);
                        ICharacterMarkerSymbol charMrkSymWind = GetCharFromFont("Winds", iWindCharIndex, pBlackColor,
                            360 - fWindDir, 1.5 * fRate, 18 * fRate, (int)(fRate * 45));
                        
                        //////////////////////////////////////////////////////
                        //合成点渲染的符号
                        IMultiLayerMarkerSymbol multiLayermrkSym = new MultiLayerMarkerSymbol();
                        multiLayermrkSym.AddLayer(charMrkSymTotalCloud);
                        if (iN >= 0)
                            multiLayermrkSym.AddLayer(pMakSymCloudAmout);
                        multiLayermrkSym.AddLayer(charMrkSymWind);
   pUniqueValueR.AddValue(sStaCode, "sStaCode", (ISymbol)multiLayermrkSym);
        }
                    feature = featureCursor.NextFeature();
                }
  geoFeatureLayer.Renderer = (IFeatureRenderer)pUniqueValueR;

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

新浪微博达人勋

 楼主| 发表于 2012-8-23 12:03:37 | 显示全部楼层
主要思路是:以点shp文件中的站号作为唯一值渲染的标识,对于每一个站,根据不同的云量、风向风速等,得到不同的ICharacterMarkerSymbol 等,使用IMultiLayerMarkerSymbol 接口合成这个站的唯一值渲染。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-8-23 13:54:50 | 显示全部楼层
tinysand 发表于 2012-8-23 12:03
主要思路是:以点shp文件中的站号作为唯一值渲染的标识,对于每一个站,根据不同的云量、风向风速等,得到不 ...

谢谢给出这么详细的信息。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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