爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfo二次开发教程(九)

[复制链接]

新浪微博达人勋

 楼主| 发表于 2013-5-28 15:13:31 | 显示全部楼层

关键看你的LegendScheme是怎么设置的(LegendType是什么)你的LegendBreaks有几个?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-28 15:24:39 | 显示全部楼层
顶一下~有空学习一下MeteoInfo
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-28 15:31:22 | 显示全部楼层
private void CreateSLLayer(string sttp)
        {
            DataTable dtData =new DataTable();
            dtData = dtData0.Copy();
            //New layer
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);
            aLayer.LayerName = "ST_" + sttp;
            aLayer.LegendScheme = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 10);
            aLayer.LegendScheme.LegendType = LegendType.UniqueValue;
            aLayer.Visible = true;
            
            //Add fields            
            aLayer.EditAddField("STCD", typeof(string));
            aLayer.EditAddField("LON", typeof(double));
            aLayer.EditAddField("LAT", typeof(double));
            aLayer.EditAddField("STNM", typeof(string));
            aLayer.EditAddField("STTP", typeof(string));
            //Add shape
            dtData.DefaultView.RowFilter = "STTP = '" + sttp+ "'";
            for (int i = 0; i < dtData.Rows.Count; i++)
            {
                PointShape aPS = new PointShape();
                PointD aPoint = new PointD();
                aPoint.X = double.Parse(dtData.Rows[i]["LGTD"].ToString());
                aPoint.Y = double.Parse(dtData.Rows[i]["LTTD"].ToString());
                aPS.Point = aPoint;
                int shapeNum = aLayer.ShapeNum;
                if (aLayer.EditInsertShape(aPS, shapeNum))
                {
                    //Edit record value
                    aLayer.EditCellValue("STCD", shapeNum, dtData.Rows[i]["STCD"].ToString());
                    aLayer.EditCellValue("LON", shapeNum, aPoint.X);
                    aLayer.EditCellValue("LAT", shapeNum, aPoint.Y);
                    aLayer.EditCellValue("STNM", shapeNum, dtData.Rows[i]["STNM"].ToString());
                    aLayer.EditCellValue("STTP", shapeNum, dtData.Rows[i]["STTP"].ToString());
                }
            }

            //Add Label
            aLayer.LabelSet.FieldName = "STNM";
            aLayer.LabelSet.LabelFont = new Font("Arial", 10);
            aLayer.LabelSet.YOffset = -5;
            aLayer.LabelSet.LabelColor = (sttp == "RR" ? Color.Green : Color.Blue);
            aLayer.AddLabels();
            
            aLayer.LegendScheme.ShapeType = ShapeTypes.Image;
            foreach (PointBreak legend in aLayer.LegendScheme.LegendBreaks)
            {
                legend.MarkerType = MarkerType.Image;
                legend.ImagePath = "images/"+sttp + ".gif";
                //legend.Color = (sttp == "RR" ? Color.Blue : Color.Blue);
                legend.Size = 10;
            }
            //Add layer
            mapView1.AddLayer(aLayer);
            mapView1.PaintLayers();
            mapView1.Refresh();
        }
这是我的代码,老师指导下咧~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-28 15:43:37 | 显示全部楼层
fromweb 发表于 2013-5-28 15:31
private void CreateSLLayer(string sttp)
        {
            DataTable dtData =new DataTable();

aLayer.LegendScheme = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 10);
创建的是SingleSymbol图例,也就是所有图元都显示成一种符号。

aLayer.LegendScheme.LegendType = LegendType.UniqueValue;      这个没有实际作用。

你还是没有仔细看台风脚本的例子,里面有一行代码:
pLayer.UpdateLegendScheme(LegendType.GraduatedColor, "Wind")

第一个参数是图例类型,也可以是LegendType.UniqueValue,第二个参数是图层的一个属性字段,比如可以是"STNM",

图例的设置也可以参考之前的帖子:LegendScheme aLS参数问题
http://bbs.06climate.com/forum.p ... 928&fromuid=106

脚本程序中编辑图例LegendScheme
http://bbs.06climate.com/forum.p ... 911&fromuid=106
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-28 15:49:45 | 显示全部楼层
多谢指导,我在研究哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-28 17:32:47 | 显示全部楼层
搞掂,代码如下:
aLayer.UpdateLegendScheme(LegendType.UniqueValue, "STTP");
            foreach (PointBreak legend in aLayer.LegendScheme.LegendBreaks)
            {
                legend.MarkerType = MarkerType.Image;
                legend.ImagePath = "images/" + legend.Caption + ".gif";
                legend.Size = 10;
            }
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-28 17:34:17 | 显示全部楼层
继续新问题,如何给这些点加事件,比如click,mouse_over等
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-28 20:38:05 | 显示全部楼层
fromweb 发表于 2013-5-28 17:34
继续新问题,如何给这些点加事件,比如click,mouse_over等

之前有一些类似的帖子,你先找找看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-29 08:52:24 | 显示全部楼层
没搞掂,老师给点提醒咧~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-29 08:59:31 | 显示全部楼层
fromweb 发表于 2013-5-29 08:52
没搞掂,老师给点提醒咧~

请问如何使鼠标悬浮在点图层时显示点的信息?
http://bbs.06climate.com/forum.p ... 591&fromuid=106

请教:identifer功能是如何实现的
http://bbs.06climate.com/forum.p ... 998&fromuid=106
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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