Exemple #1
0
        public override Geometry GetGeometryByID(uint oid)
        {
            Geometry geom = null;

            using (var conn = new SQLiteConnection(ConnectionID))
            {
                string strSQL = "SELECT " + GeometryColumn + " AS Geom FROM " + Table + " WHERE " + ObjectIdColumn +
                                "='" + oid.ToString(NumberFormatInfo.InvariantInfo) + "'";
                conn.Open();
                using (var command = new SQLiteCommand(strSQL, conn))
                {
                    using (var dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            if (dr[0] != DBNull.Value)
                            {
                                geom = GeometryFromWKT.Parse((string)dr[0]);
                            }
                        }
                    }
                }
                conn.Close();
            }
            return(geom);
        }
Exemple #2
0
 /// <summary>
 /// Returns the geometry corresponding to the Object ID
 /// </summary>
 /// <param name="oid">Object ID</param>
 /// <returns>geometry</returns>
 public GeoAPI.Geometries.IGeometry GetGeometryByID(uint oid)
 {
     GeoAPI.Geometries.IGeometry geom = null;
     using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection(_ConnectionString))
     {
         string strSQL = "Select " + this.XColumn + ", " + this.YColumn + " FROM " + this.Table + " WHERE " + this.ObjectIdColumn + "=" + oid.ToString();
         using (System.Data.OleDb.OleDbCommand command = new OleDbCommand(strSQL, conn))
         {
             conn.Open();
             using (System.Data.OleDb.OleDbDataReader dr = command.ExecuteReader())
             {
                 if (dr.Read())
                 {
                     //If the read row is OK, create a point geometry from the XColumn and YColumn and return it
                     if (dr[0] != DBNull.Value && dr[1] != DBNull.Value)
                     {
                         geom = SharpMap.Converters.Geometries.GeometryFactory.CreatePoint((double)dr[0], (double)dr[1]);
                     }
                 }
             }
             conn.Close();
         }
     }
     return(geom);
 }
        private static IEnumerable <GeoJSON> QueryData(BoundingBox bbox, ICanQueryLayer layer)
        {
            if (layer == null)
            {
                throw new ArgumentNullException("layer");
            }

            // Query for data
            FeatureDataSet ds = new FeatureDataSet();

            layer.ExecuteIntersectionQuery(bbox, ds);
            IEnumerable <GeoJSON> data = GeoJSONHelper.GetData(ds);

            // Reproject geometries if needed
            IMathTransform transform = null;

            if (layer is VectorLayer)
            {
                ICoordinateTransformation transformation = (layer as VectorLayer).CoordinateTransformation;
                transform = transformation == null ? null : transformation.MathTransform;
            }
            if (transform != null)
            {
                GeometryFactory gf = new GeometryFactory();
                data = data.Select(d =>
                {
                    Geometry converted = GeometryTransform.TransformGeometry(d.Geometry, transform, gf);
                    d.SetGeometry(converted);
                    return(d);
                });
            }
            return(data);
        }
Exemple #4
0
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            ExecuteIntersectionQuery(geom.EnvelopeInternal, ds);

            //index of last added feature data table
            var index = ds.Tables.Count - 1;

            if (index <= 0)
            {
                return;
            }

            var res = CloneTableStructure(ds.Tables[index]);

            res.BeginLoadData();

            var fdt = ds.Tables[index];

            foreach (FeatureDataRow row in fdt.Rows)
            {
                if (PreparedGeometry.Intersects(row.Geometry))
                {
                    var fdr = (FeatureDataRow)res.LoadDataRow(row.ItemArray, true);
                    fdr.Geometry = row.Geometry;
                }
            }

            res.EndLoadData();

            ds.Tables.RemoveAt(index);
            ds.Tables.Add(res);
        }
Exemple #5
0
        /// <summary>
        /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as
        /// reversing the primary and comparison shapes of the Within operation.
        /// </summary>
        /// <param name="g1">Source geometry</param>
        /// <param name="g2">Other geometry</param>
        /// <returns>True if otherGeometry is wholly contained within the source geometry.</returns>
        public static bool Contains(Geometry g1, Geometry g2)
        {
            SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
            SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);

            return((bool)(sg1.STContains(sg2)));
        }
Exemple #6
0
        /// <summary>
        /// Returns true if the primary geometry is wholly contained within the comparison geometry.
        /// </summary>
        /// <param name="g1">Source geometry</param>
        /// <param name="g2">Other geometry</param>
        /// <returns></returns>
        public static bool Within(Geometry g1, Geometry g2)
        {
            SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
            SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);

            return((bool)sg1.STWithin(sg2));
        }
Exemple #7
0
        /// <summary>
        /// Returns true if the given geometries relate according to the provided intersection pattern Matrix
        /// </summary>
        /// <param name="g1">Source geometry</param>
        /// <param name="g2">Other geometry</param>
        /// <param name="intersectionPatternMatrix">Intersection pattern Matrix</param>
        /// <returns></returns>
        public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix)
        {
            SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
            SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);

            return((bool)sg1.STRelate(sg2, intersectionPatternMatrix));
        }
Exemple #8
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom">Geometry</param>
        /// <returns>FeatureDataTable</returns>
        public FeatureDataTable ExecuteIntersectionQuery(Geometry geom)
        {
            FeatureDataSet fds = new FeatureDataSet();

            ExecuteIntersectionQuery(geom, fds);
            return(fds.Tables[0]);
        }
Exemple #9
0
        /// <summary>
        /// Builds from the given provider.
        /// </summary>
        /// <param name="provider">
        /// The base <see cref="SharpMap.Data.Providers.IProvider"/>
        /// from witch initialize the <see cref="NtsProvider"/> instance.
        /// </param>
        private void BuildFromProvider(IProvider provider)
        {
            // Features list initialization
            features = new List <Feature>(provider.GetFeatureCount());

            try
            {
                // Load all features from the given provider
                provider.Open();
                Collection <uint> ids = provider.GetObjectIDsInView(provider.GetExtents());
                foreach (uint id in ids)
                {
                    FeatureDataRow dataRow = provider.GetFeature(id);
                    GeoAPI.Geometries.IGeometry geometry   = GeometryConverter.ToNTSGeometry(dataRow.Geometry, geometryFactory);
                    AttributesTable             attributes = new AttributesTable();
                    foreach (DataColumn column in dataRow.Table.Columns)
                    {
                        if (dataRow[column] == null || dataRow[column].GetType() == typeof(DBNull))
                        {
                            throw new ApplicationException("Null values not supported");
                        }
                        attributes.AddAttribute(column.ColumnName, dataRow[column]);
                    }
                    features.Add(new Feature(geometry, attributes));
                }
            }
            finally
            {
                if (provider.IsOpen)
                {
                    provider.Close();
                }
            }
        }
 public static Geometry Intersection(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     SqlGeometry sgIntersection = sg1.STIntersection(sg2);
     return SqlGeometryConverter.ToSharpMapGeometry(sgIntersection);
 }
Exemple #11
0
        /// <summary>
        /// Returns the data associated with all the geometries that are intersected by 'geom'
        /// </summary>
        /// <param name="geom">Geometry to intersect with</param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            OgrGeometry ogrGeometry = OgrGeometry.CreateFromWkb(GeometryToWKB.Write(geom));

            _ogrLayer.SetSpatialFilter(ogrGeometry);
            ExecuteIntersectionQuery(ds);
        }
        public bool GenerateFeature(GeoAPI.Geometries.IGeometry geometry, float top, float bottom, GameObject node)
        {
            var mesh = node.GetOrAddComponent <MeshFilter>().mesh;

            mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
            mesh.Clear(true);

            if (!ProcessGeometry(geometry, top, bottom, node))
            {
                node.SetActive(false);
                return(false);
            }

            var meshRenderer = node.GetOrAddComponent <MeshRenderer>();

            meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
            meshRenderer.receiveShadows    = false;
            var material = meshRenderer.material;

            if (material != null)
            {
                meshRenderer.material       = material;
                meshRenderer.material.color = GetColor(GetLocalType());
            }

            Destroy(node.GetComponent <MeshCollider>());
            node.AddComponent <MeshCollider>();

            return(true);
        }
Exemple #13
0
        public void ConvertAndBack(SqlServerSpatialObjectType spatialType)
        {
            int srid = 4326;

            //Prepare data
            Geometry gPn   = GeometryFromWKT.Parse(Point);
            Geometry gMp   = GeometryFromWKT.Parse(Multipoint);
            Geometry gLi   = GeometryFromWKT.Parse(Linestring);
            Geometry gML   = GeometryFromWKT.Parse(MultiLinestring);
            Geometry gPl   = GeometryFromWKT.Parse(Polygon);
            Geometry gMPol = GeometryFromWKT.Parse(MultiPolygon);

            // Geography requires valid SRID
            gPn.SRID   = srid;
            gMp.SRID   = srid;
            gLi.SRID   = srid;
            gML.SRID   = srid;
            gPl.SRID   = srid;
            gMPol.SRID = srid;

            var comparison = new Comparison <Geometry>((u, v) => u.EqualsExact(v) ? 0 : 1);

            Assert.That(ToSqlServerAndBack(gPn, spatialType), Is.EqualTo(gPn).Using(comparison));
            Assert.That(ToSqlServerAndBack(gMp, spatialType), Is.EqualTo(gMp).Using(comparison));
            Assert.That(ToSqlServerAndBack(gLi, spatialType), Is.EqualTo(gLi).Using(comparison));
            Assert.That(ToSqlServerAndBack(gML, spatialType), Is.EqualTo(gML).Using(comparison));
            Assert.That(ToSqlServerAndBack(gPl, spatialType), Is.EqualTo(gPl).Using(comparison));
            Assert.That(ToSqlServerAndBack(gMPol, spatialType), Is.EqualTo(gMPol).Using(comparison));
        }
 public static Geometry SymDifference(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     SqlGeometry sgSymDifference = sg1.STSymDifference(sg2);
     return SqlGeometryConverter.ToSharpMapGeometry(sgSymDifference);
 }
Exemple #15
0
        /// <summary>
        /// Returns true if there is any intersection between the two geometries.
        /// </summary>
        /// <param name="g1">Source geometry</param>
        /// <param name="g2">Other geometry</param>
        /// <returns></returns>
        public static bool Intersects(Geometry g1, Geometry g2)
        {
            SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
            SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);

            return((bool)sg1.STIntersects(sg2));
        }
Exemple #16
0
        /// <summary>
        /// DotSpatial to Ogr at geometry level
        /// </summary>
        /// <param name="geometry">GeoAPI/DotSpatial IGeometry</param>
        /// <param name="featureSet">DotSpatial IFeatureSet</param>
        /// <returns>Ogr Geometry</returns>
        public static OSGeo.OGR.Geometry DS2OgrGeometry(GeoAPI.Geometries.IGeometry geometry, DotSpatial.Data.IFeatureSet featureSet)
        {
            string wkbGeometry = geometry.AsText();

            OSGeo.OGR.Geometry result = OSGeo.OGR.Ogr.CreateGeometryFromWkt(ref wkbGeometry, DS2OgrProjection(featureSet.Projection));
            return(result);
        }
        /// <summary>
        /// Returns the geometry corresponding to the Object ID
        /// </summary>
        /// <param name="oid">Object ID</param>
        /// <returns>geometry</returns>
        public override Geometry GetGeometryByID(uint oid)
        {
            Geometry geom = null;

            using (var conn = new SqlConnection(ConnectionString))
            {
                string strSql = "SELECT g." + GeometryColumn + " FROM " + QualifiedTable + " g WHERE " + ObjectIdColumn + "='" + oid + "'";
                conn.Open();
                using (var command = new SqlCommand(strSql, conn))
                {
                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            if (dr[0] != null && dr[0] != DBNull.Value)
                            {
                                geom = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)dr[0]);
                            }
                        }
                    }
                }
                conn.Close();
            }
            return(geom);
        }
Exemple #18
0
        /// <summary>
        /// 将GeoAPI中的geometry对象转换为arcgis中的geometry对象
        /// </summary>
        /// <param name="geometry"></param>
        /// <returns></returns>
        public static IGeometry ConvertGeoApitoEsri(GeoAPI.Geometries.IGeometry geometry)
        {
            WKBWriter writer = new WKBWriter();

            byte[] bytes = writer.Write(geometry);
            return(ConvertWkbToGeometry(bytes));
        }
        public static Geometry ConvexHull(Geometry g)
        {
            SqlGeometry sg           = SqlGeometryConverter.ToSqlGeometry(g);
            SqlGeometry sgConvexHull = sg.STConvexHull();

            return(SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull));
        }
        public static Geometry Boundary(Geometry g)
        {
            SqlGeometry sg         = SqlGeometryConverter.ToSqlGeometry(g);
            SqlGeometry sgBoundary = sg.STBoundary();

            return(SqlGeometryConverter.ToSharpMapGeometry(sgBoundary));
        }
Exemple #21
0
        /// <summary>
        /// Returns the geometry corresponding to the Object ID
        /// </summary>
        /// <param name="oid">Object ID</param>
        /// <returns>geometry</returns>
        public override Geometry GetGeometryByID(uint oid)
        {
            Geometry geom = null;

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                string strSQL = "SELECT g." + GeometryColumn + ".Get_WKB() FROM " + Table + " g WHERE " + ObjectIdColumn +
                                "='" + oid.ToString() + "'";
                conn.Open();
                using (OracleCommand command = new OracleCommand(strSQL, conn))
                {
                    using (OracleDataReader dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            if (dr[0] != DBNull.Value)
                            {
                                geom = GeometryFromWKB.Parse((byte[])dr[0], Factory);
                            }
                        }
                    }
                }
                conn.Close();
            }
            return(geom);
        }
        public static Geometry Buffer(Geometry g, Double distance)
        {
            SqlGeometry sg       = SqlGeometryConverter.ToSqlGeometry(g);
            SqlGeometry sgBuffer = sg.STBuffer(distance);

            return(SqlGeometryConverter.ToSharpMapGeometry(sgBuffer));
        }
Exemple #23
0
        private void txtWkt_TextChanged(object sender, EventArgs e)
        {
            var txt = txtWkt.Text;

            if (string.IsNullOrEmpty(txt))
            {
                return;
            }

            GeoAPI.Geometries.IGeometry geometry = null;
            try
            {
                geometry = _wktReader.Read(txt);
                if (geometry != _geometry)
                {
                    Geometry = geometry;
                }
                txtWkt.ForeColor = SystemColors.WindowText;
                lblError.Text    = "No Errors";
            }
            catch (Exception ex)
            {
                txtWkt.ForeColor = Color.Red;
                lblError.Text    = ex.Message;
            }
        }
        /// <summary>
        /// Returns all features with the view box
        /// </summary>
        /// <param name="bbox">view box</param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        public override void ExecuteIntersectionQuery(BoundingBox bbox, FeatureDataSet ds)
        {
            using (var conn = new SqlConnection(ConnectionString))
            {
                //Get bounding box string
                string strBbox = GetBoxFilterStr(bbox);

                string strSql = String.Format(
                    "SELECT g.* FROM {0} g {1} WHERE ",
                    Table, BuildTableHints());

                if (!String.IsNullOrEmpty(DefinitionQuery))
                {
                    strSql += DefinitionQuery + " AND ";
                }

                strSql += strBbox;

                using (var adapter = new SqlDataAdapter(strSql, conn))
                {
                    conn.Open();
                    var ds2 = new System.Data.DataSet();
                    adapter.Fill(ds2);
                    conn.Close();
                    if (ds2.Tables.Count > 0)
                    {
                        var fdt = new FeatureDataTable(ds2.Tables[0]);
                        foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                        {
                            if (col.ColumnName != GeometryColumn)
                            {
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                            }
                        }
                        foreach (System.Data.DataRow dr in ds2.Tables[0].Rows)
                        {
                            FeatureDataRow fdr = fdt.NewRow();

                            foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                            {
                                if (col.ColumnName != GeometryColumn)
                                {
                                    fdr[col.ColumnName] = dr[col];
                                }
                            }

                            var      geom        = dr[GeometryColumn];
                            Geometry sqlGeometry = null;
                            if (geom != null && geom != DBNull.Value)
                            {
                                sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)geom);
                            }
                            fdr.Geometry = sqlGeometry;
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
Exemple #25
0
 private void DefaultGeometryDefinedMethod(GeoAPI.Geometries.IGeometry geom)
 {
     using (var frm = new WktGeometryCreator())
     {
         frm.Geometry = geom;
         if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
         {
             var factory = _geometryProvider.Factory;
             if (factory == null)
             {
                 throw new InvalidOperationException("Feature provider does not have a IFeatureFactory");
             }
             var f = _geometryProvider.Factory.Create(frm.Geometry);
             _geometryProvider.Features.Add(f);
             if (MapControl != null)
             {
                 var map = MapControl.Map ?? new Map();
                 if (!map.Layers.Contains(_layer))
                 {
                     map.Layers.Add(_layer);
                 }
                 MapControl.Refresh();
             }
         }
     }
 }
Exemple #26
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            using (var conn = new OracleConnection(ConnectionString))
            {
                string strGeom = "MDSYS.SDO_GEOMETRY('" + geom.AsText() + "', #SRID#)";

                strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(Map.NumberFormatEnUs) : "NULL");

                strGeom = "SDO_RELATE(g." + GeometryColumn + ", " + strGeom +
                          ", 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'";

                string strSql = "SELECT * FROM " +
                                Table + " g WHERE ";

                if (!String.IsNullOrEmpty(_definitionQuery))
                {
                    strSql += DefinitionQuery + " AND ";
                }

                strSql += strGeom;

                using (var adapter = new OracleDataAdapter(strSql, conn))
                {
                    conn.Open();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        var fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (DataColumn col in ds.Tables[0].Columns)
                        {
                            if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0)
                            {
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                            }
                        }
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            var fdr = fdt.NewRow();
                            foreach (DataColumn col in ds.Tables[0].Columns)
                            {
                                if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0)
                                {
                                    fdr[col.ColumnName] = dr[col];
                                }
                            }
                            var sdoGeometry = dr[GeometryColumn] as SdoGeometry;

                            if (sdoGeometry != null)
                            {
                                fdr.Geometry = sdoGeometry.AsGeometry();
                            }

                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
        /// <summary>
        /// This method takes a pre-populated FeatureDataTable and removes rows that do not truly intersect testGeometry
        /// </summary>
        /// <param name="featureDataTable">The FeatureDataTable instance to filter</param>
        /// <param name="testGeometry">the geometry to compare against</param>
        public void PostFilterExistingFeatureDataTable(FeatureDataTable featureDataTable, SMGeometry testGeometry)
        {
            //first we create a new GeometryFactory.
            var geometryFactory = new GeometryFactory();


            //then we convert the testGeometry into the equivalent NTS geometry
            GeoAPI.Geometries.IGeometry testGeometryAsNtsGeom = GeometryConverter.ToNTSGeometry(testGeometry, geometryFactory);


            //now we loop backwards through the FeatureDataTable
            for (int i = featureDataTable.Rows.Count - 1; i > -1; i--)
            {
                //we get each row
                FeatureDataRow featureDataRow = featureDataTable.Rows[i] as FeatureDataRow;
                //and get the rows' geometry
                SMGeometry compareGeometry = featureDataRow.Geometry;
                //convert the rows' geometry into the equivalent NTS geometry
                GeoAPI.Geometries.IGeometry compareGeometryAsNts = GeometryConverter.ToNTSGeometry(compareGeometry, geometryFactory);
                //now test for intesection (note other operations such as Contains, Within, Disjoint etc can all be done the same way)
                bool intersects = testGeometryAsNtsGeom.Intersects(compareGeometryAsNts);

                //if it doesn't intersect remove the row.
                if (!intersects)
                {
                    featureDataTable.Rows.RemoveAt(i);
                }
            }
        }
Exemple #28
0
        /// <summary>
        /// Returns the geometry corresponding to the Object ID
        /// </summary>
        /// <param name="oid">Object ID</param>
        /// <returns>geometry</returns>
        public override Geometry GetGeometryByID(uint oid)
        {
            Geometry geom = null;

            using (var conn = new OracleConnection(ConnectionString))
            {
                string strSql = "SELECT g." + GeometryColumn + " as Geom FROM " + Table + " g WHERE " + ObjectIdColumn +
                                "='" + oid.ToString(CultureInfo.InvariantCulture) + "'";
                conn.Open();
                using (var command = new OracleCommand(strSql, conn))
                {
                    using (OracleDataReader dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            if (dr[0] != DBNull.Value)
                            {
                                var sdoGeom = dr[0] as SdoGeometry;
                                if (sdoGeom != null)
                                {
                                    geom = sdoGeom.AsGeometry();
                                }
                            }
                        }
                    }
                }
                conn.Close();
            }
            return(geom);
        }
Exemple #29
0
        /// <summary>
        /// Returns the geometry corresponding to the Object ID
        /// </summary>
        /// <param name="oid">Object ID</param>
        /// <returns>geometry</returns>
        public override Geometry GetGeometryByOid(object oid)
        {
            Geometry geom = null;

            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                string strSQL = "SELECT g." + GeometryColumn + " FROM " + Table + " g WHERE " + ObjectIdColumn + "='" + oid + "'";
                conn.Open();
                using (SqlCommand command = new SqlCommand(strSQL, conn))
                {
                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        var spatialReader = CreateReader();
                        while (dr.Read())
                        {
                            if (dr[0] != DBNull.Value)
                            {
                                geom = spatialReader.Read(dr[0]);
                            }
                        }
                    }
                }
                conn.Close();
            }
            return(geom);
        }
        public void Operations()
        {
            //Prepare data
            Geometry gPn = GeometryFromWKT.Parse(Point);

            gPn.SRID = 0;
            Geometry gMp = GeometryFromWKT.Parse(Multipoint);

            gMp.SRID = 0;
            Geometry gLi = GeometryFromWKT.Parse(Linestring);

            gLi.SRID = 0;
            Geometry gML = GeometryFromWKT.Parse(MultiLinestring);

            gML.SRID = 0;
            Geometry gPl = GeometryFromWKT.Parse(Polygon);

            gPl.SRID = 0;

            Geometry gPnBuffer30 = SpatialOperationsEx.Buffer(gPn, 30);

            System.Diagnostics.Trace.WriteLine(gPnBuffer30.ToString());

            Geometry gPnBuffer30IntersectiongPl = SpatialOperationsEx.Intersection(gPnBuffer30, gPl);

            System.Diagnostics.Trace.WriteLine(gPnBuffer30IntersectiongPl.ToString());

            Geometry gUnion = SpatialOperationsEx.Union(gPn, gMp, gML, gLi, gPl);

            System.Diagnostics.Trace.WriteLine(gUnion.ToString());
        }
Exemple #31
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="fcs">FeatureDataSet to fill data into</param>
        /// <param name="cancellationToken">A cancellation token</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, IFeatureCollectionSet fcs, CancellationToken?cancellationToken = null)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                string strGeom = SpatialObjectType + "::STGeomFromText('" + geom.AsText() + "', #SRID#)";

                strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(NumberFormatInfo.InvariantInfo) : "0");
                strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1";

                string strSQL = "SELECT g.* FROM " + Table + " g " + BuildTableHints() + " WHERE ";

                if (!String.IsNullOrEmpty(DefinitionQuery))
                {
                    strSQL += DefinitionQuery + " AND ";
                }

                strSQL += strGeom;

                string extraOptions = GetExtraOptions();
                if (!string.IsNullOrEmpty(extraOptions))
                {
                    strSQL += " " + extraOptions;
                }

                var ds = (System.Data.DataSet) new FeatureDataSet();
                using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        FeatureDataTable fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                        {
                            if (col.ColumnName != GeometryColumn)
                            {
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                            }
                        }
                        var geometryReader = CreateReader();
                        foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
                        {
                            FeatureDataRow fdr = fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                            {
                                if (col.ColumnName != GeometryColumn)
                                {
                                    fdr[col.ColumnName] = dr[col];
                                }
                            }
                            fdr.Geometry = geometryReader.Read(dr[GeometryColumn]);
                            fdt.AddRow(fdr);
                        }
                        fcs.Add(fdt);
                    }
                }
            }
        }
        public void FailingConversions()
        {
            //Prepare data
            const string invalidMultiPolygon = "MULTIPOLYGON (((20 20, 20 30, 30 30, 30 20, 20 20)), ((21 21, 21 29, 29 29, 29 21, 21 21)))";
            Geometry     gMP = GeometryFromWKT.Parse(invalidMultiPolygon);

            Assert.AreEqual(gMP, ToSqlServerAndBack(gMP));
        }
Exemple #33
0
        public Photo(System.Drawing.Image i, ScreenManager.SGISEnvelope b)
        {
            Pic = i;
            Bounds = new ScreenManager.SGISEnvelope(b);

            OgcCompliantGeometryFactory fact = new OgcCompliantGeometryFactory();
            Geometry = fact.ToGeometry(b);
        }
 public static Geometry Union(Geometry g, params Geometry[] geometries)
 {
     SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g);
     foreach (SqlGeometry sgUnion in SqlGeometryConverter.ToSqlGeometries(geometries))
     {
         sg = sg.STUnion(sgUnion);
     }
     return SqlGeometryConverter.ToSharpMapGeometry(sg);
 }
        private void txtWkt_TextChanged(object sender, EventArgs e)
        {
            var txt = txtWkt.Text;
            if (string.IsNullOrEmpty(txt))
                return;

            GeoAPI.Geometries.IGeometry geometry = null;
            try
            {
                geometry = _wktReader.Read(txt);
                if (geometry != _geometry)
                    Geometry = geometry;
                txtWkt.ForeColor = SystemColors.WindowText;
                lblError.Text = "No Errors";

            }
            catch (Exception ex)
            {
                txtWkt.ForeColor = Color.Red;
                lblError.Text = ex.Message;
            }
        }
 /// <summary>
 /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as
 /// reversing the primary and comparison shapes of the Within operation.
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <returns>True if otherGeometry is wholly contained within the source geometry.</returns>
 public static bool Contains(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     return (bool)(sg1.STContains(sg2));
 }
 /// <summary>
 /// Returns true if there is any intersection between the two geometries.
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <returns></returns>
 public static bool Intersects(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     return (bool) sg1.STIntersects(sg2);
 }
Exemple #38
0
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            ExecuteIntersectionQuery(geom.EnvelopeInternal, ds);

            //index of last added feature data table
            var index = ds.Tables.Count - 1;
            if (index <= 0) return;

            var res = CloneTableStructure(ds.Tables[index]);
            res.BeginLoadData();

            var fdt = ds.Tables[index];
            foreach (FeatureDataRow row in fdt.Rows)
            {
                if (PreparedGeometry.Intersects(row.Geometry))
                {
                    var fdr = (FeatureDataRow)res.LoadDataRow(row.ItemArray, true);
                    fdr.Geometry = row.Geometry;
                }
            }

            res.EndLoadData();

            ds.Tables.RemoveAt(index);
            ds.Tables.Add(res);
        }
 public static Geometry ConvexHull(Geometry g)
 {
     SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g);
     SqlGeometry sgConvexHull = sg.STConvexHull();
     return SqlGeometryConverter.ToSharpMapGeometry(sgConvexHull);
 }
 public static Geometry Buffer(Geometry g, Double distance)
 {
     SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g);
     SqlGeometry sgBuffer = sg.STBuffer(distance);
     return SqlGeometryConverter.ToSharpMapGeometry(sgBuffer);
 }
 public static Geometry Boundary(Geometry g)
 {
     SqlGeometry sg = SqlGeometryConverter.ToSqlGeometry(g);
     SqlGeometry sgBoundary = sg.STBoundary();
     return SqlGeometryConverter.ToSharpMapGeometry(sgBoundary);
 }
Exemple #42
0
        /// <summary>
        /// Returns the data associated with all the geometries that are intersected by 'geom'
        /// </summary>
        /// <param name="geom">Geometry to intersect with</param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, IFeatureCollectionSet fcs, CancellationToken? ct = null)
        {
            using (var ogrGeometry = OgrGeometry.CreateFromWkb(GeometryToWKB.Write(geom)))
            {
                _ogrLayer.SetSpatialFilter(ogrGeometry);
                var fds = new FeatureDataSet();
                ExecuteIntersectionQuery(fds);
                foreach (var fd in fds) fcs.Add(fd);
            }

        }
Exemple #43
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            using (var conn = new OracleConnection(ConnectionString))
            {
                string strGeom = "MDSYS.SDO_GEOMETRY('" + geom.AsText() + "', #SRID#)";

                strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(Map.NumberFormatEnUs) : "NULL");

                strGeom = "SDO_RELATE(g." + GeometryColumn + ", " + strGeom +
                          ", 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'";

                string strSql = "SELECT * FROM " +
                                Table + " g WHERE ";

                if (!String.IsNullOrEmpty(_definitionQuery))
                    strSql += DefinitionQuery + " AND ";

                strSql += strGeom;

                using (var adapter = new OracleDataAdapter(strSql, conn))
                {
                    conn.Open();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        var fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (DataColumn col in ds.Tables[0].Columns)
                            if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0)
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            var fdr = fdt.NewRow();
                            foreach (DataColumn col in ds.Tables[0].Columns)
                                if (string.Compare(col.ColumnName, GeometryColumn, CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0)
                                    fdr[col.ColumnName] = dr[col];
                            var sdoGeometry = dr[GeometryColumn] as SdoGeometry;

                            if (sdoGeometry != null)
                            {
                                fdr.Geometry = sdoGeometry.AsGeometry();
                            }

                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
 /// <summary>
 /// Returns true if otherGeometry is disjoint from the source geometry.
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <returns></returns>
 public static bool Disjoint(Geometry g1, Geometry g2)
 {
     return !g2.Intersects(g1);
 }
Exemple #45
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            using (var conn = new OracleConnection(ConnectionString))
            {
                string strGeom = "MDSYS.SDO_GEOMETRY('" + geom.AsText() + "', #SRID#)";

                if (SRID > 0)
                {
                    strGeom = strGeom.Replace("#SRID#", SRID.ToString(Map.NumberFormatEnUs));
                }
                else
                {
                    strGeom = strGeom.Replace("#SRID#", "NULL");
                }

                strGeom = "SDO_RELATE(g." + GeometryColumn + ", " + strGeom +
                          ", 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'";

                string strSQL = "SELECT g.* , g." + GeometryColumn + ").Get_WKB() As sharpmap_tempgeometry FROM " +
                                Table + " g WHERE ";

                if (!String.IsNullOrEmpty(_definitionQuery))
                    strSQL += DefinitionQuery + " AND ";

                strSQL += strGeom;

                using (var adapter = new OracleDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        var fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (DataColumn col in ds.Tables[0].Columns)
                            if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            var fdr = fdt.NewRow();
                            foreach (DataColumn col in ds.Tables[0].Columns)
                                if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                                    fdr[col.ColumnName] = dr[col];
                            fdr.Geometry = GeometryFromWKB.Parse((byte[]) dr["sharpmap_tempgeometry"], Factory);
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
        private static GeoAPIGeometryCollection FromGeometryCollection(IGeometryCollection geometry, GeoAPIGeometryFactory factory, bool copyUserData)
        {
            var dsGeometries = new GeoAPI.Geometries.IGeometry[geometry.NumGeometries];

            for (var i = 0; i < dsGeometries.Length; i++)
                dsGeometries[i] = FromGeometry(geometry.GetGeometryN(i), factory, copyUserData);

            var result = factory.CreateGeometryCollection(dsGeometries);
            if (copyUserData)
                result.UserData = geometry.UserData;
            return result;
        }
Exemple #47
0
        /// <summary>   
        /// Returns the features that intersects with 'geom'   
        /// </summary>   
        /// <param name="geom"></param>   
        /// <param name="ds">FeatureDataSet to fill data into</param>   
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            using (var conn = new SqlConnection(ConnectionString))
            {
                string strGeom = SpatialObject + "::STGeomFromText('" + geom.AsText() + "', #SRID#)";

                strGeom = strGeom.Replace("#SRID#", SRID > 0 ? SRID.ToString(CultureInfo.InvariantCulture) : "0");
                strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1";

                string strSql = "SELECT g.* FROM " + Table + " g " + BuildTableHints() + " WHERE ";

                if (!String.IsNullOrEmpty(DefinitionQuery))
                    strSql += DefinitionQuery + " AND ";

                strSql += strGeom;

                using (var adapter = new SqlDataAdapter(strSql, conn))
                {
                    conn.Open();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        var fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                            if (col.ColumnName != GeometryColumn)
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
                        {
                            FeatureDataRow fdr = fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                                if (col.ColumnName != GeometryColumn)
                                    fdr[col.ColumnName] = dr[col];

                            var ogeom = dr[GeometryColumn];
                            Geometry sqlGeometry = null;
                            if (ogeom != null && ogeom != DBNull.Value)
                                sqlGeometry = SqlGeometryConverter.ToSharpMapGeometry((Microsoft.SqlServer.Types.SqlGeometry)ogeom);
                            fdr.Geometry = sqlGeometry;
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
Exemple #48
0
 /// <summary>
 /// Returns the features that intersects with 'geom'
 /// </summary>
 /// <param name="geom">Geometry</param>
 /// <returns>FeatureDataTable</returns>
 public FeatureDataTable ExecuteIntersectionQuery(Geometry geom)
 {
     var fds = new FeatureDataSet();
     ExecuteIntersectionQuery(geom, fds);
     return fds.Tables[0];
 }
Exemple #49
0
 public FeatureDataTable QueryFeatures(Geometry geom, double distance)
 {
     throw new NotSupportedException();
 }
Exemple #50
0
        /// <summary>
        /// Returns the data associated with all the geometries that are intersected by 'geom'
        /// </summary>
        /// <param name="geom">Geometry to intersect with</param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            using (var ogrGeometry = OgrGeometry.CreateFromWkb(GeometryToWKB.Write(geom)))
            {
                _ogrLayer.SetSpatialFilter(ogrGeometry);
                ExecuteIntersectionQuery(ds);
            }

        }
 /// <summary>
 /// Returns true if the given geometries relate according to the provided intersection pattern Matrix
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <param name="intersectionPatternMatrix">Intersection pattern Matrix</param>
 /// <returns></returns>
 public static Boolean Relate(Geometry g1, Geometry g2, string intersectionPatternMatrix)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     return (bool)sg1.STRelate(sg2, intersectionPatternMatrix);
 }
 /// <summary>
 /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than
 /// the maximum dimension of the two geometries and the intersection geometry is not equal to either.
 /// geometry.
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <returns></returns>
 public static bool Crosses(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     return (bool)sg1.STCrosses(sg2);
 }
Exemple #53
0
 private Geometry ToSqlServerAndBack(Geometry gIn)
 {
     Assert.That(gIn, Is.Not.Null);
     Assert.That(gIn.SRID, Is.EqualTo(-1));
     gIn.SRID = 0;
     SqlGeometry sqlGeometry = SqlGeometryConverter.ToSqlGeometry(gIn);
     Geometry gOut = SqlGeometryConverter.ToSharpMapGeometry(sqlGeometry, new NetTopologySuite.Geometries.GeometryFactory());
     return gOut;
 }
 /// <summary>
 /// Returns true if the primary geometry is wholly contained within the comparison geometry.
 /// </summary>
 /// <param name="g1">Source geometry</param>
 /// <param name="g2">Other geometry</param>
 /// <returns></returns>
 public static bool Within(Geometry g1, Geometry g2)
 {
     SqlGeometry sg1 = SqlGeometryConverter.ToSqlGeometry(g1);
     SqlGeometry sg2 = SqlGeometryConverter.ToSqlGeometry(g2);
     return (bool)sg1.STWithin(sg2);
 }