public void CanDetectClosedCircularArcInteriorRing() { IPolygon polygon = GeometryFactory.CreateCircleArcPolygon( GeometryFactory.CreatePoint(100, 100), 10, isCcw: true); // NOTE: for some reason, the constructed polygon is not simple. // However the geometry properties can deal with that. AssertFulfilled("$ISCLOSED AND $CIRCULARARCCOUNT = 1 AND " + "$SEGMENTCOUNT = 1 AND $PARTCOUNT = 1 AND " + "$VERTEXCOUNT = 2 AND NOT $ISMULTIPART AND " + "$AREA > 10 AND $LENGTH > 10 AND $DIMENSION = 2 AND " + "$INTERIORRINGCOUNT = 1 AND $EXTERIORRINGCOUNT = 0", polygon); }
public void CanIntersectCircles() { const double z1 = 200; const double z2 = 300; var g1 = GeometryFactory.CreateCircleArcPolygon( GeometryFactory.CreatePoint(100, 100, z1), 10); var g2 = GeometryFactory.CreateCircleArcPolygon( GeometryFactory.CreatePoint(90, 90, z2), 10); GeometryUtils.MakeZAware(g1); GeometryUtils.MakeZAware(g2); GeometryUtils.ConstantZ(g1, z1); GeometryUtils.ConstantZ(g2, z1); Check(g1, g2, 2, (p, i) => At(i == 0, Equals(90, 100, z1, p.Point)) && At(i == 1, Equals(100, 90, z1, p.Point))); }
public void CanReshapeNonLinearGeometry() { ISpatialReference spatialReference = SpatialReferenceUtils.CreateSpatialReference( WellKnownHorizontalCS.LV95, WellKnownVerticalCS.LHN95); IPoint centerPoint = GeometryFactory.CreatePoint(150, 150); IGeometry geometryToReshape = GeometryFactory.CreateCircleArcPolygon(centerPoint, 50, false); geometryToReshape.SpatialReference = spatialReference; double circleArea = ((IArea)geometryToReshape).Area; IGeometry reshapeLine = GeometryFactory.CreatePolyline(spatialReference, GeometryFactory.CreatePoint(175, 100), GeometryFactory.CreatePoint(175, 200)); ReshapeInfo reshapeInfo = Reshape(GeometryFactory.Clone(geometryToReshape), reshapeLine, false); CutSubcurve cutReshapePath = reshapeInfo.CutReshapePath; Assert.NotNull(cutReshapePath); // s = 2* sqrt(r^2-(r-h)^2) = 2 * sqrt(2rh-h^2) Assert.AreEqual(86.60, Math.Round(cutReshapePath.Path.Length, 2)); const double area = 6318.5222074138192; ExpectResult(reshapeInfo, RingReshapeSideOfLine.Left, area, 1, 1); const bool useNonDefaultSide = true; reshapeInfo = Reshape(GeometryFactory.Clone(geometryToReshape), reshapeLine, useNonDefaultSide); double otherSide = circleArea - area; ExpectResult(reshapeInfo, RingReshapeSideOfLine.Right, otherSide, 1, 1); }
public void CanIntersectCircleWithRectangle() { var z1 = 100.0; var z2 = 200.0; var g1 = GeometryFactory.CreateCircleArcPolygon( GeometryFactory.CreatePoint(100, 100, z1), 10); var g2 = GeometryFactory.CreatePolygon(0, 0, 100, 200); GeometryUtils.MakeZAware(g1); GeometryUtils.MakeZAware(g2); GeometryUtils.ConstantZ(g1, z1); GeometryUtils.ConstantZ(g2, z2); Check(g1, g2, 2, (p, i) => At(i == 0, Equals(100, 110, z1, p.Point)) && At(i == 1, Equals(100, 90, z1, p.Point))); Check(g2, g1, 2, (p, i) => At(i == 0, Equals(100, 90, z2, p.Point)) && // TODO revise At(i == 1, Equals(100, 110, z2, p.Point))); // TODO revise }