ArcGIS二次开发基础教程(06):有关图层的基本操作

ArcGIS二次开发基础教程(06):有关图层的基本操作ArcGIS二次开发基础教程(06):有关图层的基本操作0.PageLayout和MapControl的同步voidCopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重写到pagelayout里IObjectCopycopy=newObjectCopyClass();objectfromMap=a…

大家好,又见面了,我是你们的朋友全栈君。

ArcGIS二次开发基础教程(06):有关图层的基本操作

0. PageLayout和MapControl 的同步

void CopyToPage()
   {
       //对象拷贝,把mapcontrol的地图拷贝重写到pagelayout里
       IObjectCopy copy = new ObjectCopyClass();
       object fromMap = axMapControl1.Map as Object;
       object toMap = axPageLayoutControl1.ActiveView.FocusMap as object;
       object copyMap = copy.Copy(fromMap) as object;
       copy.OverWrite(toMap,copyMap);
   }

//mapdontrol的事件
   void OnAfterScreenDraw(object sender, IMapControlEvents2_OnAfterScreenDrawEvent e)
   {
       //mapcontrol每次刷新都将显示范围设置为mapcontrol的视图
       IActiveView activeView =IPageLayoutControl1.ActiveView.FocusMap;
       IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation;
       displayTransformation.VisibleBounds = axMapControl1.Extent;
       axPageLayoutControl1.Refresh();
       CopyToPage();
   }

//mapcontrol的事件
   void OnMapReplaced(object sender, IMapControlEvents2_OnMapRepalcedEvent e)
   {
       //增添数据时调用
        CopyToPage();   
   }

1. 基本图层操作(更名,可见性,比例),矢量图层透明度,栅格图层对比度、亮度和透明度

private IFeatureLayer GetLayerByName(string name)
{
    IFeatureLayer featureLayer = null;
    for(int i=0;i<axMapControl1.LayerCount;i++)
    {
        featureLayer = axMapControl1.get_Layer(i) as IFeatureLayer;
        if(featureLayer.Name.Equals(name))
        {
            return featureLayer;
		}
	}
    return featureLayer;
}

//此处只演示操作 故属性值写死
IFeaturLayer layer = GetLayerByName("图层名称") as IFeatureLayer;
//更名
layer.Name = "新图层名称";
//可见性
layer.Visible = false;
//比例
layer.MinimumScale = 1500000;
layer.MaximumScale = 3000000;
//透明度
IFeatureEffects featureEffects = layer as IFeatureEffects;
featureEffects.Transparency = 10;
//栅格对比度、亮度和透明度
IRasterLayer rasterLayer = GetLayerByName("图层名称") as IRasterLayer;
IFeatureEffects featureEffects = rasterLayer as IFeatureEffects;
featureEffects.Contrast = 30;//对比度
featureEffects.Brightness = 50;//亮度
featureEffects.Transparency = 100;//透明度

2. 在TOCControl中右击图层名显示菜单,单击属性栏显示图层属性表

ILayer layer = null;//定义图层为全局变量
//TOCControl的点击事件
void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
{
    if(e.Button == 2)//如果是右击
    {
        //TOCControl提供了HitTest方法用来检测控件上被击中的item,参数详情可查阅帮助文档
        IBasicMap basicMap = new MapClass();
        //用来存储被击中的图层
        layer = new FeatureLayerClass();
        object other = new object();
        object index = new object();
        esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
        axTOCControl1.HitTest(e.x, e.y, ref utem, ref layer, ref other, ref index);
        if(item == esriTOCControlItem.esriTOCControlItemLayer)
        {
            //ContextMenuStrip控件 在右键对应位置显示
            contextMenuStrip1.Show(axTOCContorl,new System.Drawing.Point(e.x, e.y));
        }
	}
}
//图层菜单的属性栏点击事件
void attributeToolStripMenuItem_Click(object sender, EventArgs e)
{
    //Attribute是我新建的窗体,构造函数用点击的图层作为参数
    Attribute attribute = new Attribute(layer);
    attribute.Show();
}
//以下是Attribute窗体中的代码
private ILayer myLayer;
public Attribute(ILayer layer)
{
    InitializeComponent();
    myLayer = layer;
}
//Attribute窗体的load事件,当窗体加载的时候把属性表显示出来
private void Attribute_Load(object sender, EventArgs e)
{
    //建表
    DataTable dt = new DataTable();
    DataColumn dc;
    //按表属性字段添加列
    for(int i=0;i<feature.Fields.FieldCount;i++)
    {
     	string name = feature.Fields.get_Field(i).Name;
        dc = new DataColumn(name);
        dc.Columns.Add(dc);
    }
    //用要素类的查询方法,获取要素指示光标(要素的遍历是通过指示光标来完成的)
    //设置查询条件为null,第二个参数True表示要素属性不可更改
    IFeatureLayer featureLayer = myLayer as IFeatureLayer;
    IFeatureCursor cursor = featureLayer.FeatureClass.Search(null,true);
    IFeature feature = cursor.Next();
    while(feature!=null)
    {
        DataRow dr = dt.NewRow();//获取表样式的行
        for(int i=0;i<feature.Fields.FieldCount;i++)
        {
            //Shape属性需匹配类型再赋值
            if(feature.get_Value(i).Name.Equals("Shape"))
            {
                switch(feature.Shape.GeometryType)
                {
                    case esriGeometryType.esriGeometryPoint:
                        dr[i] = "Point";
                        break;
                    case esriGeometryType.esriGeometryLine:
                        dr[i] = "Line";
                        break;
                    case esriGeometryType.esriGeometryPolygon:
                        dr[i] = "Polygon";
                        break;
                    case esriGeometryType.esriGeometryPolyline:
                        dr[i] = "Polyline";
                        break;
                    default:
                        dr[i] = "Other";
                        break;
                }
                continue;
            }
            //其他属性直接赋值
            dr[i] = feature.get_Value(i).ToString();
        }
        dt.Rows.Add(dr);
        feature = cursor.Next();
    }
    //用一个DataGridView控件显示表,设置数据源为上面建的表
    dataGridView1.DataSource = dt;
}

历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SNMPWALK 命令「建议收藏」

    SNMPWALK 命令「建议收藏」SNMPWALK是一个通过SNMPGET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。命令行:snmpwalk[选项]agent[oid]选项参数:由于SNMP协议中,不同的协议版本存在不同的参数选项,以下参数按协议分开说明。1.   普通选项a)   –h   显示帮助b)   –v1|2c|3

    2022年6月16日
    35
  • 免备案cdn_cdn贝安装

    免备案cdn_cdn贝安装免备案CDN,符码CDN应该是使用CDN贝搭建,该CDN系统相对来说比较成熟,功能支持比较丰富。今天对符码免备案CDN进行简单的测试,仅供大家参考。首先,就是简单粗暴的多地区PING大法,简单看下CDN延迟效果:如果要是对比那么多免备案CDN延迟来说,符码CDN平均可以做到45ms的延迟,无疑是测试的所有免备案CDN中多地区PING平均延迟最小的一个,甚至一些国内CDN也达不到这个低延迟效果,延迟…

    2022年9月3日
    2
  • 前端游戏巨制! CSS居然可以做3D游戏了

    前端游戏巨制! CSS居然可以做3D游戏了前言偶然接触到CSS的3D属性,就萌生了一种做3D游戏的想法.了解过css3D属性的同学应该都了解过perspective、perspective-origin、transform-st…

    2022年5月7日
    53
  • C++版OpenCV使用支持向量机svm进行mnist手写数字识别

    C++版OpenCV使用支持向量机svm进行mnist手写数字识别支持向量机svm也是一种机器学习算法,采用空间超平面进行数据分割,在这篇博客中我们将使用svm进行手写数字的识别,使用该算法,识别率可以达到100%。环境准备:vs2015OpenCV4.5.0下面的代码为svm模型训练代码:#include<iostream>#include<opencv.hpp>#include<string>#include<fstream>usingnamespacestd;usingnamespace

    2022年9月14日
    0
  • IDEA(Jetbrains系列,pycharm,goland…)翻译插件推荐Translation 安装和使用以及快捷键绑定…

    IDEA(Jetbrains系列,pycharm,goland…)翻译插件推荐Translation 安装和使用以及快捷键绑定…首先第一步是安装该插件如图:File->setting–>plugins进入该页面,点击如图所示按钮.然后搜索Translation如图:我们需要的结果一般都不会排在前面,需要往下拉再找找,名字应当也是Translation,我这边已经安装了所以没有这个图标,找到Translation插件以后,就可以点击Install就可以…

    2022年8月28日
    3
  • xshell安装步骤_Xshell怎么使用

    xshell安装步骤_Xshell怎么使用XShell可以在Windows界面下来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。它支持RLOGIN、SFTP、SERIAL、TELNET、SSH2和SSH1,可以非常方便的对Linux主机进行远程管理。除此之外,其还有丰富的外观配色方案以及样式选择。Xshell免费版官网下载地址https//www.xshell.com/zh/free-for-home-school/链接https//pan.baidu.com/s/1NJGWZHkByakOkQpKfkc7Yg。…

    2022年9月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号