ArcEngine实现捕捉节点

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

View PostArcEngine实现捕捉节点来自:http://blog.sina.com.cn/s/blog_4d0b75870100o960.html

//获取最近的结点,然后在OnMouseMove中显示

//pnt:鼠标移动点

//mapSize:设置的地理范围

public static ipoint GetNearestVertex(IActiveView actview, IPoint pnt, double mapSize){IPoint vetex = null;IPoint hitPnt=new PointClass();IHitTest hitTest = null;IPointCollection pntColl =new MultipointClass();IPRoximityOperator prox= null;double hitdis=0;int hitpartindex=0,hitsegindex=0;Boolean rside = false;IFeatureCache2 featCache = new FeatureCacheClass();double pixelSize = ConvertMapUnitsToPixels(actview, mapSize);//将地理范围转化为像素featCache.Initialize(pnt, pixelSize);//初始化缓存for (int i = 0; i < actview.FocusMap.LayerCount; i++){

//只有点、线、面并且可视的图层才加入缓存IFeatureLayer featLayer =(IFeatureLayer) actview.FocusMap.get_Layer(i);if (featLayer != null && featLayer.Visible == true &&(featLayer.FeatureClass.ShapeType==esriGeometryType.esriGeometryPolyline ||featLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon ||featLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)){featCache.AddFeatures(featLayer.FeatureClass, null);for (int j = 0; j < featCache.Count; j++){IFeature feat = featCache.get_Feature(j);hitTest =(IHitTest ) feat.Shape;

//捕捉节点,另外可以设置esriGeometryHitPartType,捕捉边线点,中间点等。if (hitTest.HitTest(pnt, mapSize, esriGeometryHitPartType.esriGeometryPartVertex, hitPnt, ref hitdis, ref hitpartindex, ref hitsegindex, ref rside)){object obj=Type.Missing ;pntColl.AddPoint(hitPnt,ref obj,ref obj);break;}}}}prox =(IProximityOperator)pnt;double minDis=0, dis=0;for (int i = 0; i < pntColl.PointCount; i++){IPoint tmpPnt=pntColl.get_Point(i);dis= prox.ReturnDistance(tmpPnt);if (i == 0){minDis = dis;vetex = tmpPnt;}else{if (dis < minDis){minDis = dis;vetex = tmpPnt;}}}return vetex;}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航