// ------------------------------------------------- // Util // ------------------------------------------------- private static Geometry.Interval RelativeEnvelopeLon(Geometry.IRandomAccessRange <Geometry.Point> points, bool closed, Geometry.Unit unit) { Geometry.Interval result = null; if (points.Count < 1) { result = new Geometry.Interval(); Geometry.AssignInverse(result); return(result); } double x0 = points[0][0]; result = new Geometry.Interval(x0); int count = points.Count + (closed ? 1 : 0); for (int ii = 1; ii < count; ++ii) { int i = ii % points.Count; double xi = points[i][0]; double distNorm = Geometry.NormalizedAngleSigned(xi - x0, unit); // [-pi, pi] double x1 = x0 + distNorm; result.Expand(x1); x0 = x1; } return(result); }
public static Geometry.Interval RelativeEnvelopeLon(Geometry.IRandomAccessRange <Geometry.Point> outer, IEnumerable <Geometry.IRandomAccessRange <Geometry.Point> > inners, Geometry.Unit unit) { Geometry.Interval result = RelativeEnvelopeLon(outer, true, unit); foreach (var inner in inners) { result.Expand(RelativeEnvelopeLon(inner, true, unit)); } return(result); }