private static bool TestWktWkb(int number, IGeometryFactory factory, string wkt, string wkb) { WKTReader r = new WKTReader(factory); IGeometry wktGeom = r.Read(wkt); WKBReader s = new WKBReader(factory); IGeometry wkbGeom = s.Read(WKBReader.HexToBytes(wkb)); try { Assert.AreEqual(wkb, WKBWriter.ToHex(wktGeom.AsBinary()), "wkb's don't match"); Assert.IsTrue(DiscreteHausdorffDistance.Distance(wktGeom, wkbGeom) < 1e-9, number + ": DiscreteHausdorffDistance.Distance(wktGeom, wkbGeom) < 1e-9"); if (!wktGeom.EqualsExact(wkbGeom)) { Assert.AreEqual(wkt, wktGeom.AsText(), number + ": wkt.Equals(wktGeom.AsText())"); var wktGeom2 = s.Read(wktGeom.AsBinary()); Assert.AreEqual(wkt, wktGeom2.AsText(), number + ": wkt.Equals(wktGeom2.AsText())"); var diff = wkbGeom.Difference(wktGeom); Assert.IsTrue(false, number + ": wktGeom.EqualsExact(wkbGeom)\n" + diff.AsText()); } return(false); } catch (AssertionException ex) { Console.WriteLine(ex.Message); return(true); } }
public void TestIssue132Polygons() { var pts = new[] { new Coordinate(0, 0), new Coordinate(10, 10), new Coordinate(20, 20) }; var polys = new IPolygon[3]; var pm = GeoAPI.GeometryServiceProvider.Instance.CreatePrecisionModel(10d); var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(pm, 4326); for (var i = 0; i < pts.Length; i++) { polys[i] = (IPolygon)factory.CreatePoint(pts[i]).Buffer(4d, 1); } var mp = factory.CreateMultiPolygon(polys); Console.WriteLine(mp); var gc = factory.CreateGeometryCollection(new IGeometry[] { mp }); Console.WriteLine(gc); var writer = new GaiaGeoWriter(); var buffer = writer.Write(gc); Console.WriteLine("Hex: {0}", WKBWriter.ToHex(buffer)); var reader = new GaiaGeoReader(factory.CoordinateSequenceFactory, factory.PrecisionModel); var gc2 = reader.Read(buffer); Assert.IsNotNull(gc2); Assert.IsTrue(gc.EqualsExact(gc2)); }
public void TestIssue132LineStrings() { var pts = new[] { new Coordinate(0, 0), new Coordinate(10, 10), new Coordinate(20, 20), new Coordinate(30, 30) }; var lines = new ILineString[2]; var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4326); for (var i = 0; i < pts.Length; i += 2) { lines[i / 2] = factory.CreateLineString(new[] { pts[i], pts[i + 1] }); } var mp = factory.CreateMultiLineString(lines); Console.WriteLine(mp); var gc = factory.CreateGeometryCollection(new IGeometry[] { mp }); Console.WriteLine(gc); var writer = new GaiaGeoWriter(); var buffer = writer.Write(gc); Console.WriteLine("Hex: {0}", WKBWriter.ToHex(buffer)); var reader = new GaiaGeoReader(factory.CoordinateSequenceFactory, factory.PrecisionModel); var gc2 = reader.Read(buffer); Assert.IsNotNull(gc2); Assert.IsTrue(gc.EqualsExact(gc2)); }
private string GetGeom(long id, long version) { using (var conn = GetConnection()) { conn.Open(); var query = string.Format( $"SELECT ST_AsBinary(geom) FROM {_geomTable} WHERE id=:id AND version=:version"); var command = new NpgsqlCommand(query, conn); command.Parameters.Add(new NpgsqlParameter("id", NpgsqlDbType.Bigint) { Value = id }); command.Parameters.Add(new NpgsqlParameter("version", NpgsqlDbType.Bigint) { Value = version }); command.Prepare(); using (var dr = command.ExecuteReader()) { while (dr.Read()) { return(WKBWriter.ToHex((byte[])dr[0])); } } } return(null); }
public void TestIssue147() { var wkt = "POLYGON ((-94.16 42.25, -94.15 42.26, -94.14 42.25, -94.16 42.25))"; var geom = new WKTReader().Read(wkt); Assert.AreEqual( "0x010300000001000000040000000AD7A3703D8A57C000000000002045409A999999998957C0E17A14AE47214540295C8FC2F58857C000000000002045400AD7A3703D8A57C00000000000204540", "0x" + WKBWriter.ToHex(geom.AsBinary())); }
public void TestNumber() { const string theNumberString = "6232756.00054126"; const double theNumber = 6232756.00054126; //6232756.0005412595; var theBytes = BitConverter.GetBytes(theNumber); Console.WriteLine("{0:R} -> 0x{1}", theNumber, WKBWriter.ToHex(theBytes)); var theWkbedNumber = BitConverter.ToDouble(theBytes, 0); Console.WriteLine("0x{1} -> {0:R}", theWkbedNumber, WKBWriter.ToHex(theBytes)); //The result of JTS theBytes[0] = (byte)(theBytes[0] + 1); theWkbedNumber = BitConverter.ToDouble(theBytes, 0); Console.WriteLine("0x{1} -> {0:R}", theWkbedNumber, WKBWriter.ToHex(theBytes)); Assert.AreEqual(theNumber, theWkbedNumber); }
void CheckWKB(string wkt, ByteOrder byteOrder, bool emitZ, int srid, string expectedWKBHex) { var geom = Read(wkt); // set SRID if not -1 bool includeSRID = false; if (srid > 0) { includeSRID = true; geom.SRID = srid; } var wkbWriter = new WKBWriter(byteOrder, includeSRID, emitZ) { Strict = false }; byte[] wkb = wkbWriter.Write(geom); string wkbHex = WKBWriter.ToHex(wkb); Assert.AreEqual(expectedWKBHex, wkbHex); }
public void TestIssue132Points() { var pts = new[] { new Coordinate(0, 0), new Coordinate(10, 10), new Coordinate(20, 20) }; var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4326); var mp = factory.CreateMultiPoint(pts); Console.WriteLine(mp); var gc = factory.CreateGeometryCollection(new IGeometry[] { mp }); Console.WriteLine(gc); var writer = new GaiaGeoWriter(); var buffer = writer.Write(gc); Console.WriteLine("Hex: {0}", WKBWriter.ToHex(buffer)); var reader = new GaiaGeoReader(factory.CoordinateSequenceFactory, factory.PrecisionModel); var gc2 = reader.Read(buffer); Assert.IsNotNull(gc2); Assert.IsTrue(gc.EqualsExact(gc2)); }
void RunGeometry(Geometry g, int dimension, ByteOrder byteOrder, bool toHex, int srid) { bool includeSRID = false; if (srid >= 0) { includeSRID = true; g.SRID = srid; } var wkbWriter = new WKBWriter(byteOrder, includeSRID, dimension == 2 ? false : true); byte[] wkb = wkbWriter.Write(g); string wkbHex = null; if (toHex) { wkbHex = WKBWriter.ToHex(wkb); } if (toHex) { wkb = WKBReader.HexToBytes(wkbHex); } var g2 = (Geometry)_wkbReader.Read(wkb); var comp = (dimension == 2) ? Comp2 : Comp3; bool isEqual = (g.CompareTo(g2, comp) == 0); Assert.IsTrue(isEqual); if (includeSRID) { bool isSRIDEqual = g.SRID == g2.SRID; Assert.IsTrue(isSRIDEqual); } }