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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 罗技 mk275 键盘不能输入的解决方案「建议收藏」

    罗技 mk275 键盘不能输入的解决方案「建议收藏」罗技mk275键盘不能输入的解决方案今天隔壁办公室的同事的电脑突然不能输入,初步怀疑是键盘的问题,赶紧换套键盘,它就是罗技mk275!!!拆掉包装,上电池,把接收器插上,发现问题鼠标可以用~回车键可以用~就是字母键没有反应!!!赶紧百度,发现是驱动的问题,按照教程更新键盘驱动。还不行,键盘没有反应……键盘不会是坏的吧,得赶紧退货!!!不,还有两套新键盘没有…

    2022年10月15日
    0
  • 电机的力矩、转速和功率「建议收藏」

    电机的力矩、转速和功率「建议收藏」转载来源:[JACK]《电机的力矩、转速和功率》大学电机学这门课程的时候,往往是从电磁场的相互转换关系开始学起,然后会分析很多很多的向量图及等值电路,把人弄得晕晕乎乎。工作当中从事电机的控制的时候,更多的则是实现上一些前人已经做好了的成熟算法。(比如到底选择FOC还是直接转矩?怎样选择合理的弱磁算法?怎样减小力矩纹波?)在工作过程中慢慢地就把一些基础的理论知识当成了大家都约定俗成的定量,…

    2022年5月14日
    58
  • navicat激活码最新【2021最新】

    (navicat激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~TR…

    2022年3月22日
    95
  • 电视液晶屏好坏测试工具(分辨率4k测试工具)

    原标题:如何检测电视屏幕真伪4K、坏点漏光?两款工具一键辨别!现在的智能电视屏幕越大越薄,且许多品牌的电视都打着4K屏幕的旗号,但你真的买对电视了吗?对于大屏智能电视来说,屏幕真的很重要,在选购需要必须确定电视屏幕无坏点漏光现象,非伪4K电视屏。今天当贝市场小编分享的这两款工具,能一键辨别电视屏幕真伪4K,是否有坏点漏光等现象。1、屏幕大师屏幕大师专为智能电视及网络机顶盒设备打造,提供了包括色…

    2022年4月16日
    299
  • idea2019激活教程,永久激活,一次性搞定!(必看)

    idea2019激活教程,永久激活,一次性搞定!(必看) 此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 此教程已支持最新2019.2版本 永久激活方法 1.下载jar包 点击链接 网盘链接:pan.baidu.com/……

    2022年3月13日
    78
  • PyCharm的配置(背景颜色+字体大小+行号+解释器选择等)

    PyCharm的配置(背景颜色+字体大小+行号+解释器选择等)我的第二篇博客,上一篇是PyCharm安装过程,下面讲解PyCharm的配置。第一:配置PyCharm的背景。打开PyCharm开发环境,使用快捷键Ctrl+"`"(该键位于键盘的左上角,和”~“同一个键位),即可出现下图配置选项。colorScheme:配置背景颜色(有白色,黑色等)codestylescheme:默认为defaultKeymap:快捷键配置,依个人习惯而定Vie…

    2022年6月20日
    24

发表回复

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

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