Ejemplo n.º 1
0
        public static void Run()
        {
            //ExStart: DetermineIfOneGeometryContainsAnother
            var geometry1 = new Polygon();

            geometry1.ExteriorRing = new LinearRing(new[]
            {
                new Point(0, 0),
                new Point(0, 4),
                new Point(4, 4),
                new Point(4, 0),
                new Point(0, 0),
            });
            geometry1.AddInteriorRing(new LinearRing(new[]
            {
                new Point(1, 1),
                new Point(1, 3),
                new Point(3, 3),
                new Point(3, 1),
                new Point(1, 1),
            }));

            var geometry2 = new Point(2, 2);

            Console.WriteLine(geometry1.SpatiallyContains(geometry2)); // False

            var geometry3 = new Point(0.5, 0.5);

            Console.WriteLine(geometry1.SpatiallyContains(geometry3)); // True

            // 'a.SpatiallyContains(b)' equals to 'b.Within(a)'
            Console.WriteLine(geometry3.Within(geometry1)); // True
            //ExEnd: DetermineIfOneGeometryContainsAnother
        }
        public static void Run()
        {
            //ExStart: CreatePolygonWithHole
            Polygon polygon = new Polygon();

            LinearRing ring = new LinearRing();

            ring.AddPoint(50.02, 36.22);
            ring.AddPoint(49.99, 36.26);
            ring.AddPoint(49.97, 36.23);
            ring.AddPoint(49.98, 36.17);
            ring.AddPoint(50.02, 36.22);

            LinearRing hole = new LinearRing();

            hole.AddPoint(50.00, 36.22);
            hole.AddPoint(49.99, 36.20);
            hole.AddPoint(49.98, 36.23);
            hole.AddPoint(50.00, 36.24);
            hole.AddPoint(50.00, 36.22);

            polygon.ExteriorRing = ring;
            polygon.AddInteriorRing(hole);
            //ExEnd: CreatePolygonWithHole
        }
Ejemplo n.º 3
0
        public static void ValidateOnWrite()
        {
            //ExStart: ValidateGeometriesOnWrite
            var exteriorRing = new LinearRing();

            exteriorRing.AddPoint(0, 0);
            exteriorRing.AddPoint(0, 1);
            exteriorRing.AddPoint(1, 1);
            exteriorRing.AddPoint(1, 0);
            exteriorRing.AddPoint(0, 0);

            var interiorRing = new LinearRing();

            interiorRing.AddPoint(0.5, 0.5);
            interiorRing.AddPoint(1, 0.5);
            interiorRing.AddPoint(1, 1);
            interiorRing.AddPoint(0.5, 1);
            interiorRing.AddPoint(0.5, 0.5);

            var invalidPolygon = new Polygon();

            invalidPolygon.ExteriorRing = exteriorRing;
            invalidPolygon.AddInteriorRing(interiorRing);
            // invalidPolygon.IsValid == false, since polygon rings share segments (have infinite number of intersection points)

            GeoJsonOptions options = new GeoJsonOptions();

            options.ValidateGeometriesOnWrite = false; // false is default
            File.Delete(dataDir + "not_validated_data_out.shp");
            using (var nonValidatingLayer = Drivers.GeoJson.CreateLayer(dataDir + "not_validated_data_out.shp", options))
            {
                Feature feature = nonValidatingLayer.ConstructFeature();
                feature.Geometry = invalidPolygon;
                // no exception is thrown, since ValidateGeometriesOnWrite == false, and GeoJson specification doesn't say that rings of polygon can't share segments.
                nonValidatingLayer.Add(feature);
            }

            options.ValidateGeometriesOnWrite = true;
            File.Delete(dataDir + "validated_data_out.shp");
            using (var validatingLayer = Drivers.GeoJson.CreateLayer(dataDir + "validated_data_out.shp", options))
            {
                Feature feature = validatingLayer.ConstructFeature();
                feature.Geometry = invalidPolygon;
                try
                {
                    validatingLayer.Add(feature); // GisException is thrown, since polygon is not valid
                }
                catch (GisException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            //ExEnd: ValidateGeometriesOnWrite
        }