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));
        }
示例#4
0
        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));
        }
示例#9
0
        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);
            }
        }