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         }    
时间: 2024-10-25 04:43:51

AE 判断点是否在面内的相关文章

判断点是否在多边形内

有一个n边形,顶点为p1,p2,...,pn;给定一个已知点p,判断p在此多边形内还是外. 预备知识: 两线段相交的定义,如果一条线段的两端分别处在另一条线段的两端,则此两线段相交 判断2点在线段的两侧可以用向量的叉乘实现! 基本步骤: 1,过p点垂直向上作一条射线 2,判断此射线与n边形n条边的交点 3,把所有交点相加,如果是奇数则说明在多边形内,否则在多边形外 思路非常的简单,另外说明一下几种特殊的情况: 1,射线与多边形的顶点相交:比如射线过多边形的Pi点,则如果Pi-1和Pi+1在此射线

C# 判断点是否在多边形内

/// <summary>/// 判断点是否在多边形内/// </summary>/// <param name="pnt">点</param>/// <param name="pntlist">区域的点集</param>/// <returns></returns>public static bool PointInFeaces(PointF pnt, List<

百度地图 判断marker是否在多边形内

昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 百度地图API覆盖物多边形类 http://developer.baidu.com/map/reference/index.php?title=Class:%E8%A6%86%E7%9B%96%E7%89%A9%E7%B1%BB/Polygon http://developer.baidu.com/map/reference/index.php?title=Class:%E8%A6%86%E7%9B%96%

判断对象是否在视线内

// Cast a sphere with the desired distance. Check each collider hit to see if it is within the field of view. Set objectFound // to the object that is most directly in front of the agent /// <summary> /// Withins the sight. /// </summary> ///

poj1584——判断凸包,判断点是否在多边形内

poj1584——判断凸包,判断点是否在多边形内 A Round Peg in a Ground Hole Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5441   Accepted: 1729 Description The DIY Furniture company specializes in assemble-it-yourself furniture kits. Typically, the pieces o

js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内

/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对象 */ function dateParse(dateString){ var SEPARATOR_BAR = "-"; var SEPARATOR_SLASH = "/"; var SEPARATOR_DOT = "."; var dateArr

判断点是否在凸多边形内

判断点是否在凸多边形内的方法很多,此处仅给出使用向量叉积判断点是否在凸多边形内的方法. 以下图为例说明问题: 原则: 1. 将多边形的第i条边的第一个顶点指向点P得到向量 v1,然后将从第一个顶点指向第二个顶点得到向量v2,叉乘这两个向量. 2.如果叉乘结果与上一条边的叉乘结果的乘积大于0则继续执行,如果乘积小于0,表示点P不在凸多边形内,直接返回即可. 要点:要求凸多边形的点以固定的顺序给出,例如固定为逆时针或顺时针. 实现的代码如下: struct Point { float x; floa

百度地图API 判断点是否在圆形内

/** * @fileoverview GeoUtils类提供若干几何算法,用来帮助用户判断点与矩形. * 圆形.多边形线.多边形面的关系,并提供计算折线长度和多边形的面积的公式. * 主入口类是<a href="symbols/BMapLib.GeoUtils.html">GeoUtils</a>, * 基于Baidu Map API 1.2. * * @author Baidu Map Api Group * @version 1.2 */ /** * @n

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd