/// <summary> /// 三点夹角的判定条件,输出为满足条件的成员的ID所组成的ID数组 /// </summary> /// <param name="aFeat"></param> /// <returns></returns> private static OSGeo.OGR.Geometry JID(Point[] aFeat, double userSet, int seleTime) { List <Point[]> pjGroupL = new List <Point[]>(); List <Point[]> zjGroupL = new List <Point[]>(); List <Point> pjGroup = new List <Point>(); List <Point> zjGroup = new List <Point>(); for (int i = 0; i < aFeat.Length; i++) { int frontId, thisId, backId; bool[] yon = new bool[seleTime]; for (int t = 1; t <= seleTime; t++) { frontId = i < t ? aFeat.Length - 1 + i - t : i - t; thisId = i; backId = i > aFeat.Length - 1 - t ? i - (aFeat.Length - 1) + t : backId = i + t; double jiaodu = cosCalculator(aFeat[frontId], aFeat[thisId], aFeat[backId]); yon[t - 1] = jiaodu > userSet; } if (yon.Contains(true)) { pjGroup.Add(aFeat[i]); } else { zjGroup.Add(aFeat[i]); } } OSGeo.OGR.Geometry outGeom = new OSGeo.OGR.Geometry(OSGeo.OGR.wkbGeometryType.wkbPolygon); OSGeo.OGR.Geometry subGeom = new OSGeo.OGR.Geometry(OSGeo.OGR.wkbGeometryType.wkbLinearRing); for (int g = 0; g < zjGroup.Count(); g++) { Point a = zjGroup[g]; subGeom.AddPoint(a.X, a.Y, a.Z); } if (subGeom.GetPointCount() < 4) { return(null); } subGeom.CloseRings(); outGeom.AddGeometry(subGeom); return(outGeom); }
public static OSGeo.OGR.Geometry ToGeometry(this Envelope envelope) { var ring = new OSGeo.OGR.Geometry(wkbGeometryType.wkbLinearRing); ring.AddPoint_2D(envelope.MinX, envelope.MinY); ring.AddPoint_2D(envelope.MaxX, envelope.MinY); ring.AddPoint_2D(envelope.MaxX, envelope.MaxY); ring.AddPoint_2D(envelope.MinX, envelope.MaxY); ring.CloseRings(); var polygon = new OSGeo.OGR.Geometry(wkbGeometryType.wkbPolygon); polygon.AddGeometry(ring); return(polygon); }