爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: vortexroc

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

[复制链接]

新浪微博达人勋

 楼主| 发表于 2013-2-27 17:27:25 | 显示全部楼层

嗯,实现了选择多个点显示信息了,还有点小问题,如何设置已选的点的颜色,还有如何显示出一个矩形框来表示已选的范围呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-2-28 17:08:38 | 显示全部楼层
vortexroc 发表于 2013-2-27 17:27
嗯,实现了选择多个点显示信息了,还有点小问题,如何设置已选的点的颜色,还有如何显示出一个矩形框来表 ...

最近太忙了,你把相关代码贴出来,我看看怎么改进一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-2 11:29:53 | 显示全部楼层
MeteoInfo 发表于 2013-2-28 17:08
最近太忙了,你把相关代码贴出来,我看看怎么改进一下

代码如下,mapview控件取名为mvYB,点图层用了软件自带的CITIES.SHP来测试
  1. public partial class frmYB : Form
  2.     {
  3.         public static string prj_path = AppDomain.CurrentDomain.BaseDirectory + @"..\..\";
  4.         public VectorLayer cityMapLayer = (VectorLayer)MapDataManage.OpenLayer(prj_path + @"\DLl\Map\CITIES.SHP");
  5.         public PointF ybStartPoint, ybEndPoint;

  6.         private void frmYB_Load(object sender, EventArgs e)
  7.         {
  8.             MapLayer gxMapLayer = MapDataManage.OpenLayer(prj_path + @"\DLl\Map\cnworld");
  9.             mvYB.AddLayer(gxMapLayer);
  10.             mvYB.AddLayer(cityMapLayer);
  11.             mvYB.ZoomToExtentLonLat(104, 112, 20, 27);
  12.             mvYB.MouseTool = MouseTools.Pan;

  13.         }
  14.         private void mvYB_MouseDown(object sender, MouseEventArgs e)
  15.         {
  16.             ybStartPoint = new PointF(e.X, e.Y);
  17.         }

  18.         private void mvYB_MouseMove(object sender, MouseEventArgs e)
  19.         {
  20.             ybEndPoint.X = e.X;
  21.             ybEndPoint.Y = e.Y;
  22.         }

  23.         private void mvYB_MouseUp(object sender, MouseEventArgs e)
  24.         {
  25.             List<int> selectedShapes = new List<int>();
  26.             RectangleF rect = new RectangleF(ybStartPoint.X, ybStartPoint.Y, ybEndPoint.X - ybStartPoint.X, ybEndPoint.Y - ybStartPoint.Y);
  27.             selectedShapes = mvYB.SelectShapes(cityMapLayer, rect);
  28.             foreach (var item in selectedShapes)
  29.             {
  30.                 string name = cityMapLayer.GetCellValue("NAME", item).ToString();
  31.                 MessageBox.Show(name);
  32.             }
  33.         }

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

新浪微博达人勋

发表于 2013-3-2 20:27:30 | 显示全部楼层
本帖最后由 MeteoInfo 于 2013-3-2 20:29 编辑
vortexroc 发表于 2013-3-2 11:29
代码如下,mapview控件取名为mvYB,点图层用了软件自带的CITIES.SHP来测试

我给MapView增加了一个ShapeSelected事件,同时也更新了二次开发的Demo程序来示例此应用,最新的Demo程序和类库文件可以在MeteoInfo网站上下载。用此事件就不需要处理鼠标事件了。
Demo程序的变化:在工具栏加了一个选择图元的工具,给MapView增加了ShapeSelected事件来处理图元被选中后的工作,图元被选中后会填充亮黄色。详见Demo程序代码。
Image01001.png

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

新浪微博达人勋

 楼主| 发表于 2013-4-8 00:19:25 | 显示全部楼层
MeteoInfo 发表于 2013-3-2 20:27
我给MapView增加了一个ShapeSelected事件,同时也更新了二次开发的Demo程序来示例此应用,最新的Demo程序 ...

不懂怎么用这个事件呢,直接在事件里面写代码么,好像没反应啊?我写的代码如下(mvYB就是添加的mapview1)
  1. private void mvYB_ShapeSelected(object sender, EventArgs e)
  2.         {
  3.             VectorLayer gxLayer = (VectorLayer)mvYB.GetLayerFromName("CITIES.SHP");
  4.             string nameStr = "Selected: ";
  5.             for (int i = 0; i < cityMapLayer.ShapeNum; i++)
  6.             {
  7.                 if (cityMapLayer.ShapeList[i].Selected)
  8.                 {
  9.                     nameStr = nameStr + " " + cityMapLayer.GetCellValue("NAME", i).ToString() + ",";
  10.                 }
  11.             }

  12.             nameStr.TrimEnd(',');
  13.             MessageBox.Show(nameStr);
  14.         }
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-8 09:01:36 | 显示全部楼层
vortexroc 发表于 2013-4-8 00:19
不懂怎么用这个事件呢,直接在事件里面写代码么,好像没反应啊?我写的代码如下(mvYB就是添加的mapview1 ...

你仔细看看最新的Demo程序,需要对C#的事件有一些理解。

1、在工具栏中添加了一个TSB_SelectFeatures按钮,其Click事件:
private void TSB_SelectFeatures_Click(object sender, EventArgs e)
        {
            mapView1.MouseTool = MouseTools.SelectFeatures;
            mapLayout1.MouseMode = MouseMode.Map_SelectFeatures;

            SetCurrentTool((ToolStripButton)sender);
        }

2、添加MapView的ShapeSelected事件代码:
private void MapView_ShapeSelected(object sender, EventArgs e)
        {
            mapView1.PaintLayers();
            VectorLayer cityMapLayer = (VectorLayer)mapView1.GetLayerFromName("CITIES.shp");
            string nameStr = "Selected: ";
            for (int i = 0; i < cityMapLayer.ShapeNum; i++)
            {
                if (cityMapLayer.ShapeList.Selected)
                {
                    nameStr = nameStr + " " + cityMapLayer.GetCellValue("NAME", i).ToString() + ",";
                }
            }

            nameStr.TrimEnd(',');
            MessageBox.Show(nameStr);
        }

3、给MapView添加此事件:
private void SetMapView()
        {
            //Add map view
            tabControl1.TabPages[0].Controls.Clear();
            tabControl1.TabPages[0].Controls.Add(mapView1);
            mapView1.Dock = DockStyle.Fill;
            mapView1.MouseMove += new MouseEventHandler(this.MapView_MouseMove);
            mapView1.ShapeSelected += new EventHandler(this.MapView_ShapeSelected);
        }
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-8 11:05:21 | 显示全部楼层
本帖最后由 vortexroc 于 2013-4-8 11:09 编辑
MeteoInfo 发表于 2013-4-8 09:01
你仔细看看最新的Demo程序,需要对C#的事件有一些理解。

1、在工具栏中添加了一个TSB_SelectFeatures按 ...

好麻烦啊,而且还要添加MouseMove的代码,demo里面MouseMove的代码也是一大堆,看得头晕

我只是希望添加一个按钮,点击后就能对点图层上面的各个点进行选择或修改,也不涉及对maplayout的操作。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-8 11:21:08 | 显示全部楼层
vortexroc 发表于 2013-4-8 11:05
好麻烦啊,而且还要添加MouseMove的代码,demo里面MouseMove的代码也是一大堆,看得头晕

我只 ...

编程序就不要嫌麻烦,其实弄明白道理后会觉得挺简单。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-8 11:34:13 | 显示全部楼层
MeteoInfo 发表于 2013-4-8 11:21
编程序就不要嫌麻烦,其实弄明白道理后会觉得挺简单。

呵呵,其实就是关于事件和委托的理解比较麻烦,网上各种教程越看越晕
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-9 22:19:13 | 显示全部楼层
MeteoInfo 发表于 2013-4-8 09:01
你仔细看看最新的Demo程序,需要对C#的事件有一些理解。

1、在工具栏中添加了一个TSB_SelectFeatures按 ...

仿着demo写了点,但是点击了没反应,不明白,还有就是被点击的图层变成黄色这个是在哪设置的也搞不清
  1. private void test_Click(object sender, EventArgs e)     //test是一个button按钮
  2.         {
  3.             mvYB.MouseTool = MouseTools.SelectFeatures;      //mvYB是mapview控件
  4.             //mvYB.MouseMove += new MouseEventHandler(this.MapView_MouseMove);
  5.             mvYB.ShapeSelected += new EventHandler(this.MapView_ShapeSelected);

  6.         }
  7.       
  8.         private void MapView_ShapeSelected(object sender, EventArgs e)
  9.         {
  10.             mvYB.PaintLayers();
  11.             VectorLayer cityMapLayer = (VectorLayer)mvYB.GetLayerFromName("CITIES.shp");
  12.             string nameStr = "Selected: ";
  13.             for (int i = 0; i < cityMapLayer.ShapeNum; i++)
  14.             {
  15.                 if (cityMapLayer.ShapeList[i].Selected)
  16.                 {
  17.                     nameStr = nameStr + " " + cityMapLayer.GetCellValue("NAME", i).ToString() + ",";
  18.                 }
  19.             }
  20.             nameStr.TrimEnd(',');
  21.             MessageBox.Show(nameStr);
  22.         }
复制代码
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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