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 Setup()
        {
            wkbreader = new WKBReader(factory);

            geometry0 = wkbreader.Read(test00_Geom0_WkbByteArray);
            Debug.WriteLine(geometry0.ToString());
            geometry1 = wkbreader.Read(test00_Geom1_WkbByteArray);
            Debug.WriteLine(geometry1.ToString());
        }
Exemplo n.º 3
0
        private static object ConvertToJson(byte[] geometry)
        {
            var geom = Reader.Read(geometry);

            if (!geom.IsValid)
            {
                throw new Exception();
            }

            //return JsonConvert.DeserializeObject(Writer.Write(geom));

            for (var i = 0; i < geom.NumGeometries; i++)
            {
                TransformRing(((Polygon)geom.GetGeometryN(i)).Boundary);
            }

            if (geom.IsValid)
            {
                return(JsonConvert.DeserializeObject(Writer.Write(geom)));
            }



            throw new Exception("Something went wrong when reprojecting");
        }
Exemplo n.º 4
0
        public IGeometry GetGeom(string table, long id, long version)
        {
            using (var conn = GetConnection())
            {
                conn.Open();
                var query = string.Format(
                    $"SELECT ST_AsBinary(geom) FROM {table} 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(_wkbReader.Read((byte[])dr[0]));
                    }
                }
            }

            return(null);
        }
Exemplo n.º 5
0
        private static IGeometry ReadGeometryFromWkbHexString(string wkbHexFile, IGeometryFactory geomFact)
        {
            var    reader = new WKBReader();
            string wkbHex = CleanHex(wkbHexFile);

            return(reader.Read(WKBReader.HexToBytes(wkbHex)));
        }
Exemplo n.º 6
0
        public void linearring_should_be_written_as_wkb()
        {
            var factory  = GeometryFactory.Default;
            var expected = factory.CreateLinearRing(new[]
            {
                new Coordinate(0, 0),
                new Coordinate(10, 0),
                new Coordinate(10, 10),
                new Coordinate(0, 10),
                new Coordinate(0, 0)
            });

            var writer = new WKBWriter();

            byte[] bytes = writer.Write(expected);
            Assert.That(bytes, Is.Not.Null);
            Assert.That(bytes, Is.Not.Empty);

            var reader = new WKBReader();
            var actual = reader.Read(bytes);

            Assert.That(actual, Is.Not.Null);
            Assert.That(actual, Is.EqualTo(expected));
            Assert.That(actual.OgcGeometryType, Is.EqualTo(expected.OgcGeometryType));

            // WKBReader reads "LinearRing" geometries as LineString
            Assert.That(expected, Is.InstanceOf <LinearRing>());
            Assert.That(actual, Is.InstanceOf <LineString>());
            Assert.That(actual.GeometryType, Is.Not.EqualTo(expected.GeometryType));
        }
Exemplo n.º 7
0
        private static Geometry ReadGeometryFromWkbHexString(string wkbHexFile, NtsGeometryServices geomServ)
        {
            var    reader = new WKBReader(geomServ);
            string wkbHex = CleanHex(wkbHexFile);

            return(reader.Read(WKBReader.HexToBytes(wkbHex)));
        }
        public virtual Point GetPoint()
        {
            var wkbReader = new WKBReader();
            var geometry  = wkbReader.Read(Coord);

            return((Point)geometry);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 将arcgis中的geometry对象转换为GeoAPI中的IGeometry对象
        /// </summary>
        /// <param name="geometry"></param>
        /// <returns></returns>
        public static GeoAPI.Geometries.IGeometry ConvertEsriToGeoApi(IGeometry geometry)
        {
            byte[]    wkb    = ConvertGeometryToWkb(geometry);
            WKBReader reader = new WKBReader();

            return(reader.Read(wkb));
        }
        private Dictionary <int, Geometry> GetGeometries <T>(string sql)
            where T : ActiveBaseEntity <T>, IIdentifiable
        {
            var ds         = SqlActions.ExecuteDataSet(sql, true);
            var geometries = new Dictionary <int, Geometry>();

            WKBReader reader = new WKBReader();

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                var bytes   = dr[1] as byte[];
                var trimmed = new byte[bytes.Length - 4];
                Array.Copy(bytes, 4, trimmed, 0, trimmed.Length);

                geometries.Add((int)dr[0], (Geometry)reader.Read(trimmed));
            }
            return(geometries);

            /*
             * using (var rows = SqlActions.ExecuteReader(sql, true))
             * {
             *      var geometries = new Dictionary<int, Geometry>();
             *
             *      WKBReader reader = new WKBReader();
             *      while (rows.Read())
             *      {
             *              var bytes = rows.GetValue(1) as byte[];
             *              var trimmed = new byte[bytes.Length - 4];
             *              Array.Copy(bytes, 4, trimmed, 0, trimmed.Length);
             *
             *              geometries.Add(rows.GetInt32(0), (Geometry)reader.Read(trimmed));
             *      }
             *      return geometries;
             * }*/
        }
Exemplo n.º 11
0
        /// <summary>
        /// 将Wkb转换成Wkt
        /// </summary>
        /// <param name="wkb"></param>
        /// <returns></returns>
        public static string ConvertWkbtoWkt(byte[] wkb)
        {
            WKTWriter writer = new WKTWriter();
            WKBReader reader = new WKBReader();

            return(writer.Write(reader.Read(wkb)));
        }
Exemplo n.º 12
0
        private static bool TryParse(byte[] bytes, out SqlGeometry geometry, out Exception error)
        {
            if (bytes == null)
            {
                geometry = Null;
                error    = new ArgumentNullException("bytes");
                return(false);
            }

            IGeometry g;

            try {
                var reader = new WKBReader(DefaultGeometryServices);
                using (var stream = new MemoryStream(bytes)) {
                    g = reader.Read(stream);
                }

                geometry = new SqlGeometry(g);
                error    = null;
                return(true);
            } catch (Exception ex) {
                error    = ex;
                geometry = Null;
                return(false);
            }
        }
Exemplo n.º 13
0
        public static ExtendedWkbGeometry CreateEwkbFrom(WkbGeometry wkbGeometry)
        {
            var reader   = new WKBReader();
            var geometry = reader.Read(wkbGeometry);

            geometry.SRID = SpatialReferenceSystemId.Lambert72;
            return(new ExtendedWkbGeometry(WkbWriter.Write(geometry)));
        }
        public virtual LineString GetLineString()
        {
            var wkbReader  = new WKBReader();
            var geometry   = wkbReader.Read(Coord);
            var lineString = (LineString)geometry;

            return(lineString);
        }
Exemplo n.º 15
0
        internal IGeometry GetGeometry()
        {
            var geom = _wkbReader.Read(WellKnownBytes);

            geom.SRID = Header.SrsId;
            GeoAPIEx.SetExtent(geom as NetTopologySuite.Geometries.Geometry, Header.Extent);
            return(geom);
        }
Exemplo n.º 16
0
        private static void TestBase64TextFile(Stream file)
        {
            byte[]   wkb       = ConvertBase64(file);
            var      wkbReader = new WKBReader();
            Geometry geom      = null;

            Assert.DoesNotThrow(() => geom = wkbReader.Read(wkb));
        }
Exemplo n.º 17
0
        private static string ConvertWKBToWKT(byte[] wkbBytes)
        {
            WKBReader reader  = new WKBReader();
            WKTWriter writer  = new WKTWriter();
            var       wktText = writer.Write(reader.Read(wkbBytes));

            return(wktText);
        }
Exemplo n.º 18
0
        private void ConvertWKBToGeometry_Click(object sender, RoutedEventArgs e)
        {
            //这里需要读取wkb
            byte[]    wkbBytes = new byte[1024];
            WKBReader reader   = new WKBReader();

            NetTopologySuite.Geometries.Geometry geom = reader.Read(wkbBytes);
        }
Exemplo n.º 19
0
        public void TestMaximimPrecisionDigitsFormatting()
        {
            IGeometryFactory factory = GeometryFactory.Default;

            WKBReader wkbreader = new WKBReader(factory);
            IGeometry wkb1      = wkbreader.Read(test00_Geom0_WkbByteArray);

            Assert.IsNotNull(wkb1);
            Assert.IsTrue(wkb1.IsValid);

            IGeometry wkb2 = wkbreader.Read(test00_Geom1_WkbByteArray);

            Assert.IsNotNull(wkb2);
            Assert.IsTrue(wkb2.IsValid);

            Exception ex = TryOverlay(wkb1, wkb2);

            Assert.IsNotNull(ex);
            Assert.IsTrue(ex.GetType() == typeof(TopologyException));

            string tos1 = writer.Write(wkb1);

            Assert.IsNotNull(tos1);
            string tos2 = writer.Write(wkb2);

            Assert.IsNotNull(tos2);

            WKTReader reader = new WKTReader(factory);
            IGeometry wkt1   = reader.Read(tos1);

            Assert.IsNotNull(wkt1);
            Assert.IsTrue(wkt1.IsValid);

            IGeometry wkt2 = reader.Read(tos2);

            Assert.IsNotNull(wkt2);
            Assert.IsTrue(wkt2.IsValid);

            Assert.IsTrue(wkb1.EqualsExact(wkt1), "First geometry pair must be equal!");
            Assert.IsTrue(wkb2.EqualsExact(wkt2), "Second geometry pair must be equal!");

            ex = TryOverlay(wkt1, wkt2);
            Assert.IsNotNull(ex, "Operation must fail!");
            Assert.IsTrue(ex.GetType() == typeof(TopologyException));
        }
Exemplo n.º 20
0
        /// <summary>
        /// Opens the specified file
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public IFeatureSet Open(string fileName)
        {
            IFeatureSet fs = new FeatureSet();

            fs.Name     = Path.GetFileNameWithoutExtension(fileName);
            fs.Filename = fileName;
            using (var reader = new OgrDataReader(fileName))
            {
                // skip the geometry column which is always column 0
                for (int i = 1; i < reader.FieldCount; i++)
                {
                    string sFieldName = reader.GetName(i);
                    Type   type       = reader.GetFieldType(i);

                    int    uniqueNumber = 1;
                    string uniqueName   = sFieldName;
                    while (fs.DataTable.Columns.Contains(uniqueName))
                    {
                        uniqueName = sFieldName + uniqueNumber;
                        uniqueNumber++;
                    }
                    fs.DataTable.Columns.Add(new DataColumn(uniqueName, type));
                }

                var wkbReader = new WKBReader();
                while (reader.Read())
                {
                    var wkbGeometry = (byte[])reader["Geometry"];

                    var geometry = wkbReader.Read(wkbGeometry);

                    IFeature feature = new Feature(geometry);
                    feature.DataRow = fs.DataTable.NewRow();
                    for (int i = 1; i < reader.FieldCount; i++)
                    {
                        object value = reader[i];
                        if (value == null)
                        {
                            value = DBNull.Value;
                        }
                        feature.DataRow[i - 1] = value;
                    }
                    fs.Features.Add(feature);
                }

                try
                {
                    fs.Projection = reader.GetProj4ProjectionInfo();
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                }
            }

            return(fs);
        }
Exemplo n.º 21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="geomStr"></param>
        /// <returns></returns>
        /// <exception cref="ParseException"></exception>
        public IGeometry Read(String geomStr)
        {
            String trimStr = geomStr.Trim();

            if (IsHex(trimStr, MaxCharsToCheck))
            {
                return(_wkbReader.Read(WKBReader.HexToBytes(trimStr)));
            }
            return(_wktReader.Read(trimStr));
        }
Exemplo n.º 22
0
        /// <summary>
        /// 将Geometry转换成Wkt
        /// </summary>
        /// <param name="geometry">ArcGIS的IGeometry对象</param>
        /// <returns></returns>
        public static string ConvertGeometryToWkt(IGeometry geometry)
        {
            byte[]    b      = ConvertGeometryToWkb(geometry);
            WKBReader reader = new WKBReader();

            GeoAPI.Geometries.IGeometry g = reader.Read(b);
            WKTWriter writer = new WKTWriter();

            return(writer.Write(g));
        }
        public static IGeometry ToGeometry(this DbGeography self)
        {
            if (self == null)
            {
                return(null);
            }

            var reader = new WKBReader(NetTopologySuite.NtsGeometryServices.Instance);

            return(reader.Read(self.AsBinary()));
        }
Exemplo n.º 24
0
        public IGeometry Read(byte[] data)
        {
            var geometry = _wkbReader.Read(data);

            if (geometry is Point point)
            {
                return(new PointM(point.X, point.Y, point.Z, point.M));
            }

            return(geometry);
        }
        private static void CheckWkbGeometry(byte[] wkb, String expectedWKT)
        {
            WKBReader wkbReader = new WKBReader();
            IGeometry g2        = wkbReader.Read(wkb);

            WKTReader reader   = new WKTReader();
            IGeometry expected = reader.Read(expectedWKT);

            bool isEqual = (expected.CompareTo(g2 /*, Comp2*/) == 0);

            Assert.IsTrue(isEqual);
        }
Exemplo n.º 26
0
        //returns geoJSON of boundaries from DB filters by type
        public string GetGeoJsonCollectionFromBoundaryCollection(ICollection <Boundary> collectionOfBoundaries, BoundaryType boundaryType)
        {
            //create GeoJSON writer
            GeoJsonWriter geoJsonWriter = new GeoJsonWriter();
            //create WKT Binary reader
            WKBReader wKBReader = new WKBReader();
            //create empty feature collection
            FeatureCollection features = new FeatureCollection();

            //setup return boundary flag
            bool returnBoundary = false;

            //iterate through collection
            foreach (Boundary boundary in collectionOfBoundaries)
            {
                returnBoundary = false;
                switch (boundaryType)
                {
                case BoundaryType.ALL:
                    returnBoundary = true;
                    break;

                case BoundaryType.COVERAGE:
                    if (boundary.isCoverageArea)
                    {
                        returnBoundary = true;
                    }
                    break;

                case BoundaryType.DISPLAY:
                    if (boundary.displayOnMap)
                    {
                        returnBoundary = true;
                    }
                    break;
                }
                if (returnBoundary)
                {
                    //set up feature attributes table
                    AttributesTable attributesTable = new AttributesTable();
                    //add attributes to table from boundary
                    attributesTable.AddAttribute("id", boundary.BoundaryId);
                    attributesTable.AddAttribute("Name", boundary.Name);
                    //convert DbGeometry to GeoApi.IGeometry
                    IGeometry iGeom = wKBReader.Read(boundary.Area.AsBinary());
                    //create feature from geom and attributes
                    Feature feature = new Feature(iGeom, attributesTable);
                    //add feature to feature collection
                    features.Add(feature);
                }
            }
            return(geoJsonWriter.Write(features));
        }
        public void OracleWKBBigEndianReadTest()
        {
            Geometry result = null;

            using (Stream stream = new FileStream(blobFile, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                var wkbreader = new WKBReader();
                result = wkbreader.Read(stream);
            }
            Debug.WriteLine(result.ToString());
            Assert.IsNotNull(result);
        }
Exemplo n.º 28
0
        private static Geometry FromWkb(string wkb, Geometry clip = null)
        {
            var reader = new WKBReader();

            byte[] bytes = WKBReader.HexToBytes(wkb);
            var    geom  = reader.Read(bytes);

            if (clip != null)
            {
                geom = geom.Intersection(clip);
            }
            return(geom);
        }
        private static IGeometry FromWkb(string wkb, IGeometry clip = null)
        {
            WKBReader reader = new WKBReader(GeometryFactory.Default);

            byte[]    bytes = WKBReader.HexToBytes(wkb);
            IGeometry geom  = reader.Read(bytes);

            if (clip != null)
            {
                geom = geom.Intersection(clip);
            }
            return(geom);
        }
        public virtual string GetGeoJsonCoordinate()
        {
            var wkbReader  = new WKBReader();
            var geometry   = wkbReader.Read(Coord);
            var point      = (Point)geometry;
            var serializer = GeoJsonSerializer.Create();

            using (var stringWriter = new StringWriter())
            {
                serializer.Serialize(stringWriter, point);
                var geoJson = stringWriter.ToString();
                return(JObject.Parse(geoJson)["coordinates"].ToString(Formatting.None));
            };
        }