public static Point CreatePoint(byte[] wkb)
        {
            var reader = new NetTopologySuite.IO.WKBReader();
            var val    = reader.Read(wkb);

            return(val as Point);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Ogr to DotSpatial at geometry level
        /// </summary>
        /// <param name="geometry">Ogr Geometry</param>
        /// <returns>GeoAPI/DotSpatial IGeometry</returns>
        public static GeoAPI.Geometries.IGeometry Ogr2DSGeometry(OSGeo.OGR.Geometry geometry)
        {
            geometry.FlattenTo2D();
            Byte[] wkbGeometry = new Byte[geometry.WkbSize()];
            geometry.ExportToWkb(wkbGeometry, OSGeo.OGR.wkbByteOrder.wkbXDR);

            NetTopologySuite.IO.WKBReader wkbReader = new NetTopologySuite.IO.WKBReader();
            return(wkbReader.Read(wkbGeometry));
        }
Ejemplo n.º 3
0
        public static DbGeometry ProjectCaliforniaStatePlaneVIToWebMercator(DbGeometry inputGeometry)
        {
            var wkb = inputGeometry.AsBinary();

            NetTopologySuite.IO.WKBReader reader = new NetTopologySuite.IO.WKBReader();
            Geometry internalGeometry            = (Geometry)reader.Read(wkb);

            double[] pointArray = new double[internalGeometry.Coordinates.Count() * 2];
            double[] zArray     = new double[1];
            zArray[0] = 1;

            int counterX = 0;
            int counterY = 1;

            foreach (var coordinate in internalGeometry.Coordinates)
            {
                pointArray[counterX] = coordinate.X;
                pointArray[counterY] = coordinate.Y;

                counterX = counterX + 2;
                counterY = counterY + 2;
            }

            Reproject.ReprojectPoints(pointArray, zArray, CaStatePlane, WebMercator, 0, (pointArray.Length / 2));

            counterX = 0;
            counterY = 1;
            foreach (var coordinate in internalGeometry.Coordinates)
            {
                coordinate.X = pointArray[counterX];
                coordinate.Y = pointArray[counterY];

                counterX = counterX + 2;
                counterY = counterY + 2;
            }

            var outputWkb = internalGeometry.AsBinary();

            var dbGeometry = DbGeometry.FromBinary(outputWkb, WGS_1984_SRID);

            if (!dbGeometry.IsValid)
            {
                dbGeometry = dbGeometry.ToSqlGeometry().MakeValid().ToDbGeometry().FixSrid(WGS_1984_SRID);
            }

            return(dbGeometry);
        }
Ejemplo n.º 4
0
        public static GeoJSON.FeatureCollection Retrieve(Bounds bounds)
        {
            var featureCollection = new GeoJSON.FeatureCollection();

            var connection = new System.Data.SqlClient.SqlConnection("Data Source=localhost;Initial Catalog=spatial;User ID=spatial;Password=spatial");

            string sql = "select geom.STAsBinary() as wkb, id from state_1 with(index(IX_SP_state_1)) where geom.STIntersects(geography::STPolyFromText('POLYGON((" + bounds.min.lon + " " + bounds.min.lat + "," + bounds.max.lon + " " + bounds.min.lat + ',' + bounds.max.lon + " " + bounds.max.lat + ',' + bounds.min.lon + " " + bounds.max.lat + ',' + bounds.min.lon + " " + bounds.min.lat + "))', 4283)) = 1;";

            using (connection)
            {
                connection.Open();

                var command = new System.Data.SqlClient.SqlCommand(sql, connection);

                using (command)
                {
                    var reader = command.ExecuteReader();

                    using (reader)
                    {
                        while (reader.Read())
                        {
                            // read the well known binary using NTS
                            var wkbReader = new NetTopologySuite.IO.WKBReader();
                            var sqlGeometry = wkbReader.Read(reader.GetSqlBytes(0).Stream);

                            // create a GeoJSON geometry using the NTS geometry
                            var geoJsonGeometry = new GeoJSON.Geometry(sqlGeometry);

                            // set the geometry type as a polygon because our layer only contains polygons
                            geoJsonGeometry.type = GeoJSON.ObjectType.Polygon.ToString();

                            // create a GeoJSON feature and assign the geometry to the feature
                            var geoJsonFeature = new GeoJSON.Feature();
                            geoJsonFeature.geometry = geoJsonGeometry;
                            geoJsonFeature.properties.id = reader.GetInt32(1).ToString();

                            // add the feature to the feature collection
                            featureCollection.features.Add(geoJsonFeature);
                        }
                    }

                }
            }
            return featureCollection;
        }
Ejemplo n.º 5
0
        public static DbGeometry ProjectWebMercatorToCaliforniaStatePlaneVI(DbGeometry inputGeometry)
        {
            var wkb = inputGeometry.AsBinary();

            NetTopologySuite.IO.WKBReader reader = new NetTopologySuite.IO.WKBReader();
            Geometry internalGeometry            = (Geometry)reader.Read(wkb);

            double[] pointArray = new double[internalGeometry.Coordinates.Count() * 2];
            double[] zArray     = new double[1];
            zArray[0] = 1;

            int counterX = 0;
            int counterY = 1;

            foreach (var coordinate in internalGeometry.Coordinates)
            {
                pointArray[counterX] = coordinate.X;
                pointArray[counterY] = coordinate.Y;

                counterX = counterX + 2;
                counterY = counterY + 2;
            }

            Reproject.ReprojectPoints(pointArray, zArray, WebMercator, CaStatePlane, 0, (pointArray.Length / 2));

            counterX = 0;
            counterY = 1;
            foreach (var coordinate in internalGeometry.Coordinates)
            {
                coordinate.X = pointArray[counterX];
                coordinate.Y = pointArray[counterY];

                counterX = counterX + 2;
                counterY = counterY + 2;
            }

            var outputWkb = internalGeometry.AsBinary();

            return(DbGeometry.FromBinary(outputWkb, NAD_83_HARN_CA_ZONE_VI_SRID));
        }
Ejemplo n.º 6
0
        public static DbGeometry UnionListGeometries(this IList <DbGeometry> inputGeometries)
        {
            if (inputGeometries.Count == 0)
            {
                return(null);
            }

            DbGeometry union;

            try
            {
                // all geometries have to have the same SRS or the union isn't defined anyway, so just grab the first one
                var coordinateSystemId = inputGeometries.First().CoordinateSystemId;

                NetTopologySuite.IO.WKBReader reader = new NetTopologySuite.IO.WKBReader();

                var internalGeometries = inputGeometries.Select(x => x.Buffer(0)).Select(x => reader.Read(x.AsBinary()))
                                         .ToList();

                var geometry = NetTopologySuite.Operation.Union.CascadedPolygonUnion.Union(internalGeometries);

                union = DbGeometry.FromBinary(geometry.AsBinary(), coordinateSystemId);
                return(union);
            }
            catch (TopologyException)
            {
                // fall back on the iterative union

                union = inputGeometries.First();

                for (var i = 1; i < inputGeometries.Count; i++)
                {
                    var temp = union.Union(inputGeometries[i]);
                    union = temp;
                }

                return(union);
            }
        }