示例#1
0
        /// <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 void ExecuteIntersectionQuery(IEnvelope bbox, FeatureDataSet ds)
        {
            List <Geometry> features = new List <Geometry>();

            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                //Get bounding box string
                string strBbox = GetBoxFilterStr(bbox);

                //string strSQL = "SELECT g.*, g." + GeometryColumn + ".STAsBinary() AS sharpmap_tempgeometry ";
                string strSQL = String.Format(
                    "SELECT g.*, g.{0}{1}.STAsBinary() AS sharpmap_tempgeometry FROM {2} g WHERE ",
                    GeometryColumn, MakeValidString, Table);

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

                strSQL += strBbox;

                using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    System.Data.DataSet ds2 = new System.Data.DataSet();
                    adapter.Fill(ds2);
                    conn.Close();
                    if (ds2.Tables.Count > 0)
                    {
                        FeatureDataTable fdt = new FeatureDataTable(ds2.Tables[0]);
                        foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                        {
                            if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                            {
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                            }
                        }
                        foreach (System.Data.DataRow dr in ds2.Tables[0].Rows)
                        {
                            Data.FeatureDataRow fdr = fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                            {
                                if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                                {
                                    fdr[col.ColumnName] = dr[col];
                                }
                            }
                            fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"]);
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Returns the style based on a feature
        /// </summary>
        /// <param name="attribute">Set of attribute values to calculate the <see cref="IStyle"/> from</param>
        /// <returns>The style</returns>
        public IStyle GetStyle(Data.FeatureDataRow attribute)
        {
            if (attribute.IsNull(_attributeName))
            {
                return(_default);
            }

            var val = attribute[_attributeName].ToString();

            return(_styleMap.ContainsKey(val) ? _styleMap[val] : _default);
        }
示例#3
0
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="RowID"></param>
 /// <returns>datarow</returns>
 public Data.FeatureDataRow GetFeature(uint RowID)
 {
     using (SqlConnection conn = new SqlConnection(_connectionString))
     {
         string strSQL = "select g.* , g." + GeometryColumn + ".STAsBinary() As sharpmap_tempgeometry from " + Table + " g WHERE " + ObjectIdColumn + "=" + RowID.ToString() + "";
         using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, conn))
         {
             FeatureDataSet ds = new FeatureDataSet();
             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 && col.ColumnName != "sharpmap_tempgeometry")
                     {
                         fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                     }
                 }
                 if (ds.Tables[0].Rows.Count > 0)
                 {
                     System.Data.DataRow dr  = ds.Tables[0].Rows[0];
                     Data.FeatureDataRow fdr = fdt.NewRow();
                     foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                     {
                         if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                         {
                             fdr[col.ColumnName] = dr[col];
                         }
                     }
                     fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"]);
                     return(fdr);
                 }
                 else
                 {
                     return(null);
                 }
             }
             else
             {
                 return(null);
             }
         }
     }
 }
示例#4
0
        /// <summary>
        /// Returns the features that intersects with 'geom'
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        public void ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            List <Geometry> features = new List <Geometry>();

            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                string strGeom = string.Empty;
                //TODO: Convert to SQL Server
                if (this._spatialObjectType == SqlServerSpatialObjectType.Geometry)
                {
                    strGeom = "geography::STGeomFromText('" + geom.AsText() + "', #SRID#)";
                }
                else
                {
                    strGeom = "geometry::STGeomFromText('" + geom.AsText() + "', #SRID#)";
                }

                if (SRID > 0)
                {
                    strGeom = strGeom.Replace("#SRID#", SRID.ToString());
                }
                else
                {
                    strGeom = strGeom.Replace("#SRID#", "0");
                }
                strGeom = GeometryColumn + ".STIntersects(" + strGeom + ") = 1";

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

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

                strSQL += strGeom;

                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 && col.ColumnName != "sharpmap_tempgeometry")
                            {
                                fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                            }
                        }
                        foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
                        {
                            Data.FeatureDataRow fdr = fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                            {
                                if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                                {
                                    fdr[col.ColumnName] = dr[col];
                                }
                            }
                            fdr.Geometry = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"]);
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }