zoukankan      html  css  js  c++  java
  • arcgis engine计算点到线的最短距离

    IProximityOperator接口用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离离给定点最近的点。IProximityOperator接口的主要方法有:QueryNearesPoint,ReturnDistance, ReturnNearestPoint
    ReturnDistance方法用于返回两个几何对象间的最短距离,QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点

    1. IMap pMap = axMapControl1.Map;
    2.            ILayer pLayer = null;
    3.            IPoint po=null;
    4.            IPolyline pl=null;
    5.            IFeatureLayer featurelayer=null;
    6.            IFeatureClass featureclass = null;
    7.            IGraphicsContainer gra;
    8.            IElement ptele;
    9.            IPointCollection lineptcol;
    10.            gra = axMapControl1.Map as IGraphicsContainer;
    11.            lineptcol = new PolylineClass();
    12.            for (int i = 0; i < pMap.LayerCount; i++)
    13.            {
    14.                pLayer = pMap.get_Layer(i);
    15.                 featurelayer = pLayer as IFeatureLayer;
    16.                 featureclass = featurelayer.FeatureClass;
    17.                IFeature feature = featureclass.GetFeature(0);
    18.  
    19.                if (feature.Shape is IPoint)
    20.                {
    21.                    po = feature.Shape as IPoint;
    22.                }
    23.                else {
    24.                     pl = feature.Shape as IPolyline;
    25.                }
    26.                //MessageBox.Show("qqqq");
    27.            }
    28.  
    29.            double dis = GetTwoGeometryDistance(po, pl);
    30.            IPoint po2 = NearestPoint(po, pl);
    31.            object a = Type.Missing;
    32.            lineptcol.AddPoint(po, ref a, ref a);
    33.            lineptcol.AddPoint(po2, ref a, ref a);
    34.            IElement lineele = new LineElementClass();
    35.            IPolyline pline = new PolylineClass();
    36.            pline = lineptcol as IPolyline;
    37.            lineele.Geometry = pline as IGeometry;
    38.            gra.AddElement(lineele, 0);
    39.            axMapControl1.Refresh();
    40.            MessageBox.Show(dis.ToString());

    计算几何图形之间的距离

    1. public double GetTwoGeometryDistance(IGeometry pGeometryA, IGeometry pGeometryB)
    2.         {
    3.             IProximityOperator pProOperator = pGeometryA as IProximityOperator;
    4.             if (pGeometryA != null || pGeometryB != null)
    5.             {
    6.                 double distance = pProOperator.ReturnDistance(pGeometryB);
    7.                 return distance;
    8.             }
    9.             else
    10.             {
    11.                 return 0;
    12.             }
    13.         }

    离给定的几何图形最近的点

    1. //离给定的几何图形最近的点
    2.         public IPoint NearestPoint(IPoint pInputPoint, IGeometry pGeometry)
    3.         {
    4.             try
    5.             {
    6.                 IProximityOperator pProximity = (IProximityOperator)pGeometry;
    7.                 IPoint pNearestPoint = pProximity.ReturnNearestPoint(pInputPoint, esriSegmentExtension.esriNoExtension);
    8.                 return pNearestPoint;
    9.             }
    10.             catch (Exception Err)
    11.             {
    12.                 MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    13.                 return null;
    14.             }
    15.         }

    计算出来最近的点,然后和初始的那个点连成一个线,也就做出了直线的中垂线

  • 相关阅读:
    未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序解决办法
    禁止复制 + 锁右键 + 禁止全选(兼容IE Chrome等)
    Oracle面试题
    SQL面试题
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 16: invalid start byte
    Python3 迭代器与生成器
    Python3 循环_break和continue语句及循环中的else子句
    Python3 编程第一步_关键字end
    Python3 编程第一步_斐波纳契数列_连续赋值
    Linux系统管理_主题02 :管好文件(1)_2.4 链接文件_ln
  • 原文地址:https://www.cnblogs.com/wangyawei/p/9006072.html
Copyright © 2011-2022 走看看