zoukankan      html  css  js  c++  java
  • ArcEngine实现捕捉节点

    来自: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;
            }

  • 相关阅读:
    AB压力测试(Windows)
    Ensure You Are Not Adding To Global Scope in JavaScript(转)
    使用jasmine来对js进行单元测试
    HTML5安全:CORS(跨域资源共享)简介(转)
    asp.net+jquery Jsonp使用方法(转)
    在ios上时间无法parse返回 "Invalid Date"(转)
    用document.domain完美解决Ajax跨子域 (转)
    IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题
    NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename 解惑(转)
    关于反射的一些总结(转)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/3967148.html
Copyright © 2011-2022 走看看