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 // 只复制两个实体中,字段名称一样的 很有用的一个功能...
随机推荐
- docker持久化数据存储
一.把数据存储到本地/opt/data目录下面,容器挂载到/data目录下面 [root@docker-1 ~]# docker run -itd --name www -v /opt/data:/d ...
- Jenkins自动化部署nodejs项目(前端项目)
1.安装nodejs插件 2.Linux系统安装nodejs (1)去nodejs官网下载最新包 https://nodejs.org/dist/latest/ (2)解压安装 tar xvzf no ...
- 牛客 二叉树中和为某一值的路径 【时间19ms】【内存9560k】
https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca 构造函数:new ArrayList(al)把al的所有值复制到 ...
- React中使用CSS的N种方式
1.在组件中直接使用style,注意,div1各个属性值加双引号 const div1 = { width: "300px", margin: "30px auto&qu ...
- vue-cli打包后运行报路径错误 不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错
不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错 解决方法 新建一个 vue.config.js module.exports = { publicPath: './', config ...
- 循环3-while语法
一.介绍和语法 1. while循环方式 while循环语句会对紧跟在while命令后的条件表达式进行判断,如果该表达式成立,则执行while循环里面的命令或语句,每一次执行到done时,会重新判断w ...
- pytorch学习笔记(4)--dataloader
batch_size:有多少张 shuffle=True:顺序不打乱 num_workers: 进程数 drop_last:最后不够64张是否舍去 import torchvision from to ...
- Flink Heartbeat of TaskManager和Heartbeat of ResourceManager timed out问题
最近上了个Flink任务,运行一段时间后就自动停止了,很是郁闷,查看最后一个chekpoint时间点,翻看时间日志 2019-12-13 07:25:24.566 flink [flink-akka. ...
- CSS边框(实线、虚线、破折号)
1.CSS边框 border:1px solid red; /*实线*/ border:1px dotted red; /*虚线*/ border:1px dashed red; /*破折号*/
- linux命令关机和重启命令及文件查找管道符用法linux grep
关机和重启命令 Shutdown Reboot Halt poweroff grep和管道符 昨天的时候 leader 给我出了道问题: 找出文件夹下包含 "aaa" 同时不包含 ...