ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询ArcGIS二次开发基础教程(07):有关字段的操作和简单属性及空间查询属性字段的添加、删除和查找IFeatureLayerGetLayerByName(stringname){ILayerlayer=null;for(inti=0;i<axMapConTrol1.LayerCount;i++){layer=axMapC…

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

ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

属性

字段的添加、删除和查找

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

IFeatureLayer featureLayer = GetLayerByName("图层名") as IFeatureLayer;
IFeatureClass featrueClass = featureLayer.Feature;
//添加字段
IFieldEdit fieldEdit = new FieldClass() as IFieldEdit;
fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
fieldEdit.Name_2 = "字段名";
//还可设置字段的其他属性
featureClass.AddField(fieldEdit as IField);
//删除字段
IFields fields = featureClass.Fields;
  //查找字段
IField field = fields.get_Field(fields.FindField("字段名"));
featureClass.DeleteField(field);

查询

1. 简单条件查询

IFeatureLayer featureLayer = GetLaerByName("图层名称");
IFeatureClass featureLayer = featureLayer.FeatureClass;
//查询条件
IQueryFilter queryFilter = new QueryFilterClass();
//sql语句的Where部分
queryFilter.WhereClause = "FID = 1";
//Search方法第一个参数为查询条件,为null获得所有要素
//为IQueryFilter是属性查询,为ISpatialFilter则是空间查询
//第二个参数为true表示不能更改属性
//返回指示要素的光标
IFeatureCursor cursor = featureClass.Search(queryFilter,true);
IFeature feature = cursor.NextFeature();
//通过while循环遍历所的要素
while(feature != null)
{
    //....一些操作
    feature = cursor.NextFeature();
}

2. 选择要素高亮显示

IFeatureLayer featureLayer = GetLayerByname("图层名称");
IFeatureSelection featureSelection = featureLayer as IFeatureSelection;
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "FID = 1";
//第一个参数同上,第二个参数表示如何将选中的元素添加进元素集,第三个参数表示是否只选一个
//选中元素将自动高亮显示
featureSelection.SelectFeatures(queryFilter,esriSelectionResultEnum.esriSelectionResultAddNew,false);
ISelectionSet selectionSet = featureSelection.SelectionSet;
//通过id遍历选中要素
IEnumIDs ids = selectionSet.IDs;
long id = ids.Next();
if(id != -1)
{
    //通过id获得要素
    IFeature feature = featureLayer.FeatureClass.GetFeature(id);
    //...一些操作
    id = ids.Next();
}

3. 简单空间查询

//mapcontrol的点击事件 实现用鼠标在地图画出矩形 然后查询图层中与矩形相交的要素
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
 //清除选中要素
    axMapControl1.Map.ClearSelection();
	IFeatureLayer featureLayer = GetLayerByName("图层名称");
	IFeatureClass featureClass = featureLayer.FeatureClass();
	ISpatialFilter spatialFilter = new SpatialFilterClass();
    //获取在地图上画出的矩形
	IEnvelop env = axMapControl1.TrackRectangle;
    //设置查询参数
	spatialFilter.Geometry = enc as IGeometry;//查询几何体
    //查询的空间参考类型 此处是相交
    spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
    //第一个参数是ISpatialFilter 是空间查询
    IFeatureCursor cursor = featureCLass.Search(spatialFilter,true);
    IFeature feature = cursor.NextFeature();
	//通过while循环遍历所的要素
	while(feature != null)
	{
    	//....一些操作
    	feature = cursor.NextFeature();
	}
}

4. 空间查询高亮

//有两种方式使查询结果高亮,各有各的特点
//其一跟上面介绍的属性查询高亮一样,将SelectFeature方法的第一个参数换为ISpatialFilter即可
//这种方法可以得到查询要素集但比方法二复杂
//其二如下  这种更简单 但得不到选中要素集  根据不同情况使用
//参数一为查询几何体,参数二为查询包络线
axMapControl1.Map.SelectByShape(geometry, null, true);//第三个参数为是否只选中一个
//选中要素高亮显示
axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); 

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

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163459.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 文本聚类简单实现_文本聚类分析

    文本聚类简单实现_文本聚类分析引用:CoreConcepts—gensim<<自然语言处理入门>>一、简介文本聚类(textclustering,也称文档聚类或documentclustering)指的是对文档进行的聚类分析,被广泛用于文本挖掘和信息检索领域。最初文本聚类仅用于文本归档,后来人们又挖掘出了许多新用途,比如改善搜索结果、生成同义词,等等。在文本的预处理中,聚类同样可以发挥作用比如在标注语料之前,通常需要从…

    2022年10月29日
  • laravel框架手机发送验证码

    laravel框架手机发送验证码

    2021年10月25日
  • mapminmax 用法

    mapminmax 用法mapminmax是MATLAB实现归一化的工具包,默认:(1)将矩阵的每行分别进行归一化;(2)每行的最大值最小值作为每行归一化的xmin和xmax;(3)将数据归一化到[-1,1].若要将数据归一化到0到1之间,即y∈[0,1],使用b=mapminmax(a,0,1);若给与确定的最大值和最小值作为每行的xmin和xmax,使用:b= mapminmax(a,0,1);PS.xmin…

  • linux 更改文件读写权限_如何查看自己文件的权限

    linux 更改文件读写权限_如何查看自己文件的权限整理下Linux文件权限相关知识一、查看文件夹或文件的可读可写权限:ls-l文件夹解析“drwxrwxrwx”,这个权限说明一共10位。第一位代表文件类型,有两个数值:“d”和“-”,“d”代表目录,“-”代表非目录。后面9位可以拆分为3组来看,分别对应不同用户,2-4位代表所有者user的权限说明,5-7位代表组群group的权限说明,8-10位代表其他人

  • H2数据库集群_数据库集群搭建

    H2数据库集群_数据库集群搭建H2数据库集群1.H2数据库简介1.1H2数据库优势常用的开源数据库:H2,Derby,HSQLDB,MySQL,PostgreSQL。其中H2,HSQLDB类似,十分适合作为嵌入式数据库使用,其它的数据库大部分都需要安装独立的客户端和服务器端。H2的优势:1、h2采用纯Java编写,因此不受平台的限制。2、h2只有一个jar文件,十分适合作为嵌入式数据库试用。3、性能和功能的优

    2022年10月12日
  • AvalonDock学习总结

    AvalonDock学习总结介绍:借助AvalonDock可以开发出类似于VS2010的软件界面,实现可停靠布局。使用时需要Nugit中下载Extended.wpf.toolkit插件.在Xaml中需要应用命名空间xmlns:avalon=”http://schemas.xceed.com/wpf/xaml/avalondock”AvalonDock库提供了一些基本的类。DockingManger:管理停靠类。DockingManger中只允许包含一个LayoutRoot类DockingM…

发表回复

您的电子邮箱地址不会被公开。

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