arcengine获取图层要素_Arcengine 实现要素选取的方法(转载)

private double ConvertPixelsToMapUnits(IActiveView pActiveView, doublepixelUnits)

{//Uses the ratio of the size of the map in pixels to map units to do the conversion

IPoint p1 =pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;

IPoint p2=pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;intx1, x2, y1, y2;

pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1,out x1, outy1);

pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2,out x2, outy2);double pixelExtent = x2 -x1;double realWorldDisplayExtent =pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;double sizeOfOnePixel = realWorldDisplayExtent /pixelExtent;return pixelUnits *sizeOfOnePixel;

}

IMap pMap=axMapControl1.Map;

IActiveView pActiveView= pMap asIActiveView;

IFeatureLayer pFeatureLayer= pMap.get_Layer(0) asIFeatureLayer;

IFeatureClass pFeatureClass=pFeatureLayer.FeatureClass;//设置点击点的位置

IPoint point =pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);

ITopologicalOperator pTOpo= point asITopologicalOperator;doublelength;

length= ConvertPixelsToMapUnits(pActiveView, 4);

IGeometry pBuffer=pTOpo.Buffer(length);

IGeometry pGeomentry=pBuffer.Envelope;//空间滤过器

ISpatialFilter pSpatialFilter = newSpatialFilterClass();

pSpatialFilter.Geometry=pGeomentry;//根据被选择要素的不同,设置不同的空间滤过关系

switch(pFeatureClass.ShapeType)

{caseesriGeometryType.esriGeometryPoint:

pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;break;caseesriGeometryType.esriGeometryPolyline:

pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;break;caseesriGeometryType.esriGeometryPolygon :

pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;break;

}

IFeatureSelection pFSelection=pFeatureLayer asIFeatureSelection;

pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);

ISelectionSet pSelectionset=pFSelection.SelectionSet;

ICursor pCursor;

pSelectionset.Search(null,true,outpCursor);

IFeatureCursor pFeatCursor=pCursor asIFeatureCursor;

IFeature pFeature=pFeatCursor.NextFeature();while(pFeature!=null)

{

pMap.SelectFeature(pFeatureLayer,pFeature);

pFeature=pFeatCursor.NextFeature();

}

pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);//另外的改写:

pSpatialFilter.GeometryField =pFeatureClass.ShapeFieldName;

IQueryFilter pFilter=pSpatialFilter;

IFeatureCursor pFeatCursor= pFeatureLayer.Search(pFilter,false);

IFeature pFeature=pFeatCursor.NextFeature();while(pFeature!=null)

{

pMap.SelectFeature(pFeatureLayer,pFeature); pFeature=pFeatCursor.NextFeature();

} pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值