SPARK-WANG

导航

我的ArcGIS Identify工具

ArcMap自带的Identify工具雷死人了,还没怎么着,就先蹦出一窗体来。要想在地图上Identify,得先把这个窗体先移到一边去,然后才能点选或拉框选择要Identify的要素。于是就想自个写一个自定义的Identify,要求如下:

1.去掉要素属性信息中的AO系统字段值,如FID,Area,SHAPE等,最终用户谁晓得那些东西干吗的呀;

2.查找只对可见图层,至于全部图层我在想,看都看不见的图层要素有那个傻人在那点击或拉框选择查询啊;

3.要素属性信息不但可以浏览,而且还能直接修改,简化操作步骤。

UI如下:

 

 

   以前AO的sample中有一个VB的代码,但那个东东使用的是最近点查找,比起ArcMap自带的Identify无论功能还是表现方式还是要差很多。研究了下Identify接口,发现92现在已经可以用来完成这个任务了,我记得91前好像还不行的。很久没动手写代码了,调试花了我一晚上的时间,搞得今天晕头晕脑的,把中间的一些注意事项总结下贴出来供大家参考吧。

1.出现“正试图在 os 加载程序锁内执行托管代码”的错误,程序无法编译执行。

  问题:调试状态参数设置

  解决办法:vs2005菜单的 调试->异常->Managed Debugging Assistants->LoaderLock 的选中状态去掉即可。

2.ITOOL工具编译后无法在ArcGIS Engine ToolbarControl中Add In成功,查了好几遍代码都不知道问题出在哪里。

  问题:m_bitmap = new System.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(GetType(), "SparkIdentify.bmp"));而BitMap资源文件生成操作使用了“内容”,这样上面的代码就会有问题。

  解决办法:将所有的资源生成操作改为“嵌入的资源”。

3.创建DataGridView视图时,如何避免出现第一个出现的空白列。

  问题: //定义dgvConnInfo列表题名称
            tdtAttInfo.Columns.Add(getNewColumn("字段名", "System.String"));
            tdtAttInfo.Columns.Add(getNewColumn("字段值", "System.String"));

            和数据网格视图控件关联后,总会出现第一列为空白列。

  解决办法:

            //定义dgvConnInfo列表题名称
            tdtAttInfo.Columns.Add(getNewColumn("字段名", "System.String"));
            tdtAttInfo.Columns.Add(getNewColumn("字段值", "System.String"));
                    
            dgvAttribute.ColumnCount = 2;
        
    dgvAttribute.DataSource = tdtAttInfo;

            for (int i = 0; i < 2; i++)
            {
                dgvAttribute.Columns[i].Visible = false;
            }

            //设置字段名列为只读
            dgvAttribute.Columns["字段名"].DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
            dgvAttribute.Columns["字段名"].ReadOnly = true;  

以上初始化代码放在Form_Load事件中生效。

4.对于属性信息的修改保存,一直pFeature.Set_Value和pFeature.Save进行保存。

有需要源代码的朋友可留EMAIL给我。

 

posted on 2008-11-06 21:06  sparkwang  阅读(6877)  评论(17编辑  收藏  举报