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 }
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 }