爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3921|回复: 8

关于选择要素的二次开发问题

[复制链接]

新浪微博达人勋

发表于 2014-2-19 15:46:40 | 显示全部楼层 |阅读模式

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

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

x
this.mapView1.MouseTool = MouseTools.SelectFeatures_Rectangle;
this.mapLayout1.MouseMode = MouseMode.Map_SelectFeatures_Rectangle;

这样之后就可以选择要素了.

应该如何在选定要素之后弹出修改右菜单,如图这样
无标题.png

另外,如何才能够判断现在选择的图层呢?
附送几张选择的icon图,不知道是不是商业软件的图标,我是在网上找的
SelByRec.bmp SelByPoin.bmp SelByPloygon.bmp SelByLin.bmp SelByCircle.bmp


谢谢。



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

新浪微博达人勋

 楼主| 发表于 2014-2-19 15:50:04 | 显示全部楼层
本帖最后由 Mc.Fish 于 2014-2-19 15:56 编辑

经过试验,选择要素时操作的图层是第一个图层,不知道我的理解是否正确。但是如何在代码中获取操作图层的名字呢?
因为需要先做一下判断是否选择的是目标图层,
另外如何获取选择的要素?

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

新浪微博达人勋

发表于 2014-2-19 16:33:22 | 显示全部楼层

1、用MapView的ShapeSelected事件,看Demo程序源代码及此帖14楼:http://bbs.06climate.com/forum.p ... p;extra=&page=2

2、MapLayer有个Handle属性来指示图层,MapView有个SelectedLayer属性(即被选中图层的Handle)。获取MapView中被选中的图层可以用
MapLayer selLayer = theMapView.GetLayerFromHandle(theMapView.SelectedLayer);

如果有个图层是cityLayer,可以在程序中将其设为被选中图层
theMapView.SelectedLayer = cityLayer.Handle;

3、那些图标是从哪里下载的?有png格式吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-19 22:07:32 | 显示全部楼层
顶啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-21 11:09:09 | 显示全部楼层
本帖最后由 Mc.Fish 于 2014-2-21 11:11 编辑

谢谢.
在shapeselected事件中加入这段代码:
contextMenuStrip1.Show(Cursor.Position);

就可以在选择后弹出右键菜单了.
如何将数据联系起来,修改、保存、及时显示还需要仔细学习大家的帖子。感谢王老师的耐心指点。

图标是从gis的一个论坛下的,好早了。
没有png的,不好意思。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-22 19:31:58 | 显示全部楼层
本帖最后由 Mc.Fish 于 2014-2-22 19:34 编辑

照着以前的帖子讲的,
VectorLayer cityMapLayer = (VectorLayer)mapView1.GetLayerFromHandle(mapView1.SelectedLayer);
            for (int i = 0; i < cityMapLayer.ShapeNum; i++)
            {
                if (cityMapLayer.ShapeList.Selected)
                {
                    cityMapLayer.EditCellValue("FFI", i, 1.0);
                }
            }
            cityMapLayer.ClearSelectedShapes();

            mapView1.PaintLayers();
这样却没有刷新点图层修改的内容
在对图层的legend点了apply后,图层的颜色变了,
说明已经修改成功了。

vectorlayer的filename属性好像不是一开始就有的。需要自己赋值,这是否是一个小bug?

另外,在之后对修改的内容立刻写成文件(这里是Micaps3类格式)
如何获取shapelist中站点的站号信息?

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

新浪微博达人勋

 楼主| 发表于 2014-2-22 20:08:22 | 显示全部楼层
如何获取图层是从什么数据读取的?
比如点图层是从Micaps3还是从Micaps1读取的。
这样可以写一个统一的类来保存相应的修改结果。

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

新浪微博达人勋

发表于 2014-2-22 22:05:54 | 显示全部楼层
Mc.Fish 发表于 2014-2-22 19:31
照着以前的帖子讲的,
VectorLayer cityMapLayer = (VectorLayer)mapView1.GetLayerFromHandle(mapView1.S ...

1、试试VectorLayer的UpdateLegendIndexes()方法,然后再PaintLayers()。

2、不是bug,专门这么设计的,实际应用时很多图层都只是浏览一下,不需要保持为文件。

3、shapeList里只有图元信息,属性信息在属性表里,首席图层的属性表里要有站号字段(比如字段名是“ID”),要获取第一个图元的站号可以用图层的GetCellValue("ID", 1)方法

4、图层本身不保存是从什么数据生成的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-23 15:18:35 | 显示全部楼层
本帖最后由 Mc.Fish 于 2014-2-24 14:07 编辑

用UpdateLegendIndexes()就可以及时更新修改结果了。
在vectorlayer的filename中保存对应的文件的名称,在修改后立刻把修改结果写回去,就可以实现资料的更新了。
由于一个图层并不是严格对应一个文件(比如micaps3有多个数据时,就需要打开多个图层),因此只能针对自己的需要编程序将修改结果写进相应的文件。

提一个小小的建议,在MeteoInfo中有一个功能,attributeTable查看图层的属性。
这个功能是独立于MeteoInfo软件的其他功能的,建议把这个菜单功能加入到图层选择的右键菜单中,这样二次开发就不需要做这个了,另外在MeteoInfo中这样的操作也更加顺畅。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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