欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArcGIS二次开发基础教程(04):属性查询与空间查询

程序员文章站 2022-06-12 16:52:22
...

ArcGIS二次开发基础教程(04):属性查询与空间查询

属性查询

  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();
    }
    

空间查询

  1. 简单空间查询

    //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();
    	}
    }
    
  2. 空间查询高亮

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

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