internal FeatureRow(DataRowBuilder rb) :
     base(rb)
 {
     tableFeature = ((FeatureDataTable) (Table));
 }
        /// <summary>
        /// reloads the data
        /// </summary>
        public void Reload()
        {
            using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection(_ConnectionString))
            {
                string strSQL = "Select * FROM " + this.Table;

                using (System.Data.OleDb.OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    System.Data.DataSet ds2 = new System.Data.DataSet();
                    adapter.Fill(ds2);
                    conn.Close();
                    if (ds2.Tables.Count > 0)
                    {
                        m_fdt = new FeatureDataTable(ds2.Tables[0]);
                        foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                            m_fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        foreach (System.Data.DataRow dr in ds2.Tables[0].Rows)
                        {
                            SharpMap.Data.FeatureDataRow fdr = m_fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                                fdr[col.ColumnName] = dr[col];
                            SharpMap.Geometries.Geometry geom = SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr[this.GeometryColumn]);
                            fdr.Geometry = geom;
                            m_fdt.AddRow(fdr);
                        }
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Protected constructor for the abstract class.
        /// </summary>
        /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param>
        /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param>
        /// <param name="labelInfo">A FeatureDataTable for labels</param>
        protected GeometryFactory(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo,
                                  FeatureDataTable labelInfo)
        {
            _FeatureTypeInfo = featureTypeInfo;
            _HttpClientUtil = httpClientUtil;
            createReader(httpClientUtil);

            try
            {
                if (labelInfo != null)
                {
                    _LabelInfo = labelInfo;
                    _LabelNode = new PathNode(_FeatureTypeInfo.FeatureTypeNamespace, _LabelInfo.Columns[0].ColumnName,
                                              (NameTable) _XmlReader.NameTable);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError("An exception occured while initializing the label path node!");
                throw ex;
            }

            initializePathNodes();
            initializeSeparators();
        }
示例#4
0
        public void GetSetAttributesViaIFeature()
        {
            var featureTable = new FeatureDataTable();
            featureTable.Columns.Add("name", typeof (string));
            featureTable.Columns.Add("attribute1", typeof(int));

            var feature1 = featureTable.NewRow();
            feature1.Geometry = new Point(0, 0);
            feature1["name"] = "feature1";
            feature1["attribute1"] = 1;
            featureTable.Rows.Add(feature1);

            // now access it using IFeature iterfaces
            IFeature f1 = feature1;

            f1.Attributes.Count
                .Should().Be.EqualTo(2);

            f1.Attributes.Keys
                .Should().Have.SameSequenceAs(new[] {"name", "attribute1"});

            f1.Attributes["name"]
                .Should().Be.EqualTo("feature1");

            f1.Attributes["attribute1"]
                .Should().Be.EqualTo(1);

            f1.Attributes[0]
                .Should().Be.EqualTo("feature1");

            f1.Attributes[1]
                .Should().Be.EqualTo(1);
        }
 public void AddedRowChangesRowState()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     table.AddRow(row);
     Assert.AreEqual(DataRowState.Added, row.RowState);
 }
        /// <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, Geometry testGeometry)
        {
            //first we create a new GeometryFactory.
            GeometryFactory 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
                Geometry 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);
            }
        }
示例#7
0
        internal static FeatureDataTable<uint> GetFeatureTableForFields(IEnumerable<DbaseField> _dbaseColumns)
        {
            FeatureDataTable<uint> table = new FeatureDataTable<uint>(OidColumnName);

            foreach (DbaseField dbf in _dbaseColumns)
            {
                DataColumn col = table.Columns.Add(dbf.ColumnName, dbf.DataType);

				if (dbf.DataType == typeof(string))
				{
					col.MaxLength = dbf.Length;
				}
				else
				{
                    col.ExtendedProperties[ProviderSchemaHelper.LengthExtendedProperty] = dbf.Length;
				}

				if (dbf.Decimals > 0)
				{
                    col.ExtendedProperties[ProviderSchemaHelper.NumericPrecisionExtendedProperty] = dbf.Decimals;
				}
            }

            return table;
        }
示例#8
0
        public void ShowMapWithPointLayerBasedOnFeatureDataTable()
        {
            var table = new FeatureDataTable();
            table.Columns.Add("X", typeof(double));
            table.Columns.Add("Y", typeof(double));
            table.Columns.Add("Category", typeof(string));
            DataRow row = table.NewRow();
            table.Rows.Add(row);
            row.ItemArray = new object[] { 100000, 400000, "testCategory" };
            row = table.NewRow();
            table.Rows.Add(row);
            row.ItemArray = new object[] { 200000, 400000, "TestCategory" };

            var dataTablePoint = new DataTablePoint(table, "Category", "X", "Y");
            var vectorLayer = new VectorLayer("test", dataTablePoint);


            vectorLayer.Theme =ThemeFactory.CreateSingleFeatureTheme(vectorLayer.Style.GeometryType, Color.Blue, 10);
            var map = new Map { Name = "testmap" };

            map.Layers.Add(vectorLayer);
            map.Center = new Coordinate(150000, 400000);

            map.Zoom = 200000;
            //map.ZoomToExtents();
            //map.ZoomToBox(map.Envelope);
            
            MapTestHelper.Show(map);
        }
示例#9
0
        /// <summary>
        /// Protected constructor for the abstract class.
        /// </summary>
        /// <param name="httpClientUtil">A configured <see cref="HttpClientUtil"/> instance for performing web requests</param>
        /// <param name="featureTypeInfo">A <see cref="WfsFeatureTypeInfo"/> instance providing metadata of the featuretype to query</param>
        /// <param name="labelInfo">A FeatureDataTable for labels</param>
        protected GeometryFactory(HttpClientUtil httpClientUtil, WfsFeatureTypeInfo featureTypeInfo,
                                  FeatureDataTable labelInfo)
        {
            _FeatureTypeInfo = featureTypeInfo;
            Factory = featureTypeInfo.Factory;
            _httpClientUtil = httpClientUtil;
            createReader(httpClientUtil);

            try
            {
                if (labelInfo != null)
                {
                    _LabelInfo = labelInfo;
                    var pathNodes = new IPathNode[labelInfo.Columns.Count];
                    for (var i = 0; i < pathNodes.Length; i++)
                    {
                        pathNodes[i] = new PathNode(_FeatureTypeInfo.FeatureTypeNamespace, _LabelInfo.Columns[i].ColumnName, (NameTable)_XmlReader.NameTable);
                    }
                    _LabelNode = new AlternativePathNodesCollection(pathNodes);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError("An exception occured while initializing the label path node!");
                throw ex;
            }

            initializePathNodes();
            initializeSeparators();
        }
示例#10
0
        /// <summary>
        /// little util wich just adds one vector layer to the map and assigns it a random theme.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="m"></param>
        public static void SetupMap(HttpContext context, Map m)
        {
            var l = new VectorLayer(
                "Countries",
                new ShapeFile(context.Server.MapPath(ConfigurationManager.AppSettings["shpfilePath"])));

            l.Style = RandomStyle.RandomVectorStyleNoSymbols();
            l.Theme = new CustomTheme<IVectorStyle>(
                delegate { return RandomStyle.RandomVectorStyleNoSymbols(); });
            m.Layers.Add(l);

            FeatureDataTable labelData = new FeatureDataTable();
            labelData.Columns.Add("Name", typeof (string));
            FeatureDataRow r = labelData.NewRow();
            r["Name"] = "My Lair";
            r.Geometry = new Point(5, 5);
            labelData.AddRow(r);

            LabelLayer labelLayer = new LabelLayer("labelLayer")
                            {
                                DataSource = new GeometryFeatureProvider(labelData),
                                Enabled = true,
                                LabelColumn = "Name",
                                Style = new LabelStyle
                                            {
                                                BackColor = new SolidBrush(Color.Black),
                                                ForeColor = Color.White,
                                                Halo = new Pen(Color.Yellow, 0.1F),
                                                CollisionDetection = false,
                                                Font = new Font("Arial", 10, GraphicsUnit.Point)
                                            }
                            };

            m.Layers.Add(labelLayer);
        }
 public void AcceptChangesAppearAsUnchanged()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     table.AddRow(row);
     table.AcceptChanges();
     Assert.AreEqual(DataRowState.Unchanged, row.RowState);
 }
 public void AddedRowAppearsAsChange()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     table.AddRow(row);
     FeatureDataTable changes = table.GetChanges();
     Assert.AreEqual(1, changes.FeatureCount);
 }
 public void AddedRowIncreasesRowCount()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     table.AddRow(row);
     Assert.AreEqual(1, table.Rows.Count);
     Assert.AreEqual(1, table.FeatureCount);
 }
示例#14
0
 protected static FeatureDataTable CreateTable()
 {
     var res = new FeatureDataTable();
     res.Columns.Add(new DataColumn("Oid", typeof(ushort)));
     res.Columns.Add(new DataColumn("Value", typeof(double)));
     res.Constraints.Add("PK_OID", res.Columns[0], true);
     return res;
 }
 public void NewRowReturnsDetachedFeatureDataRow()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     Assert.IsNotNull(row);
     Assert.AreEqual(0, table.Rows.Count);
     Assert.AreEqual(DataRowState.Detached, row.RowState);
     Assert.AreSame(table, row.Table);
 }
 public void AcceptChangesReturnsNullChangesTable()
 {
     FeatureDataTable table = new FeatureDataTable();
     FeatureDataRow row = table.NewRow();
     table.AddRow(row);
     table.AcceptChanges();
     FeatureDataTable changes = table.GetChanges();
     Assert.IsNull(changes);
 }
示例#17
0
 /// <summary>
 /// Creates an instanc of this class
 /// </summary>
 /// <param name="content">The geopackage content</param>
 public GpkgProvider(GpkgContent content)
     :base(content.SRID)
 {
     _content = content;
     ConnectionID = content.ConnectionString;
     _reader = new GpkgStandardBinaryReader(GeoAPI.GeometryServiceProvider.Instance);
     _extent = content.Extent;
     _baseTable = content.GetBaseTable();
     _rtreeConstraint = BuildRtreeConstraint(content);
 }
示例#18
0
 private static FeatureDataTable CreateFeatureDataTable(string name)
 {
     var t1 = new FeatureDataTable { TableName = name };
     t1.Columns.Add(new DataColumn("oid", typeof(uint)));
     t1.Columns.Add(new DataColumn("P1", typeof(string)));
     t1.Columns.Add(new DataColumn("P2", typeof(double)));
     t1.Columns.Add(new DataColumn("P3", typeof(DateTime)));
     t1.PrimaryKey = new[] { t1.Columns[0] };
     return t1;
 }
示例#19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GeometryProvider"/>
 /// </summary>
 /// <param name="geometries">Set of geometries that this datasource should contain</param>
 public GeometryFeatureProvider(Collection<Geometry> geometries)
 {
     _features = new FeatureDataTable();
     foreach (Geometry geom in geometries)
     {
         FeatureDataRow fdr = _features.NewRow();
         fdr.Geometry = geom;
         _features.AddRow(fdr);
     }
 }
示例#20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GeometryProvider"/>
 /// </summary>
 /// <param name="geometries">Set of geometries that this datasource should contain</param>
 public GeometryFeatureProvider(IEnumerable<IGeometry> geometries)
 {
     _features = new FeatureDataTable();
     foreach (var geom in geometries)
     {
         var fdr = _features.NewRow();
         fdr.Geometry = geom;
         _features.AddRow(fdr);
     }
     _features.TableCleared += HandleFeaturesCleared;
 }
        public void KeepColumnNamesInSync()
        {
            var table = new FeatureDataTable();
            var row = table.NewRow();
            table.Rows.Add(row);

            var accessor = new FeatureDataRowAttributeAccessor(row);

            // now add column and check if it is available via accessor
            table.Columns.Add("Name", typeof (string));

            accessor.Count
                .Should().Be.EqualTo(1);
        }
示例#22
0
        public FeatureDataSet ExecuteQuery(string query, OgrGeometry filter)
        {
            try
            {
                FeatureDataSet   ds   = new FeatureDataSet();
                FeatureDataTable myDt = new FeatureDataTable();

                OgrLayer results = _ogrDataSource.ExecuteSQL(query, filter, "");

                //reads the column definition of the layer/feature
                ReadColumnDefinition(myDt, results);

                OgrFeature ogrFeature;
                results.ResetReading();
                while ((ogrFeature = results.GetNextFeature()) != null)
                {
                    FeatureDataRow dr = OgrFeatureToFeatureDataRow(myDt, ogrFeature, Factory);
                    myDt.AddRow(dr);

                    /*
                     * myDt.NewRow();
                     * for (int iField = 0; iField < ogrFeature.GetFieldCount(); iField++)
                     * {
                     *  if (myDt.Columns[iField].DataType == Type.GetType("System.String"))
                     *      dr[iField] = ogrFeature.GetFieldAsString(iField);
                     *  else if (myDt.Columns[iField].GetType() == Type.GetType("System.Int32"))
                     *      dr[iField] = ogrFeature.GetFieldAsInteger(iField);
                     *  else if (myDt.Columns[iField].GetType() == Type.GetType("System.Double"))
                     *      dr[iField] = ogrFeature.GetFieldAsDouble(iField);
                     *  else
                     *      dr[iField] = ogrFeature.GetFieldAsString(iField);
                     * }
                     *
                     * dr.Geometry = ParseOgrGeometry(ogrFeature.GetGeometryRef());
                     * myDt.AddRow(dr);
                     */
                }
                ds.Tables.Add(myDt);
                _ogrDataSource.ReleaseResultSet(results);

                return(ds);
            }
            catch (Exception exc)
            {
                Debug.WriteLine(exc.ToString());
                return(new FeatureDataSet());
            }
        }
示例#23
0
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="rowId"></param>
 /// <returns>datarow</returns>
 public FeatureDataRow GetFeature(uint rowId)
 {
     using (NpgsqlConnection conn = new NpgsqlConnection(_ConnectionString))
     {
         string strSQL = "select * , AsBinary(\"" + GeometryColumn + "\") As sharpmap_tempgeometry from " +
                         QualifiedTable + " WHERE \"" + ObjectIdColumn + "\"='" + rowId + "'";
         using (NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(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 (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)
                 {
                     DataRow        dr  = ds.Tables[0].Rows[0];
                     FeatureDataRow 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"]);
                     return(fdr);
                 }
                 else
                 {
                     return(null);
                 }
             }
             else
             {
                 return(null);
             }
         }
     }
 }
示例#24
0
文件: Oracle.cs 项目: cugkgq/Project
        ///// <summary>
        ///// Spacial Reference ID
        ///// </summary>
        //public int SRID
        //{
        //    get
        //    {
        //        if (_srid == -2)
        //        {
        //            string strSQL = "select SRID from USER_SDO_GEOM_METADATA WHERE TABLE_NAME='" + Table + "'";

        //            using (OracleConnection conn = new OracleConnection(ConnectionString))
        //            {
        //                using (OracleCommand command = new OracleCommand(strSQL, conn))
        //                {
        //                    try
        //                    {
        //                        conn.Open();
        //                        _srid = (int) (decimal) command.ExecuteScalar();
        //                        conn.Close();
        //                    }
        //                    catch
        //                    {
        //                        _srid = -1;
        //                    }
        //                }
        //            }
        //        }
        //        return _srid;
        //    }
        //    set { throw (new ApplicationException("Spatial Reference ID cannot by set on a Oracle table")); }
        //}


        /// <summary>
        /// Returns a datarow based on a RowID
        /// </summary>
        /// <param name="rowId"></param>
        /// <returns>datarow</returns>
        public override FeatureDataRow GetFeature(uint rowId)
        {
            using (var conn = new OracleConnection(ConnectionString))
            {
                string strSql = "select g.* , g." + GeometryColumn + ").Get_WKB() As sharpmap_tempgeometry from " +
                                Table + " g WHERE " + ObjectIdColumn + "='" + rowId.ToString(NumberFormatInfo.InvariantInfo) + "'";
                using (var adapter = new OracleDataAdapter(strSql, conn))
                {
                    var ds = new DataSet();
                    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);
                            }
                        }
                        if (ds.Tables[0].Rows.Count > 0)
                        {
                            DataRow dr  = ds.Tables[0].Rows[0];
                            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);
                            return(fdr);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
        }
示例#25
0
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="RowID"></param>
 /// <returns>datarow</returns>
 public FeatureDataRow GetFeature(uint RowID)
 {
     using (OracleConnection conn = new OracleConnection(_ConnectionString))
     {
         string strSQL = "select g.* , g." + GeometryColumn + ").Get_WKB() As sharpmap_tempgeometry from " +
                         Table + " g WHERE " + ObjectIdColumn + "='" + RowID.ToString() + "'";
         using (OracleDataAdapter adapter = new OracleDataAdapter(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 (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)
                 {
                     DataRow        dr  = ds.Tables[0].Rows[0];
                     FeatureDataRow 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"]);
                     return(fdr);
                 }
                 else
                 {
                     return(null);
                 }
             }
             else
             {
                 return(null);
             }
         }
     }
 }
示例#26
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(BoundingBox bbox, FeatureDataSet ds)
        {
            //List<Geometries.Geometry> features = new List<SharpMap.Geometries.Geometry>();
            using (OleDbConnection conn = new OleDbConnection(_ConnectionString))
            {
                string strSQL = "Select * FROM " + Table + " WHERE ";
                if (!String.IsNullOrEmpty(_defintionQuery))
                {
                    //If a definition query has been specified, add this as a filter on the query
                    strSQL += _defintionQuery + " AND ";
                }
                //Limit to the points within the boundingbox
                strSQL += XColumn + " BETWEEN " + bbox.Left.ToString(Map.NumberFormatEnUs) + " AND " +
                          bbox.Right.ToString(Map.NumberFormatEnUs) + " AND " + YColumn +
                          " BETWEEN " + bbox.Bottom.ToString(Map.NumberFormatEnUs) + " AND " +
                          bbox.Top.ToString(Map.NumberFormatEnUs);

                using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    DataSet ds2 = new DataSet();
                    adapter.Fill(ds2);
                    conn.Close();
                    if (ds2.Tables.Count > 0)
                    {
                        FeatureDataTable fdt = new FeatureDataTable(ds2.Tables[0]);
                        foreach (DataColumn col in ds2.Tables[0].Columns)
                        {
                            fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        }
                        foreach (DataRow dr in ds2.Tables[0].Rows)
                        {
                            FeatureDataRow fdr = fdt.NewRow();
                            foreach (DataColumn col in ds2.Tables[0].Columns)
                            {
                                fdr[col.ColumnName] = dr[col];
                            }
                            if (dr[XColumn] != DBNull.Value && dr[YColumn] != DBNull.Value)
                            {
                                fdr.Geometry = new Point((double)dr[XColumn], (double)dr[YColumn]);
                            }
                            fdt.AddRow(fdr);
                        }
                        ds.Tables.Add(fdt);
                    }
                }
            }
        }
        //[ExpectedException(typeof (NotImplementedException))]
        public void DataViewManagerIsAFeatureDataViewManager()
        {
            FeatureProvider        data   = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable       table  = new FeatureDataTable(_factories.GeoFactory);
            FeatureQueryExpression query  = FeatureQueryExpression.Intersects(data.GetExtents());
            IFeatureDataReader     reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            FeatureDataSet dataSet = new FeatureDataSet(_factories.GeoFactory);

            dataSet.Tables.Add(table);
            FeatureDataView view = dataSet.DefaultViewManager.CreateDataView(table);

            Assert.NotNull(view.DataViewManager);
            Assert.IsType(typeof(FeatureDataViewManager), view.DataViewManager);
        }
示例#28
0
 private void MapBox1_MapQueried(FeatureDataTable data)
 {
     this.Cursor = Cursors.WaitCursor;
     isQuerying  = true;
     dgFacts.ClearSelection();
     foreach (FeatureDataRow row in data)
     {
         if (row["DisplayFact"] != null && row["Colour"].ToString() == TearDropLayer.GREY)
         {
             DisplayFact dispFact = (DisplayFact)row["DisplayFact"];
             SelectFact(dispFact);
         }
     }
     isQuerying  = false;
     this.Cursor = Cursors.Default;
 }
        public void CloneToCopiesTableStructureAndNoData()
        {
            FeatureDataTable       table    = new FeatureDataTable(_factories.GeoFactory);
            FeatureProvider        provider = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureQueryExpression query    = FeatureQueryExpression.Intersects(provider.GetExtents());
            IFeatureDataReader     reader   = provider.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);

            FeatureDataTable clone = new FeatureDataTable(_factories.GeoFactory);

            table.CloneTo(clone);
            DataTableHelper.AssertTableStructureIdentical(table, clone);

            Assert.Equal(0, clone.Rows.Count);
        }
示例#30
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GeometryProvider"/>
        /// </summary>
        /// <param name="geometry">Geometry to be in this datasource</param>
        public GeometryFeatureProvider(Geometry geometry)
        {
            _features = new FeatureDataTable();
            var fdr = _features.NewRow();

            fdr.Geometry = geometry;
            if (geometry != null)
            {
                SRID = geometry.SRID;
            }
            _features.AddRow(fdr);
            _features.AcceptChanges();

            _features.TableCleared += HandleFeaturesCleared;
            _features.Constraints.CollectionChanged += HandleConstraintsCollectionChanged;
        }
示例#31
0
        private GeometryFeatureProvider CreateGraticuleDatasource()
        {
            var fdt = new FeatureDataTable {
                TableName = "Graticule"
            };

            fdt.Columns.Add(new DataColumn("oid", typeof(uint)));
            fdt.Columns[0].AutoIncrement = true;

            fdt.Columns.Add(new DataColumn("Label", typeof(string)));
            fdt.Columns.Add(new DataColumn("Major", typeof(bool)));

            fdt.PrimaryKey = new[] { fdt.Columns[0] };

            return(new GeometryFeatureProvider(fdt));
        }
示例#32
0
        private static FeatureDataTable CreateMultiPointFeatureDataTable(IGeometryFactory geometryFactory)
        {
            var fdt = new FeatureDataTable <uint>("OID", geometryFactory);

            fdt.Columns.AddRange(new[] { new DataColumn("X", typeof(double)), new DataColumn("Y", typeof(double)), });
            for (uint i = 1; i <= 100; i++)
            {
                var row  = fdt.NewRow(i);
                var geom = row.Geometry = RandomMultiPoint(geometryFactory);
                row["X"] = geom.Centroid[Ordinates.X];
                row["Y"] = geom.Centroid[Ordinates.Y];
                fdt.Rows.Add(row);
            }
            Assert.True(fdt.Rows.Count == 100);
            return(fdt);
        }
        private static VectorLayer CreateGeometryFeatureProviderLayer(string name, System.Data.DataColumn[] columns)
        {
            var fdt = new FeatureDataTable();

            fdt.Columns.Add("Oid", typeof(uint));
            var con = new System.Data.UniqueConstraint(fdt.Columns[0]);

            con.Columns[0].AutoIncrement     = true;
            con.Columns[0].AutoIncrementSeed = 1000;
            fdt.Constraints.Add(con);
            fdt.PrimaryKey = new System.Data.DataColumn[] { fdt.Columns[0] };

            fdt.Columns.AddRange(columns);

            return(new VectorLayer(name, new GeometryFeatureProvider(fdt)));
        }
示例#34
0
        private static FeatureDataTable CreateFeatureDataTable(DataTable table)
        {
            var res = new FeatureDataTable(table);

            foreach (DataColumn c in table.Columns)
            {
                var resc = new DataColumn(c.ColumnName, c.DataType);
                resc.AllowDBNull   = c.AllowDBNull;
                resc.Caption       = c.Caption;
                resc.ColumnMapping = c.ColumnMapping;
                resc.Expression    = c.Expression;

                res.Columns.Add(resc);
            }
            return(res);
        }
示例#35
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds"></param>
        protected override void OnExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            FeatureDataTable dataTable = CreateFeatureDataTable();

            dataTable.BeginLoadData();
            foreach (Feature feature in _features)
            {
                if (PreparedGeometry.Intersects(feature.Geometry))
                {
                    CreateNewRow(dataTable, feature);
                }
            }
            dataTable.EndLoadData();

            ds.Tables.Add(dataTable);
        }
 public void DefaultViewIsFeatureDataView()
 {
     FeatureDataTable table = new FeatureDataTable();
     DataView view = table.DefaultView;
     Assert.IsNotNull(view);
     Assert.IsInstanceOfType(typeof(FeatureDataView), view);
     Assert.IsNull(view.DataViewManager);
     Assert.AreEqual(String.Empty, view.Sort);
     Assert.AreEqual(String.Empty, view.RowFilter);
     Assert.AreEqual(0, view.Count);
     Assert.AreSame(table, view.Table);
     FeatureDataView featureView = view as FeatureDataView;
     Assert.IsNotNull(featureView);
     Assert.IsNull(featureView.GeometryFilter);
     Assert.AreEqual(DataViewRowState.CurrentRows, view.RowStateFilter);
 }
示例#37
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="geom"></param>
        /// <param name="ds"></param>
        public void ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds)
        {
            GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry = GeometryConverter.ToNTSGeometry(geom,
                                                                                                         geometryFactory);
            FeatureDataTable dataTable = CreateFeatureDataTable();

            foreach (Feature feature in features)
            {
                if (feature.Geometry.Intersects(geometry))
                {
                    CreateNewRow(dataTable, feature);
                }
            }

            ds.Tables.Add(dataTable);
        }
示例#38
0
        /// <summary>
        /// Check if the layer can be queried and retrieve data, if there is any.
        /// </summary>
        protected bool TryGetData(Map map,
            float x, float y,
            int pixelSensitivity,
            WmsServer.InterSectDelegate intersectDelegate,
            ICanQueryLayer queryLayer,
            string cqlFilter,
            out FeatureDataSet fds)
        {
            if (!queryLayer.IsQueryEnabled)
            {
                fds = null;
                return false;
            }

            float queryBoxMinX = x - pixelSensitivity;
            float queryBoxMinY = y - pixelSensitivity;
            float queryBoxMaxX = x + pixelSensitivity;
            float queryBoxMaxY = y + pixelSensitivity;

            Coordinate minXY = map.ImageToWorld(new PointF(queryBoxMinX, queryBoxMinY));
            Coordinate maxXY = map.ImageToWorld(new PointF(queryBoxMaxX, queryBoxMaxY));
            Envelope queryBox = new Envelope(minXY, maxXY);

            fds = new FeatureDataSet();
            queryLayer.ExecuteIntersectionQuery(queryBox, fds);

            FeatureTableCollection tables = fds.Tables;
            FeatureDataTable table = tables[0];
            if (intersectDelegate != null)
                tables[0] = intersectDelegate(table, queryBox);

            // filter the rows with the CQLFilter if one is provided
            if (cqlFilter != null)
            {
                DataRowCollection rows = table.Rows;
                for (int i = rows.Count - 1; i >= 0; i--)
                {
                    FeatureDataRow row = (FeatureDataRow)rows[i];
                    bool b = CqlFilter(row, cqlFilter);
                    if (!b)
                        rows.RemoveAt(i);
                }
            }

            bool res = tables.Count > 0 && table.Rows.Count > 0;
            return res;
        }
示例#39
0
        /// <summary>
        /// Gets a datarow from the datasource at the specified index belonging to the specified datatable
        /// </summary>
        /// <param name="RowID"></param>
        /// <param name="dt">Datatable to feature should belong to.</param>
        /// <returns></returns>
        public FeatureDataRow GetFeature(uint RowID, FeatureDataTable dt)
        {
            Debug.Assert(dt != null);
            if (dbaseFile != null)
            {
                //MemoryCache
                if (_UseMemoryCache == true)
                {
                    FeatureDataRow dr2 = null;
                    cacheDataTable.TryGetValue(RowID, out dr2);
                    if (dr2 == null)
                    {
                        dr2          = dbaseFile.GetFeature(RowID, dt);
                        dr2.Geometry = ReadGeometry(RowID);
                        cacheDataTable.Add(RowID, dr2);
                    }

                    //Make a copy to return
                    FeatureDataRow drNew = dt.NewRow();
                    for (int i = 0; i < dr2.Table.Columns.Count; i++)
                    {
                        drNew[i] = dr2[i];
                    }
                    drNew.Geometry = dr2.Geometry;
                    return(drNew);
                }
                else
                {
                    //FeatureDataRow dr = (FeatureDataRow)dbaseFile.GetFeature(RowID, (dt == null) ? dbaseFile.NewTable : dt);
                    FeatureDataRow dr = dbaseFile.GetFeature(RowID, dt);
                    dr.Geometry = ReadGeometry(RowID);
                    if (FilterDelegate == null || FilterDelegate(dr))
                    {
                        return(dr);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            else
            {
                throw (new ApplicationException(
                           "An attempt was made to read DBase data from a shapefile without a valid .DBF file"));
            }
        }
示例#40
0
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="rowId"></param>
 /// <returns>datarow</returns>
 public override FeatureDataRow GetFeature(uint rowId)
 {
     using (var conn = new SqlConnection(ConnectionString))
     {
         string strSql = "select g.* , g." + GeometryColumn + ".STAsBinary() As sharpmap_tempgeometry from " + Table + " g WHERE " + ObjectIdColumn + "=" + rowId + "";
         using (var adapter = new SqlDataAdapter(strSql, conn))
         {
             var ds = new System.Data.DataSet();
             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 && 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];
                     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];
                         }
                     }
                     var tmpGeom = Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"], Factory);
                     if (tmpGeom != null && _spatialObjectType == SqlServerSpatialObjectType.Geography)
                     {
                         FlipXY(tmpGeom);
                         tmpGeom.GeometryChanged();
                     }
                     fdr.Geometry = tmpGeom;
                     return(fdr);
                 }
                 return(null);
             }
             return(null);
         }
     }
 }
示例#41
0
        /// <summary>
        /// Returns all features with the view box
        /// </summary>
        /// <param name="bbox">view box</param>
        /// <param name="d"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        public IEnumerable <IFeature> GetFeatures(IEnvelope bbox)
        {
            //List<Geometries.Geometry> features = new List<SharpMap.Geometries.Geometry>();
            using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection(_ConnectionString))
            {
                string strSQL = "Select * FROM " + this.Table + " WHERE ";
                if (!String.IsNullOrEmpty(_defintionQuery))                 //If a definition query has been specified, add this as a filter on the query
                {
                    strSQL += _defintionQuery + " AND ";
                }
                //Limit to the points within the boundingbox
                strSQL += this.XColumn + " BETWEEN " + bbox.MinX.ToString(SharpMap.Map.numberFormat_EnUS) + " AND " + bbox.MaxX.ToString(SharpMap.Map.numberFormat_EnUS) + " AND " + this.YColumn +
                          " BETWEEN " + bbox.MaxY.ToString(SharpMap.Map.numberFormat_EnUS) + " AND " + bbox.MinY.ToString(SharpMap.Map.numberFormat_EnUS);

                using (System.Data.OleDb.OleDbDataAdapter adapter = new OleDbDataAdapter(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)
                        {
                            fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        }
                        foreach (System.Data.DataRow dr in ds2.Tables[0].Rows)
                        {
                            SharpMap.Data.FeatureDataRow fdr = fdt.NewRow();
                            foreach (System.Data.DataColumn col in ds2.Tables[0].Columns)
                            {
                                fdr[col.ColumnName] = dr[col];
                            }
                            if (dr[this.XColumn] != DBNull.Value && dr[this.YColumn] != DBNull.Value)
                            {
                                fdr.Geometry = SharpMap.Converters.Geometries.GeometryFactory.CreatePoint((double)dr[this.XColumn], (double)dr[this.YColumn]);
                            }
                            fdt.AddRow(fdr);
                        }
                        return(fdt);
                    }
                }
            }

            return(null);
        }
示例#42
0
文件: MsSql.cs 项目: jakedw7/iAM
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="RowID"></param>
 /// <returns>datarow</returns>
 public SharpMap.Data.FeatureDataRow GetFeature(uint RowID)
 {
     using (SqlConnection conn = new SqlConnection(_ConnectionString))
     {
         string strSQL = "SELECT *, " + this.GeometryColumn + " AS sharpmap_tempgeometry FROM " + this.Table + " WHERE " + this.ObjectIdColumn + "='" + RowID.ToString() + "'";
         using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, conn))
         {
             DataSet ds = new DataSet();
             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 != this.GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" && !col.ColumnName.StartsWith("Envelope_"))
                     {
                         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];
                     SharpMap.Data.FeatureDataRow fdr = fdt.NewRow();
                     foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                     {
                         if (col.ColumnName != this.GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" && !col.ColumnName.StartsWith("Envelope_"))
                         {
                             fdr[col.ColumnName] = dr[col];
                         }
                     }
                     fdr.Geometry = SharpMap.Converters.WellKnownText.GeometryFromWKT.Parse(dr["sharpmap_tempgeometry"].ToString());
                     return(fdr);
                 }
                 else
                 {
                     return(null);
                 }
             }
             else
             {
                 return(null);
             }
         }
     }
 }
示例#43
0
 public override FeatureDataRow GetFeature(uint rowId)
 {
     using (var conn = new SQLiteConnection(ConnectionString))
     {
         string strSQL = "SELECT *, " + GeometryColumn + " AS sharpmap_tempgeometry FROM " + Table + " WHERE " +
                         ObjectIdColumn + "='" + rowId.ToString(NumberFormatInfo.InvariantInfo) + "'";
         using (var adapter = new SQLiteDataAdapter(strSQL, conn))
         {
             DataSet ds = new DataSet();
             conn.Open();
             adapter.Fill(ds);
             conn.Close();
             if (ds.Tables.Count > 0)
             {
                 FeatureDataTable fdt = new FeatureDataTable(ds.Tables[0]);
                 foreach (DataColumn col in ds.Tables[0].Columns)
                 {
                     if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" &&
                         !col.ColumnName.StartsWith("Envelope_"))
                     {
                         fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                     }
                 }
                 if (ds.Tables[0].Rows.Count > 0)
                 {
                     DataRow        dr  = ds.Tables[0].Rows[0];
                     FeatureDataRow fdr = fdt.NewRow();
                     foreach (DataColumn col in ds.Tables[0].Columns)
                     {
                         if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" &&
                             !col.ColumnName.StartsWith("Envelope_"))
                         {
                             fdr[col.ColumnName] = dr[col];
                         }
                     }
                     if (dr["sharpmap_tempgeometry"] != DBNull.Value)
                     {
                         fdr.Geometry = GeometryFromWKT.Parse((string)dr["sharpmap_tempgeometry"]);
                     }
                     return(fdr);
                 }
                 return(null);
             }
             return(null);
         }
     }
 }
示例#44
0
 /// <summary>
 /// Returns a datarow based on a RowID
 /// </summary>
 /// <param name="RowID"></param>
 /// <returns>datarow</returns>
 public SharpMap.Data.FeatureDataRow GetFeature(uint RowID)
 {
     using (Npgsql.NpgsqlConnection conn = new Npgsql.NpgsqlConnection(_ConnectionString))
     {
         string strSQL = "select * , AsBinary(" + this.GeometryColumn + ") As sharpmap_tempgeometry from " + this.Table + " WHERE " + this.ObjectIdColumn + "='" + RowID.ToString() + "'";
         using (Npgsql.NpgsqlDataAdapter adapter = new Npgsql.NpgsqlDataAdapter(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 != this.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];
                     SharpMap.Data.FeatureDataRow fdr = fdt.NewRow();
                     foreach (System.Data.DataColumn col in ds.Tables[0].Columns)
                     {
                         if (col.ColumnName != this.GeometryColumn && col.ColumnName != "sharpmap_tempgeometry")
                         {
                             fdr[col.ColumnName] = dr[col];
                         }
                     }
                     fdr.Geometry = SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"]);
                     return(fdr);
                 }
                 else
                 {
                     return(null);
                 }
             }
             else
             {
                 return(null);
             }
         }
     }
 }
示例#45
0
文件: PostGIS.cs 项目: cugkgq/Project
        private FeatureDataTable CreateTableFromReader(DbDataReader reader, int geomIndex)
        {
            var res = new FeatureDataTable {
                TableName = Table
            };

            for (var c = 0; c < geomIndex; c++)
            {
                var fieldType = reader.GetFieldType(c);
                if (fieldType == null)
                {
                    throw new Exception("Unable to retrieve field type for column " + c);
                }
                res.Columns.Add(reader.GetName(c), fieldType);
            }
            return(res);
        }
示例#46
0
    public VectorLayer CreateGeometryLayer()
    {
        var gf = new NetTopologySuite.Geometries.GeometryFactory();
        var fdt = new FeatureDataTable();
        fdt.Columns.Add(new DataColumn("Name", typeof (String)));

        fdt.BeginLoadData();
        var fdr = (FeatureDataRow)fdt.LoadDataRow(new[] {(object) "Mayence"}, true);
        fdr.Geometry = gf.CreatePoint(new Point(8.1, 50.0));
        fdt.EndLoadData();

        var vLayer = new VectorLayer("GeometryProvider");
        vLayer.DataSource = new FeatureProvider(fdt);
        vLayer.SRID = 4326;

        return vLayer;
    }
示例#47
0
        /// <summary>
        /// Throws an NotSupportedException. Attribute data is not supported by this datasource
        /// </summary>
        /// <param name="box"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        public void ExecuteIntersectionQuery(SharpMap.Geometries.BoundingBox box, FeatureDataSet ds)
        {
            FeatureDataTable fdt = new FeatureDataTable();

            fdt = _features.Clone();

            foreach (FeatureDataRow fdr in _features)
            {
                if (fdr.Geometry.GetBoundingBox().Intersects(box))
                {
                    fdt.LoadDataRow(fdr.ItemArray, false);
                    (fdt.Rows[fdt.Rows.Count - 1] as FeatureDataRow).Geometry = fdr.Geometry;
                }
            }

            ds.Tables.Add(fdt);
        }
示例#48
0
        public void render3d(Project project, SceneManager sceneMgr)
        {
            SharpMap.Map myMap = new SharpMap.Map();

            foreach (BuildLayer layer in project.getLayers())
            {
                Source source = layer.getSource();

                BoundingBox    envelope = new BoundingBox(-1000.0, -1000.0, 1000.0, 1000.0);//TODO
                FeatureDataSet ds       = new FeatureDataSet();
                source.DataSource.Open();
                source.DataSource.ExecuteIntersectionQuery(envelope, ds);
                source.DataSource.Close();

                FeatureDataTable features = (FeatureDataTable)ds.Tables[0];

                //El codigo del PFC

                //**********************************************************************************************************

                //Show map

                //Filters
                FilterGraph graph = project.getFilterGraph(source.getName());
                if (graph != null)
                {
                    graph.Successors();

                    FilterEnv   env  = new FilterEnv(sceneMgr, source.getName());
                    FeatureList list = Feature.DataTableToList(features);

                    if (graph.getFilter(1) is FeatureFilter)
                    {
                        FeatureFilter filter = (FeatureFilter)graph.getFilter(1);
                        FeatureList   l      = filter.process(list, env);
                    }
                    else if (graph.getFilter(1) is FragmentFilter)
                    {
                        FragmentFilter filter = (FragmentFilter)graph.getFilter(1);
                        FragmentList   l      = filter.process(list, env);
                    }
                }

                //**********************************************************************************************************
            }
        }
示例#49
0
 public FeatureDataRow GetFeature(uint rowId)
 {
     using (SQLiteConnection conn = SpatiaLiteConnection(_connectionString))
     {
         string strSQL = "SELECT *, AsBinary(" + GeometryColumn + ") AS sharpmap_tempgeometry FROM " + Table +
                         " WHERE " + ObjectIdColumn + "='" + rowId + "'";
         using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(strSQL, conn))
         {
             DataSet ds = new DataSet();
             adapter.Fill(ds);
             conn.Close();
             if (ds.Tables.Count > 0)
             {
                 FeatureDataTable fdt = new FeatureDataTable(ds.Tables[0]);
                 foreach (DataColumn col in ds.Tables[0].Columns)
                 {
                     if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" &&
                         !col.ColumnName.StartsWith("Envelope_"))
                     {
                         fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                     }
                 }
                 if (ds.Tables[0].Rows.Count > 0)
                 {
                     DataRow        dr  = ds.Tables[0].Rows[0];
                     FeatureDataRow fdr = fdt.NewRow();
                     foreach (DataColumn col in ds.Tables[0].Columns)
                     {
                         if (col.ColumnName != GeometryColumn && col.ColumnName != "sharpmap_tempgeometry" &&
                             !col.ColumnName.StartsWith("Envelope_"))
                         {
                             fdr[col.ColumnName] = dr[col];
                         }
                     }
                     if (dr["sharpmap_tempgeometry"] != DBNull.Value)
                     {
                         fdr.Geometry = GeometryFromWKB.Parse((byte[])dr["sharpmap_tempgeometry"]);
                     }
                     return(fdr);
                 }
                 return(null);
             }
             return(null);
         }
     }
 }
示例#50
0
        /// <summary>
        /// Throws an NotSupportedException. Attribute data is not supported by this datasource
        /// </summary>
        /// <param name="box"></param>
        /// <param name="ds">FeatureDataSet to fill data into</param>
        public virtual void ExecuteIntersectionQuery(IEnvelope box, FeatureDataSet ds)
        {
            FeatureDataTable dt = AttributesTable.Clone();

            foreach (FeatureDataRow row in AttributesTable)
            {
                if (!row.Geometry.IsEmpty)
                {
                    if (row.Geometry.EnvelopeInternal.Intersects(box))
                    {
                        dt.Rows.Add(row.ItemArray);
                        ((FeatureDataRow)dt.Rows[dt.Count - 1]).Geometry = row.Geometry;
                    }
                }
            }
            ds.Tables.Add(dt);
        }
示例#51
0
        /// <summary>
        /// Reads the field types from the OgrFeatureDefinition -> OgrFieldDefinition
        /// </summary>
        /// <param name="fdt">FeatureDatatTable</param>
        /// <param name="oLayer">OgrLayer</param>
        private static void ReadColumnDefinition(FeatureDataTable fdt, OgrLayer oLayer)
        {
            using (OgrFeatureDefn ogrFeatureDefn = oLayer.GetLayerDefn())
            {
                int iField;

                for (iField = 0; iField < ogrFeatureDefn.GetFieldCount(); iField++)
                {
                    using (OgrFieldDefn ogrFldDef = ogrFeatureDefn.GetFieldDefn(iField))
                    {
                        OgrFieldType type = ogrFldDef.GetFieldType();
                        switch (type)
                        {
                        case OgrFieldType.OFTInteger:
                            fdt.Columns.Add(ogrFldDef.GetName(), typeof(Int32));
                            break;

                        case OgrFieldType.OFTReal:
                            fdt.Columns.Add(ogrFldDef.GetName(), typeof(Double));
                            break;

                        case OgrFieldType.OFTString:
                            fdt.Columns.Add(ogrFldDef.GetName(), typeof(String));
                            break;

                        case OgrFieldType.OFTWideString:
                            fdt.Columns.Add(ogrFldDef.GetName(), typeof(String));
                            break;

                        case OgrFieldType.OFTDate:
                        case OgrFieldType.OFTTime:
                        case OgrFieldType.OFTDateTime:
                            fdt.Columns.Add(ogrFldDef.GetName(), typeof(DateTime));
                            break;

                        default:
                        {
                            //fdt.Columns.Add(_OgrFldDef.GetName(), System.Type.GetType("System.String"));
                            Debug.WriteLine("Not supported type: " + type + " [" + ogrFldDef.GetName() + "]");
                            break;
                        }
                        }
                    }
                }
            }
        }
示例#52
0
        public void LayersWithThemeGroupShareMinMax()
        {
            var table = new FeatureDataTable();

            table.Columns.Add("Id", typeof(int));
            table.Columns.Add("X", typeof(double));
            table.Columns.Add("Y", typeof(double));
            table.Columns.Add("Value", typeof(double));
            AddRow(table, new object[] { 0, 5.0, 5.0, 0.0 });
            AddRow(table, new object[] { 1, 10.0, 10.0, 10.0 });
            var dataSource = new DataTablePoint(table, "Id", "X", "Y");

            var table2 = new FeatureDataTable();

            table2.Columns.Add("Id", typeof(int));
            table2.Columns.Add("X", typeof(double));
            table2.Columns.Add("Y", typeof(double));
            table2.Columns.Add("Value", typeof(double));
            AddRow(table2, new object[] { 0, 5.0, 2.0, 0.0 });
            AddRow(table2, new object[] { 1, 10.0, 4.0, 10.0 });
            AddRow(table2, new object[] { 2, 7.0, 10.0, 20.0 });
            var dataSource2 = new DataTablePoint(table2, "Id", "X", "Y");

            var basicTheme = ThemeFactory.CreateGradientTheme("Value", null, ColorBlend.Rainbow7, 0.0, 5.0, 3, 3, false, true, 3);

            var layer = new VectorLayer {
                AutoUpdateThemeOnDataSourceChanged = true, ThemeGroup = "group1", DataSource = dataSource, Theme = basicTheme
            };
            var layer2 = new VectorLayer {
                AutoUpdateThemeOnDataSourceChanged = true, ThemeGroup = "group1", DataSource = dataSource2, Theme = basicTheme
            };

            var map = new Map();

            map.Layers.Add(layer);
            Assert.AreEqual(10.0, ((GradientTheme)layer.Theme).Max); // refresh on add

            map.Layers.Add(layer2);

            Assert.AreEqual(20.0, ((GradientTheme)layer.Theme).Max); // both to max of the group
            Assert.AreEqual(20.0, ((GradientTheme)layer2.Theme).Max);

            map.Layers.Remove(layer2);

            Assert.AreEqual(10.0, ((GradientTheme)layer.Theme).Max); // refresh on remove
        }
示例#53
0
        /// <summary>
        /// Returns a datarow based on a RowID
        /// </summary>
        /// <param name="rowId"></param>
        /// <returns>datarow</returns>
        public FeatureDataRow GetFeature(uint rowId)
        {
            using (OleDbConnection conn = new OleDbConnection(_ConnectionString))
            {
                string strSQL = "select * from " + Table + " WHERE " + ObjectIdColumn + "=" + rowId.ToString();

                using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL, conn))
                {
                    conn.Open();
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    conn.Close();
                    if (ds.Tables.Count > 0)
                    {
                        FeatureDataTable fdt = new FeatureDataTable(ds.Tables[0]);
                        foreach (DataColumn col in ds.Tables[0].Columns)
                        {
                            fdt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
                        }
                        if (ds.Tables[0].Rows.Count > 0)
                        {
                            DataRow        dr  = ds.Tables[0].Rows[0];
                            FeatureDataRow fdr = fdt.NewRow();
                            foreach (DataColumn col in ds.Tables[0].Columns)
                            {
                                fdr[col.ColumnName] = dr[col];
                            }
                            if (dr[XColumn] != DBNull.Value && dr[YColumn] != DBNull.Value)
                            {
                                fdr.Geometry = new Point((double)dr[XColumn], (double)dr[YColumn]);
                            }
                            return(fdr);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
        }
示例#54
0
        public void ExecuteIntersectionQueryReturnsExpectedFeatures()
        {
            DataTable source = CreateDataTableSource();
            DataTablePoint provider = new DataTablePoint(source, "oid", "x", "y");

            var query = new Envelope(400, 600, 400, 600);

            FeatureDataTable expected = new FeatureDataTable();
            expected.TableName = "PointSource";

            foreach (DataColumn column in source.Columns)
            {
                expected.Columns.Add(column.ColumnName, column.DataType);
            }

            foreach (DataRowView rowView in source.DefaultView)
            {
                if (query.Contains(new Coordinate((double) rowView["x"], (double) rowView["y"])))
                {
                    expected.ImportRow(rowView.Row);
                }
            }

            FeatureDataSet dataSet = new FeatureDataSet();
            provider.ExecuteIntersectionQuery(query, dataSet);
            Assert.IsNotNull(dataSet);
            Assert.IsNotNull(dataSet.Tables);
            Assert.AreEqual(1, dataSet.Tables.Count);

            FeatureDataTable actual = dataSet.Tables[0];

            Assert.AreEqual(expected.Rows.Count, actual.Rows.Count);

            foreach (DataRowView expectedRowView in expected.DefaultView)
            {
                DataRow[] actualRows = actual.Select("oid = " + expectedRowView["oid"]);
                Assert.AreEqual(1, actualRows.Length);
                Assert.AreEqual(expectedRowView["oid"], actualRows[0]["oid"]);
                Assert.AreEqual(expectedRowView["x"], actualRows[0]["x"]);
                Assert.AreEqual(expectedRowView["y"], actualRows[0]["y"]);
            }
        }
示例#55
0
 public void CreateNewWithAttributesSchemaTest()
 {
     FeatureDataTable schema = new FeatureDataTable(_geoFactory);
     schema.Columns.AddRange(new DataColumn[]
                                 {
                                     new DataColumn("Name", typeof (String)),
                                     new DataColumn("Date_Created", typeof (DateTime)),
                                     new DataColumn("Visits", typeof (Int32)),
                                     new DataColumn("Weight", typeof (Single))
                                 });
     ShapeFileProvider shapeFile = ShapeFileProvider.Create("UnitTestData", "Test1", ShapeType.Point, schema, _geoFactory);
     Assert.IsTrue(File.Exists(@"UnitTestData\Test1.shp"));
     Assert.IsTrue(File.Exists(@"UnitTestData\Test1.shx"));
     Assert.IsTrue(File.Exists(@"UnitTestData\Test1.dbf"));
     Assert.IsTrue(shapeFile.HasDbf);
     shapeFile.Close();
     File.Delete(@"UnitTestData\Test1.shp");
     File.Delete(@"UnitTestData\Test1.shx");
     File.Delete(@"UnitTestData\Test1.dbf");
 }
示例#56
0
    public VectorLayer CreateGeometryLayer()
    {
        FeatureDataTable fdt = new FeatureDataTable();
        fdt.Columns.Add(new DataColumn("Name", typeof (String)));

        FeatureDataRow fdr;

        fdr = fdt.NewRow();

        fdr["Name"] = "Mayence";
        fdr.Geometry = (Geometry) new Point(8.1, 50.0);

        fdt.AddRow(fdr);


        VectorLayer vLayer = new VectorLayer("GeometryProvider");
        vLayer.DataSource = new GeometryFeatureProvider(fdt);
        vLayer.SRID = 4326;

        return vLayer;
    }
示例#57
0
        internal FeatureMerger(FeatureDataTable target, bool preserveChanges, SchemaMergeAction mergeAction)
        {
            if ((SchemaMergeAction.ConvertTypes & mergeAction) != SchemaMergeAction.None)
            {
                throw new NotImplementedException("SchemaMergeAction.ConvertTypes is currently not supported.");
            }

            if ((SchemaMergeAction.KeyByType & mergeAction) != SchemaMergeAction.None)
            {
                throw new NotImplementedException("SchemaMergeAction.KeyByType is currently not supported.");
            }

            if ((SchemaMergeAction.CaseInsensitive & mergeAction) != SchemaMergeAction.None)
            {
                throw new NotImplementedException("SchemaMergeAction.CaseInsensitive is currently not supported.");
            }

            _target = target;
            _preserveChanges = preserveChanges;
            _mergeAction = mergeAction;
            _innerMerger = createInnerMerger(target, preserveChanges, mergeAction);
        }
        internal FeatureDataReader(IGeometryFactory factory,
                                   FeatureDataTable source,
                                   FeatureQueryExpression query,
                                   FeatureQueryExecutionOptions options)
        {
            if (source == null) throw new ArgumentNullException("source");

            if (options != FeatureQueryExecutionOptions.FullFeature)
            {
                throw new ArgumentException("Only QueryExecutionOptions.All is supported.",
                                            "options");
            }

            _factory = factory;
            _options = options;
            _query = query;
            _table = source.Clone();

            foreach (FeatureDataRow row in source.Select(query.SpatialPredicate))
            {
                _table.ImportRow(row);
            }
        }
示例#59
0
        public void FixtureSetUp()
        {
            var fdt = new FeatureDataTable();
            fdt.Columns.Add(new DataColumn("ID", typeof (int)));
            fdt.Columns.Add(new DataColumn("LABEL", typeof (string)));
            fdt.Columns.Add(new DataColumn("HALIGN", typeof (int)));
            fdt.Columns.Add(new DataColumn("VALIGN", typeof (int)));

            var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4236);
            for (var i = 0; i < 3; i++)
            {
                for (var j = 0; j < 3; j++)
                {
                    var fdr = fdt.NewRow();
                    fdr[0] = i*3 + j;
                    fdr[1] = string.Format("Point({0}, {1})\nID {2}", i, j, i*3 + j);
                    fdr[2] = j;
                    fdr[3] = i;
                    fdr.Geometry = factory.CreatePoint(new Coordinate(j*100, i*100));
                    fdt.AddRow(fdr);
                }
            }
            _featureDataTable = fdt;
        }
 private void InitClass()
 {
     DataSetName = "Map_Info_Tables";
     Prefix = "";
     Namespace = "";
     Locale = new CultureInfo("en-US");
     CaseSensitive = false;
     EnforceConstraints = true;
     tableFeature = new FeatureDataTable();
     Tables.Add(tableFeature);
     tableStreet = new StreetDataTable();
     Tables.Add(tableStreet);
     tableCorporation_Link = new Corporation_LinkDataTable();
     Tables.Add(tableCorporation_Link);
     tablePerson_Link = new Person_LinkDataTable();
     Tables.Add(tablePerson_Link);
     tableSheet_Link = new Sheet_LinkDataTable();
     Tables.Add(tableSheet_Link);
     ForeignKeyConstraint fkc;
     fkc = new ForeignKeyConstraint("Feature_Corp_Link", new DataColumn[]
                                                             {
                                                                 tableFeature.FeatureIDColumn
                                                             }, new DataColumn[]
                                                                    {
                                                                        tableCorporation_Link.FeatureIDColumn
                                                                    });
     tableCorporation_Link.Constraints.Add(fkc);
     fkc.AcceptRejectRule = AcceptRejectRule.None;
     fkc.DeleteRule = Rule.Cascade;
     fkc.UpdateRule = Rule.Cascade;
     fkc = new ForeignKeyConstraint("Feature_Person_Link", new DataColumn[]
                                                               {
                                                                   tableFeature.FeatureIDColumn
                                                               }, new DataColumn[]
                                                                      {
                                                                          tablePerson_Link.FeatureIDColumn
                                                                      });
     tablePerson_Link.Constraints.Add(fkc);
     fkc.AcceptRejectRule = AcceptRejectRule.None;
     fkc.DeleteRule = Rule.Cascade;
     fkc.UpdateRule = Rule.Cascade;
     fkc = new ForeignKeyConstraint("Feature_Sheet_Link", new DataColumn[]
                                                              {
                                                                  tableFeature.FeatureIDColumn
                                                              }, new DataColumn[]
                                                                     {
                                                                         tableSheet_Link.FeatureIDColumn
                                                                     });
     tableSheet_Link.Constraints.Add(fkc);
     fkc.AcceptRejectRule = AcceptRejectRule.None;
     fkc.DeleteRule = Rule.Cascade;
     fkc.UpdateRule = Rule.Cascade;
     relationFeature_Corp_Link = new DataRelation("Feature_Corp_Link", new DataColumn[]
                                                                           {
                                                                               tableFeature.FeatureIDColumn
                                                                           }, new DataColumn[]
                                                                                  {
                                                                                      tableCorporation_Link.FeatureIDColumn
                                                                                  }, false);
     Relations.Add(relationFeature_Corp_Link);
     relationFeature_Person_Link = new DataRelation("Feature_Person_Link", new DataColumn[]
                                                                               {
                                                                                   tableFeature.FeatureIDColumn
                                                                               }, new DataColumn[]
                                                                                      {
                                                                                          tablePerson_Link.FeatureIDColumn
                                                                                      }, false);
     Relations.Add(relationFeature_Person_Link);
     relationFeature_Sheet_Link = new DataRelation("Feature_Sheet_Link", new DataColumn[]
                                                                             {
                                                                                 tableFeature.FeatureIDColumn
                                                                             }, new DataColumn[]
                                                                                    {
                                                                                        tableSheet_Link.FeatureIDColumn
                                                                                    }, false);
     Relations.Add(relationFeature_Sheet_Link);
 }