Пример #1
0
        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)));
        }
Пример #3
0
        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
        }