public virtual void TestRussia() { string wktStr = ReadFirstLineFromRsrc("russia.wkt.txt"); //Russia exercises NtsGeometry fairly well because of these characteristics: // * a MultiPolygon // * crosses the dateline // * has coordinates needing normalization (longitude +180.000xxx) //TODO THE RUSSIA TEST DATA SET APPEARS CORRUPT // But this test "works" anyhow, and exercises a ton. //Unexplained holes revealed via KML export: // TODO Test contains: 64°12'44.82"N 61°29'5.20"E // 64.21245 61.48475 // FAILS //AssertRelation(null,SpatialRelation.CONTAINS, shape, ctx.makePoint(61.48, 64.21)); NtsSpatialContextFactory factory = new NtsSpatialContextFactory(); factory.normWrapLongitude = true; NtsSpatialContext ctx = (NtsSpatialContext)factory.NewSpatialContext(); IShape shape = ctx.ReadShapeFromWkt(wktStr); //System.out.println("Russia Area: "+shape.getArea(ctx)); }
public virtual void TestPolygonRepair() { //because we're going to test validation //System.setProperty(NtsGeometry.SYSPROP_ASSERT_VALIDATE, "false"); // TODO: Figure this out... Environment.SetEnvironmentVariable(NtsGeometry.SYSPROP_ASSERT_VALIDATE, bool.FalseString); //note: doesn't repair all cases; this case isn't: //ctx.readShapeFromWkt("POLYGON((0 0, 10 0, 10 20))");//doesn't connect around string wkt = "POLYGON((0 0, 10 0, 10 20, 5 -5, 0 20, 0 0))";//Topology self-intersect NtsSpatialContextFactory factory = new NtsSpatialContextFactory(); factory.validationRule = ValidationRule.RepairBuffer0; NtsSpatialContext ctx = (NtsSpatialContext)factory.NewSpatialContext(); // TODO: Can we remove this cast? IShape buffer0 = ctx.ReadShapeFromWkt(wkt); Assert.True(buffer0.GetArea(ctx) > 0); factory = new NtsSpatialContextFactory(); factory.validationRule = ValidationRule.RepairConvexHull; ctx = (NtsSpatialContext)factory.NewSpatialContext(); IShape cvxHull = ctx.ReadShapeFromWkt(wkt); Assert.True(cvxHull.GetArea(ctx) > 0); Assert.Equal(SpatialRelation.CONTAINS, cvxHull.Relate(buffer0)); factory = new NtsSpatialContextFactory(); factory.validationRule = ValidationRule.None; ctx = (NtsSpatialContext)factory.NewSpatialContext(); ctx.ReadShapeFromWkt(wkt);//doesn't throw }
public NtsWktShapeParser(NtsSpatialContext ctx, NtsSpatialContextFactory factory) : base(ctx, factory) { this.m_ctx = ctx; this.m_datelineRule = factory.datelineRule; this.m_validationRule = factory.validationRule; this.m_autoIndex = factory.autoIndex; }
public NtsWKTReaderShapeParserTest() { NtsSpatialContextFactory factory = new NtsSpatialContextFactory(); factory.datelineRule = DatelineRule.CcwRect; factory.wktShapeParserClass = typeof(NtsWKTReaderShapeParser); ctx = factory.NewSpatialContext(); }
public virtual void TestFiji() { //Fiji is a group of islands crossing the dateline. string wktStr = ReadFirstLineFromRsrc("fiji.wkt.txt"); NtsSpatialContextFactory factory = new NtsSpatialContextFactory(); factory.normWrapLongitude = true; NtsSpatialContext ctx = (NtsSpatialContext)factory.NewSpatialContext(); IShape shape = ctx.ReadShapeFromWkt(wktStr); AssertRelation(null, SpatialRelation.CONTAINS, shape, ctx.MakePoint(-179.99, -16.9)); AssertRelation(null, SpatialRelation.CONTAINS, shape, ctx.MakePoint(+179.99, -16.9)); Assert.True(shape.BoundingBox.Width < 5);//smart bbox Console.WriteLine("Fiji Area: " + shape.GetArea(ctx)); }
//Note: Historically, the code here originated from the defunct NtsShapeReadWriter. public NtsWKTReaderShapeParser(NtsSpatialContext ctx, NtsSpatialContextFactory factory) : base(ctx, factory) { }
internal static bool once = false;//cheap way to test it was created public CustomWktShapeParser(NtsSpatialContext ctx, NtsSpatialContextFactory factory) : base(ctx, factory) { once = true; }
public NtsBinaryCodec(NtsSpatialContext ctx, NtsSpatialContextFactory factory) : base(ctx, factory) { //note: ctx.geometryFactory hasn't been set yet useFloat = (factory.precisionModel.PrecisionModelType == PrecisionModels.FloatingSingle); }