我的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) 编辑 收藏 举报