arcengine动态显示所需字段值
需求:实现和GIS桌面端中Identify的类似功能,鼠标滑动的时候可以显示鼠标所在位置的要素的指定字段的值.。
主要操作流程:
①先打开一个对话框,用于选择需要显示的图层和字段名
②点击确定之后,在mapControl上鼠标滑动的时候利用axMapControl的showTips功能实现实时显示,相对于Identify,取消的点击查看属性,和只能查看所有属性的弊端。
主窗体代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls; namespace MapChuanzhi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int s_flag = 0;
private void button2_Click(object sender, EventArgs e)
{
IMap pMap = this.axMapControl1.Map;
Form2 frm2 = new Form2(pMap);
frm2.formDelegate += new FormDelegate(Display);
frm2.StartPosition = FormStartPosition.CenterScreen;
frm2.ShowDialog();
s_flag = 1;
} string LayerName = "";
List<string> FieldList = new List<string>();
public void Display(List<string> lc)
{
LayerName = lc[0].ToString();
FieldList.Clear();
for (int j = 1; j < lc.Count; j++)
{
FieldList.Add(lc[j].ToString());
}
} private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
switch (s_flag)
{
case 1:
showtips(FieldList, e);
break;
default:
break;
}
} private void showtips(List<string> index, IMapControlEvents2_OnMouseMoveEvent e)
{ StringBuilder sb = new StringBuilder();
string headd = string.Format("{0}:{1}", "图层", LayerName);
sb.AppendLine(headd);
sb.AppendLine( "————————");
for (int i = 0; i < this.axMapControl1.Map.LayerCount; i++)
{
if (axMapControl1.get_Layer(i).Name.ToString().Equals(LayerName))
{ for (int j = 0; j < index.Count; j++)
{ IFeatureLayer pFLayer = axMapControl1.Map.get_Layer(i) as IFeatureLayer;
pFLayer.DisplayField = index[j].ToString();
pFLayer.ShowTips = true;
string Text = pFLayer.get_TipText(e.mapX, e.mapY, axMapControl1.ActiveView.FullExtent.Width / 1000);
if (string.IsNullOrWhiteSpace(Text))
{
break;
}
sb.AppendLine(string.Format("{0}:{1}",index[j].ToString(),Text));
} if (sb.Length == headd.Length + "————————".Length + 4)
sb.Clear();
toolTip1.SetToolTip(axMapControl1, sb.ToString()); }
}
} }
}
属性窗口代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto; namespace MapChuanzhi
{
public delegate void FormDelegate(List<string> FormMessage);
public partial class Form2 : Form
{
private ESRI.ArcGIS.Carto.IMap pMap; public Form2( ESRI.ArcGIS.Carto.IMap pMap)
{
InitializeComponent();
// TODO: Complete member initialization
this.pMap = pMap;
} private void Form2_Load(object sender, EventArgs e)
{
for (int i = 0; i < pMap.LayerCount; i++)
{
this.comboBox1.Items.Add(pMap.get_Layer(i).Name.ToString());
}
}
string selectItems;
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
selectItems=comboBox1.SelectedItem.ToString();
for (int i = 0; i < pMap.LayerCount; i++)
{
if (pMap.get_Layer(i).Name.ToString() == selectItems)
{
IFeatureLayer pFLayer = pMap.get_Layer(i) as IFeatureLayer;
IFeatureClass pFClass = pFLayer.FeatureClass;
this.checkedListBox1.Items.Clear();
for (int j = 0; j < pFClass.Fields.FieldCount; j++)
{
this.checkedListBox1.Items.Add(pFClass.Fields.get_Field(j).Name);
}
try
{
checkedListBox1.Items.Remove("Shape");
}
catch (Exception)
{ throw;
}
}
}
} /***************窗体委托传值*********************/
public FormDelegate formDelegate;
private void button1_Click(object sender, EventArgs e)
{
if (this.checkedListBox1.CheckedItems == null || this.comboBox1.SelectedItem== null)
return;
List<string> cz = new List<string>();
cz.Add(comboBox1.SelectedItem.ToString());
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
cz.Add(checkedListBox1.CheckedItems[i].ToString());
}
try
{
cz.Remove("Shape");
}
catch
{ }
formDelegate(cz);
this.Dispose();
} private void button2_Click(object sender, EventArgs e)
{
if (this.button2.Text == "全选")
{
for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
{
this.checkedListBox1.SetItemChecked(i, true);
this.button2.Text = "取消全选";
}
}
else
{
for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
{
this.checkedListBox1.SetItemChecked(i, false);
this.button2.Text = "全选";
}
}
} }
}
arcengine动态显示所需字段值的更多相关文章
- Laravel 校验规则之字段值唯一性校验
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] laravel validator unique 'name' => 'required|unique:test,disp ...
- QGis(三)查询矢量图层的要素属性字段值(转载)
QGis(三)查询矢量图层的要素属性字段值 https://github.com/gwaldron/osgearth/issues/489 当加载一个矢量图层后,如果要查看要素的属性字段值,则需要实现 ...
- 因DataTable的字段值为DBNull引发的异常
1 问题重现 (1)新建项目DBNullExp.项目属性为"控制台应用程序": (2)在项目下新建数据集Schools(数据集文件的后缀名为.xsd): watermark/2/t ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- MSCRM CRM 获取PickList 字段值函数解决方案
表单中有很多picklist字段 不想写链接stringmap代码: 实体ID查询方法: SELECT ObjectTypeCode from Entity where name='实体名称' 调 ...
- Mysql Sql语句令某字段值等于原值加上一个字符串
MySQL连贯字符串不能利用加号(+),而利用concat. 比方在aa表的name字段前加字符'x',利用: update aa set name=concat('x',name); 替换: UPD ...
- gridView RowDataBound事件 鼠标经过行颜色变化及根据字段值显示指定内容
protected void gvBarInfo_RowDataBound(object sender, GridViewRowEventArgs e) { if ...
- SQL 按特定字段值排序
SQL 按特定字段值排序的代码,有需要的朋友可以参考下. id, name shandong01 name1 shandong02 name2 shandong03 name3 beijing01 n ...
- GridView控件RowDataBound事件中获取列字段值的几种途径 !!!
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == ...
- java 使用BeanUtils.copyProperties(Object source,Object target) 复制字段值
BeanUtils.copyProperties(person, wsPerson);把person的字段值,复制给wsPerson // 只复制两个实体中,字段名称一样的 很有用的一个功能...
随机推荐
- vue 中 watch 和 watchEffect 区别
vue 中 watch 和 watchEffect 区别 * watch 需要先指明需要侦听的数据源,watchEffect 不需要,只要传入的函数带有依赖就会自动追踪. * watchEffect ...
- VUE学习-基础(基础语法 & 模板语法)
基础语法 引入vue <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/ ...
- python实现PDF转PNG
说明 为了方便将pdf格式发票转为图片,找到以下方法,转换后的效果非常不错,特此记录在自己的笔记中,根据自己的需要,代码稍微有所优化修改 参考网址:https://zhuanlan.zhihu.com ...
- 把一个元器件的原理图分成多个Part-转载
(24条消息) [AD20]把一个元器件的原理图分成多个Part_不知道在干嘛每天的博客-CSDN博客_ad中原理图怎么分成几部分 以LM358芯片为例:把LM358原理图的A和B分开画,分成A和B两 ...
- stm32的boot0和boot1
stm32的boot0和boot1 TM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash.2)SRAM = 芯片内置的RAM区,就是内存啦.3)系统存储器 ...
- Software--EB--Project 身份验证
2018-01-09 16:57:51 身份验证服务 应该有两种形式得身份验证机制: 1. 在其他网站上又 Web 账号得顾客在注册或登陆到该网站时候应该能够使用这些账号. 2.没有的顾客或者希望新 ...
- iOS开发之实现自定义浮动操作框效果
今天有个需求是如上图实现类似微信的自定义浮动操作框效果 我自己就写了个demo,大家感兴趣的可以试试,下面是代码 VC代码如下 #import "TestCustomMenuItemVC.h ...
- 网络层-ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP ICMP报文被封闭在IP数据报中发送 封包格式 主机或路由器使用ICMP来发送差错报告报文和询问报文 差错报告报 ...
- Python从dic中随机取值
import random a = {'lab-1': '短视频', 'lab-1': '直播'} print(random.choice(list(a.keys()))) # 从keys的list中 ...
- postgresql--column must appear in the group by clause or be used in an aggregate function
我想得到大于男女平均年龄的人 原表: 在gauss200下执行以下语句: SELECT stname,age,gender,AVG(age) FROM att_test01 GROUP BY gend ...