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

相关推荐

  • notify()和 notifyAll()有什么区别_notify怎么记忆

    notify()和 notifyAll()有什么区别_notify怎么记忆今天看到一篇问题,提问线程唤醒顺序。具体代码如下:importjava.util.LinkedList;importjava.util.List;publicclassThreadRunSort{/***对象锁*/privatefinalObjectobject=newObject();p…

    2022年9月7日
  • php视频地址隐藏,简单隐藏加密视频地址,以防止用户下载[通俗易懂]

    简单隐藏加密视频地址,以防止用户下载,采用js调用播放器:引用js文件:language=”javascript”type=”text/javascript”>//JScript文件functionselplay(ypurl){document.write(“classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95height=69id=Med…

    2022年4月10日
  • windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

    windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue这三个函数主要用来提升进程的权限1OpenProcessToken()函数:获取进程的令牌句柄OpenProcessToken的原型.BOOLWINAPIOpenProcessToken(__inHANDLEProcessHandle,__inDWORDDesiredAccess,__outPHA

    2022年6月25日
  • 头歌实训平台c语言答案_c语言实训报告实训内容

    头歌实训平台c语言答案_c语言实训报告实训内容目录C语言程序设计编辑与调试环境第1关打印输出HelloWorld第2关打印输出图形第3关求3个数的最大值第4关熟悉C语言调试过程顺序结构程序设计第1关加法运算第2关不使用第3个变量,实现两个数的对调第3关用宏定义常量第4关数字分离第5关计算总成绩和平均成绩第6关求三角形的面积第7关立体几何计算题第8关计算两个正整数的最大公约数选择结构程序设计第1关排序第2关选择结构-闰年判断第3关选择结构-分段函数问题第4关学生成绩等级换算

    2022年9月15日
  • matlab自带的插值函数interp1的几种插值方法

    matlab自带的插值函数interp1的几种插值方法插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    假设我们已知坐标(x0,y0)与…

    2022年6月13日
  • 服务器资源监控工具—nmon

    服务器资源监控工具—nmon      在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的。对于监控服务器资源的工具nmon是最好不过了。      nmon不仅可以监控内存使用情况、磁盘适配器、文件系统中的可用空间、CPU使用率、页面空间和页面速度、异步I/O(仅适用于AIX)、网络文件系统(NFS)、磁盘I/O速度和读写比率、服务器详细信息和资源、内核统计信息、消耗资源进程、运行队列信息等。而且它资源…

    2022年5月12日

发表回复

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

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