爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: vortexroc

能否对显示的格点数据值进行修改?

[复制链接]

新浪微博达人勋

发表于 2013-4-10 13:58:35 | 显示全部楼层

给出了讲解和代码,实在不知道还能怎么帮你了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-10 18:14:00 | 显示全部楼层
本帖最后由 vortexroc 于 2013-4-10 18:16 编辑
MeteoInfo 发表于 2013-4-10 13:58
给出了讲解和代码,实在不知道还能怎么帮你了。

我基本按照讲解的啊
1、在工具栏中添加了一个TSB_SelectFeatures按钮,其Click事件:。。。
这个我没有工具栏,直接在按钮的click事件里面写了mapView1.MouseTool = MouseTools.SelectFeatures;
这个不一定必须用工具栏吧?

2、添加MapView的ShapeSelected事件代码:
这个部分基本原版照抄了

3、给MapView添加此事件:
这个我也是写在按钮的click事件里面
mapView1.ShapeSelected += new EventHandler(this.MapView_ShapeSelected);
下面这句我注释掉了
mapView1.MouseMove += new MouseEventHandler(this.MapView_MouseMove);
不知道这句是不是必须要有的,我想这句是在鼠标拖动多选的时候才有作用吧,要加这句的话还要配上相应的MapView_MouseMove,而添加MapView_MouseMove事件还要有layersLegend1,不然下面这句就没法使用
layersLegend1.ActiveMapFrame.MapView.ScreenToProj(ref ProjX, ref ProjY, e.X, e.Y);
而我的项目中不完全像demo那样有工具栏TSB和layersLegend1,所以好些语句就没法用

现在是点击城市点后没响应,拖动鼠标后只在图上形成一个黑框,看来是没有触发MapView_ShapeSelected事件

还请老师花点时间指点一下


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

新浪微博达人勋

 楼主| 发表于 2013-4-11 00:28:51 | 显示全部楼层
MeteoInfo 发表于 2013-4-10 13:58
给出了讲解和代码,实在不知道还能怎么帮你了。

通过注释大量的demo的代码,发现要这样添加图层
layersLegend1.ActiveMapFrame.AddLayer(aLayer);
才能使用MouseTools.SelectFeatures,而我不用layersLegend1,直接
mapView1.AddLayer(aLayer);就没法用MouseTools.SelectFeatures,唉,累,看来没法了,不是什么项目都需要有个layersLegend1的。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-11 09:23:18 | 显示全部楼层
vortexroc 发表于 2013-4-11 00:28
通过注释大量的demo的代码,发现要这样添加图层
layersLegend1.ActiveMapFrame.AddLayer(aLayer);
才能 ...

MapView中的图层有很多,在选择图元等功能里只能针对某一个图层,所以MapView中有SelectedLayer属性,定义了一个唯一被选中图层的句柄(Handle)。在LayersLegend里通过鼠标可以选择SelectedLayer,如果没有LayersLegend可以用代码设置被选中图层就可以了:

mapView1.AddLayer(aLayer);
mapView1.SelectedLayer = aLayer.Handle;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-11 20:09:21 | 显示全部楼层
MeteoInfo 发表于 2013-4-11 09:23
MapView中的图层有很多,在选择图元等功能里只能针对某一个图层,所以MapView中有SelectedLayer属性,定义 ...

就是要这个解决方案,太感谢老师了

再请教一下:我修改了MapView_ShapeSelected事件,对图层数据进行编辑,但是只能显示被修改的数据,原有的未被修改的数据反而不能显示了,如下图:
q1.JPG
原来可以显示的城市名反而没有了,以下是相关代码,
            VectorLayer cityMapLayer = (VectorLayer)mapView1.GetLayerFromName("CITIES.SHP");

            for (int i = 0; i < cityMapLayer.ShapeNum; i++)
            {
                if (cityMapLayer.ShapeList.Selected)
                {
                    //nameStr = nameStr + " " + cityMapLayer.GetCellValue("NAME", i).ToString() + ",";(demo的这句注释掉了)
                    cityMapLayer.EditCellValue("NAME", i, "N");    这是添加的编辑图层的代码
                }
                //Debug.Print(cityMapLayer.GetCellValue("NAME", i).ToString());
            }
            cityMapLayer.RemoveLabels();
            cityMapLayer.AddLabels();
            mapView1.PaintLayers();

请老师看看是什么原因?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-11 21:14:36 | 显示全部楼层
vortexroc 发表于 2013-4-11 20:09
就是要这个解决方案,太感谢老师了

再请教一下:我修改了MapView_ShapeSelected事件,对 ...

因为如果图层有图元被选中,那么AddLabels就只对被选中图元起作用(代码当时就是这么设计的,适合只需要对部分图元加标注的情况)。你可以在AddLabels之前清除选中图元(只是让图元不被选中,不会删除掉):

cityMapLayer.ClearSelectedShapes();
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-12 16:48:14 | 显示全部楼层
MeteoInfo 发表于 2013-4-11 21:14
因为如果图层有图元被选中,那么AddLabels就只对被选中图元起作用(代码当时就是这么设计的,适合只需要对 ...

感谢老师热心帮忙。。。

如果读取了一个micaps文件,对显示的格点场的值进行了修改,将结果保存为一个新的micaps文件,有什么现成的方法么?部分代码如下:
        MeteoDataInfo yb = new MeteoDataInfo();
        yb.OpenMICAPSData(afile);
            GridData ybgrid = yb.GetGridData("var");
            bool hasUndefData = false;
            LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(ybgrid, LegendType.SingleSymbol, ShapeTypes.Point, ref hasUndefData);
            VectorLayer aLayer = DrawMeteoData.CreateGridPointLayer(ybgrid, aLS,"yb","var");
           mapView1.AddLayer(aLayer);
           //
................使用MapView_ShapeSelected对部分格点进行修改
      //
         如何保存为一个新的micaps文件,只要其中的格点值是修改的,其他信息都不变
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-12 20:24:44 | 显示全部楼层
vortexroc 发表于 2013-4-12 16:48
感谢老师热心帮忙。。。

如果读取了一个micaps文件,对显示的格点场的值进行了修改,将结果保存为一个 ...

目前没有现成的写micaps格点数据的函数,不过这种格式比较简单,你可以自己写代码来实现。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-13 00:27:45 | 显示全部楼层
MeteoInfo 发表于 2013-4-12 20:24
目前没有现成的写micaps格点数据的函数,不过这种格式比较简单,你可以自己写代码来实现。

那就应该是把图层aLayer里面的数据导出来吧,我看了一下所有数据都在ShapeList里面,ShapeList是个一维的数组,如何区分行列,判断经纬度的变化呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-13 21:57:24 | 显示全部楼层
vortexroc 发表于 2013-4-13 00:27
那就应该是把图层aLayer里面的数据导出来吧,我看了一下所有数据都在ShapeList里面,ShapeList是个一维的 ...

点图层里ShapeList包含的都是PointShape,有Point属性,Point.X是经度,Point.Y是纬度。ShapeList中PointShape的总数是知道的,当初从GridData生成点图层中点的顺序是按照由东向西、由南向北排列的,你依次读取PointShape的经纬度,如果碰到一个点的纬度和前面的点不同就说明换行了,因此每行的点数就可以知道了,列数自然也知道了。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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