zoukankan      html  css  js  c++  java
  • AE 判断点是否在面内

     1         /// <summary>
     2         /// 根据面要素的ID获取面,判断点是否在面内
     3         /// </summary>
     4         /// <param name="point">要判断的点,射线的起点</param>
     5         /// <param name="ID">面的ID</param>
     6         /// <param name="pFeatureLayer">面要素所在的图层</param>
     7         /// <returns></returns>
     8         private bool PointIsInPolygon(IPoint point, int ID, IFeatureLayer pFeatureLayer)
     9         {
    10             IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
    11             IPolygon pPolygon = (pFeatureClass.GetFeature(ID)).Shape as IPolygon;
    12             //与多边形的最大最小XY值比较
    13             IEnvelope pEnvelope = new EnvelopeClass();
    14             pEnvelope = pPolygon.Envelope;
    15             if(point.X<pEnvelope.XMin||point.X>pEnvelope.XMax||point.Y<pEnvelope.YMin||point.Y>pEnvelope.YMax)
    16                 return false;
    17             //如果在这个范围内,向左作射线,根据线与面的拓扑判断交点个数
    18             try {
    19                 IPoint toPoint = new PointClass();
    20                 toPoint.PutCoords(getXminValue(pPolygon) - 20.00000000, point.Y);
    21                 IPolyline pLine = new PolylineClass();//定义射线
    22                 pLine.ToPoint = toPoint;
    23                 pLine.FromPoint = point;
    24 
    25                 ITopologicalOperator pTopo = pPolygon as ITopologicalOperator;
    26                 IGeometryCollection pGeoCol = pTopo.Intersect((IGeometry)pLine, esriGeometryDimension.esriGeometry0Dimension) as IGeometryCollection;
    27                 IPointCollection pPointCol = pGeoCol as IPointCollection;
    28                 if ((pPointCol.PointCount) % 2 == 0)
    29                 {
    30                     return false;
    31                 }
    32                 else
    33                 {
    34                     return true;
    35                 }
    36                 
    37             }
    38             catch (Exception ee)
    39             {
    40                 MessageBox.Show(ee.Message);
    41                 return false;
    42             }
    43         }
    44         /// <summary>
    45         /// 获取polygon的X最小值
    46         /// </summary>
    47         /// <param name="pPolygon"></param>
    48         /// <returns></returns>
    49         private double getXminValue(IPolygon pPolygon)
    50         {
    51             IPointCollection pPointCollection = pPolygon as IPointCollection;
    52             int n = pPointCollection.PointCount;
    53             double[] coordx = new double[n];
    54             for (int i = 0; i < n; i++)
    55             {
    56                 IPoint point = pPointCollection.get_Point(i);
    57                 coordx[i] = point.X;
    58             }
    59             System.Array.Sort(coordx);
    60             return coordx[0];
    61         }    
  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/xiaominmin54/p/4231749.html
Copyright © 2011-2022 走看看