public void AddingRowToTableTriggersViewListChangedItemAddedNotification()
        {
            FeatureProvider  data  = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable table = new FeatureDataTable(_factories.GeoFactory);

            IExtents halfBounds = data.GetExtents();

            halfBounds.Scale(0.5);

            FeatureQueryExpression query  = FeatureQueryExpression.Intersects(halfBounds);
            IFeatureDataReader     reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            FeatureDataView view = new FeatureDataView(table);

            Boolean addNotificationOccured = false;

            view.ListChanged += delegate(Object sender, ListChangedEventArgs e)
            {
                if (e.ListChangedType == ListChangedType.ItemAdded)
                {
                    addNotificationOccured = true;
                }
            };

            FeatureDataRow row = table.NewRow();

            row["Oid"]         = Guid.NewGuid();
            row["FeatureName"] = "New row";
            row.Geometry       = _factories.GeoFactory.CreatePoint2D(44, 44);
            table.AddRow(row);

            Assert.True(addNotificationOccured);
        }
        public void ChangeViewSpatialFilterTriggersNotification()
        {
            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);
            FeatureDataView view = new FeatureDataView(table);

            Boolean resetNotificationOccured = false;

            view.ListChanged += delegate(Object sender, ListChangedEventArgs e)
            {
                if (e.ListChangedType == ListChangedType.Reset)
                {
                    resetNotificationOccured = true;
                }
            };

            Assert.False(resetNotificationOccured);

            IExtents queryExtents = _factories.GeoFactory.CreateExtents2D(0, 0, 10, 10);
            SpatialBinaryExpression expression = SpatialBinaryExpression.Intersects(queryExtents);

            view.SpatialFilter = expression;

            Assert.True(resetNotificationOccured);
        }
Example #3
0
        ///// <summary>
        ///// Initializes a new, empty features layer
        ///// which handles <see cref="FeatureDataTable.SelectRequested"/>
        ///// events from <see cref="Features"/>.
        ///// </summary>
        //protected FeatureLayer(IFeatureProvider dataSource)
        //    : this(String.Empty, dataSource) { }

        ///// <summary>
        ///// Initializes a new features layer with the given name and datasource
        ///// and which handles <see cref="FeatureDataTable.SelectRequested"/>
        ///// events from <see cref="Features"/>.
        ///// </summary>
        ///// <param name="layername">Name of the layer.</param>
        ///// <param name="dataSource">Data source.</param>
        //protected FeatureLayer(String layername, IFeatureProvider dataSource)
        //    : this(layername, new FeatureStyle(), dataSource) { }

        /// <summary>
        /// Initializes a new features layer with the given name, style and datasource
        /// and which handles <see cref="FeatureDataTable.SelectRequested"/>
        /// events from <see cref="Features"/>.
        /// </summary>
        /// <param name="layername">Name of the layer.</param>
        /// <param name="style">Style to apply to the layer.</param>
        /// <param name="dataSource">Data source.</param>
        protected FeatureLayer(String layername,
                               FeatureStyle style,
                               IFeatureProvider dataSource)
            : base(layername, style, dataSource)
        {
            //ShouldHandleFeaturesNotFoundEvent = handleFeatureDataRequest;

            // We need to get the schema of the feature table.
            DataSource.Open();
            _features = DataSource.CreateNewTable()
                        ?? new FeatureDataTable(dataSource.GeometryFactory);
            GeometryFactory = dataSource.GeometryFactory;
            DataSource.Close();

            // We generally want spatial indexing on the feature table...
            _features.IsSpatiallyIndexed = true;

            // handle the request on the feature data table for features
            _features.SelectRequested += handleFeaturesSelectRequested;

            // setup selected and highlighted views
            _selectedFeatures = new FeatureDataView(_features,
                                                    (FeatureQueryExpression)null,
                                                    "",
                                                    DataViewRowState.CurrentRows);
            _selectedFeatures.IsViewDefinitionExclusive = true;

            _highlightedFeatures = new FeatureDataView(_features,
                                                       (FeatureQueryExpression)null,
                                                       "",
                                                       DataViewRowState.CurrentRows);
            _highlightedFeatures.IsViewDefinitionExclusive = true;
        }
 public QueryResultsTab(string title, FeatureDataView features)
     : base(title)
 {
     Controls.Add(results);
     results.Dock = DockStyle.Fill;
     results.DataSource = features;
 }
        public void ChangeViewSpatialFilterReturnsOnlyFilteredRows()
        {
            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);
            IGeometry queryExtents = _factories.GeoFactory.CreateExtents2D(0, 0, 10, 10).ToGeometry();

            List <FeatureDataRow> expectedRows = new List <FeatureDataRow>();

            foreach (FeatureDataRow row in table)
            {
                IGeometry g = row.Geometry;

                if (queryExtents.Intersects(g))
                {
                    expectedRows.Add(row);
                }
            }

            FeatureDataView         view       = new FeatureDataView(table);
            SpatialBinaryExpression expression = SpatialBinaryExpression.Intersects(queryExtents);

            view.SpatialFilter = expression;

            Assert.Equal(expectedRows.Count, view.Count);
        }
        public void ChangeViewAttributeFilterTriggersNotification()
        {
            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);
            FeatureDataView view = new FeatureDataView(table);

            Boolean resetNotificationOccured = false;

            view.ListChanged += delegate(Object sender, ListChangedEventArgs e)
            {
                if (e.ListChangedType == ListChangedType.Reset)
                {
                    resetNotificationOccured = true;
                }
            };

            Assert.False(resetNotificationOccured);

            Assert.Throws <NotSupportedException>(delegate { view.RowFilter = "FeatureName LIKE 'A m*'"; });
            Assert.True(resetNotificationOccured);
        }
Example #7
0
        private static Boolean dataViewEquivalent(FeatureDataView view1, FeatureDataView view2)
        {
            if (view1.Count != view2.Count)
            {
                return(false);
            }

            foreach (FeatureDataRow row1 in ((IEnumerable <FeatureDataRow>)view1))
            {
                Boolean notFound = true;

                foreach (FeatureDataRow row2 in ((IEnumerable <FeatureDataRow>)view2))
                {
                    if (row1["FeatureName"] == row2["FeatureName"])
                    {
                        notFound = false;

                        if (!row1.Geometry.Equals(row2.Geometry))
                        {
                            return(false);
                        }
                    }
                }

                if (notFound)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #8
0
 public QueryResultsTab(string title, FeatureDataView features)
     : base(title)
 {
     Controls.Add(results);
     results.Dock       = DockStyle.Fill;
     results.DataSource = features;
 }
        public void MovingRowTriggersViewListChangedItemMovedNotification()
        {
            // TODO: implement MovingRowTriggersViewListChangedItemMovedNotification
            FeatureProvider  data  = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable table = new FeatureDataTable(_factories.GeoFactory);

            IExtents halfBounds = data.GetExtents();

            halfBounds.Scale(0.5);

            FeatureQueryExpression query  = FeatureQueryExpression.Intersects(data.GetExtents());
            IFeatureDataReader     reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            FeatureDataView view = new FeatureDataView(table);

            Boolean addNotificationOccured = false;

            view.ListChanged += delegate(Object sender, ListChangedEventArgs e)
            {
                if (e.ListChangedType == ListChangedType.ItemMoved)
                {
                    addNotificationOccured = true;
                }
            };

            Assert.True(addNotificationOccured);
        }
        public void SettingOidFilterAllowsOnlyFeaturesContainingFilteredOidsInView()
        {
            FeatureProvider         data   = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable <Guid> table  = new FeatureDataTable <Guid>("Oid", _factories.GeoFactory);
            FeatureQueryExpression  query  = FeatureQueryExpression.Intersects(data.GetExtents());
            IFeatureDataReader      reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            Guid[] ids = new Guid[3];
            ids[0] = (table.Rows[1] as FeatureDataRow <Guid>).Id;
            ids[1] = (table.Rows[4] as FeatureDataRow <Guid>).Id;
            ids[2] = (table.Rows[6] as FeatureDataRow <Guid>).Id;
            FeatureDataView view = new FeatureDataView(table);

            view.OidFilter = new OidCollectionExpression(ids);

            Assert.Equal(3, view.Count);
            Assert.True(view.Find(ids[0]) > -1);
            Assert.True(view.Find(ids[1]) > -1);
            Assert.True(view.Find(ids[2]) > -1);
            Assert.Equal(-1, view.Find((table.Rows[0] as FeatureDataRow <Guid>).Id));
            Assert.Equal(-1, view.Find((table.Rows[2] as FeatureDataRow <Guid>).Id));
            Assert.Equal(-1, view.Find((table.Rows[3] as FeatureDataRow <Guid>).Id));
            Assert.Equal(-1, view.Find((table.Rows[5] as FeatureDataRow <Guid>).Id));
        }
Example #11
0
 private static IEnumerable <Int32> getSelectedFeatureIndexesFromHighlighedFeatures(
     FeatureDataView selectedFeatures,
     FeatureDataView highlightedFeatures)
 {
     foreach (FeatureDataRow feature in highlightedFeatures)
     {
         yield return(selectedFeatures.Find(feature));
     }
 }
        public void NullSpatialFilterReturnsAllRows()
        {
            FeatureProvider        data  = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable       table = new FeatureDataTable(_factories.GeoFactory);
            FeatureQueryExpression query = FeatureQueryExpression.Intersects(data.GetExtents());

            table.Load(data.ExecuteFeatureQuery(query));
            FeatureDataView view = new FeatureDataView(table);

            Assert.Equal(table.Rows.Count, view.Count);
        }
        public void AddNewRowThrowsNotSupported()
        {
            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);
            FeatureDataView view = new FeatureDataView(table);

            Assert.Throws <NotSupportedException>(delegate { view.AddNew(); });
        }
        public void SpatialQueryTypeIsWhatIsSpecifiedAtCreateTime()
        {
            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);
            IGeometry       filter = _factories.GeoFactory.CreateExtents2D(0, 0, 10, 10).ToGeometry();
            FeatureDataView view   = new FeatureDataView(table, filter, "", DataViewRowState.CurrentRows);

            Assert.Equal(SpatialOperation.Intersects, view.SpatialFilter.Op);
        }
        public void CreatingDataViewReturnsValidDataView()
        {
            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);
            FeatureDataView view = new FeatureDataView(table);

            Assert.IsType(typeof(FeatureDataTable), view.Table);
            Assert.Same(table, view.Table);
        }
        private void createDataViewOnNewTable(out FeatureDataView view,
                                              out FeatureDataTable <Guid> table,
                                              Boolean includeGeometryCollections)
        {
            FeatureProvider data = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory,
                                                                            includeGeometryCollections);

            table = new FeatureDataTable <Guid>("Oid", _factories.GeoFactory);
            FeatureQueryExpression query  = FeatureQueryExpression.Intersects(data.GetExtents());
            IFeatureDataReader     reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            view = new FeatureDataView(table);
        }
        public new FeatureDataView CreateDataView(DataTable table)
        {
            if (DataSet == null)
            {
                base.CreateDataView(table);
            }

            if (!(table is FeatureDataTable))
            {
                throw new ArgumentException("DataTable must be of type FeatureDataTable");
            }

            FeatureDataView view = new FeatureDataView(table as FeatureDataTable);
            view.SetDataViewManager(this);
            return view;
        }
        //[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);
        }
Example #19
0
        //Note: currently the selected features are one select behind.
        //e.g on drawing the first region all the layers features are returned
        // on drawing the second region all the features matching the first region are returned etc..
        private void AttributeQueryHandler_End(object sender, MapActionHandlerEventArgs e)
        {
            IFeatureLayer l =
                Enumerable.FirstOrDefault(
                    Caster.Cast <IFeatureLayer>(
                        Processor.Where(Map.SelectedLayers, delegate(ILayer o) { return(o as IFeatureLayer != null); })));

            if (l != null)
            {
                FeatureDataView dv = new FeatureDataView(l.SelectedFeatures.Table);

                if (l.SelectedFeatures.AttributeFilter != null)
                {
                    dv.AttributeFilter =
                        (AttributeBinaryExpression)
                        l.SelectedFeatures.AttributeFilter.Clone();
                }

                if (l.SelectedFeatures.SpatialFilter != null)
                {
                    dv.SpatialFilter =
                        (SpatialBinaryExpression)
                        l.SelectedFeatures.SpatialFilter.Clone();
                }

                if (l.SelectedFeatures.OidFilter != null)
                {
                    dv.OidFilter =
                        (OidCollectionExpression)
                        l.SelectedFeatures.OidFilter.Clone();
                }

                if (l.SelectedFeatures.ViewDefinition != null)
                {
                    dv.ViewDefinition =
                        (FeatureQueryExpression)
                        l.SelectedFeatures.ViewDefinition.Clone();
                }


                QueryResultsTab tab = new QueryResultsTab(l.LayerName, dv);
                resultsTabControl.TabPages.Insert(0, tab);
                resultsTabControl.SelectedTab = tab;
            }
        }
        public void DefaultViewIsFeatureDataView()
        {
            FeatureDataTable table = new FeatureDataTable(_factories.GeoFactory);
            DataView         view  = table.DefaultView;

            Assert.NotNull(view);
            Assert.IsType(typeof(FeatureDataView), view);
            Assert.Null(view.DataViewManager);
            Assert.Equal(String.Empty, view.Sort);
            Assert.Equal(String.Empty, view.RowFilter);
            Assert.Equal(0, view.Count);
            Assert.Same(table, view.Table);
            FeatureDataView featureView = view as FeatureDataView;

            Assert.NotNull(featureView);
            Assert.Null(featureView.SpatialFilter);
            Assert.Equal(DataViewRowState.CurrentRows, view.RowStateFilter);
        }
        public void SettingGeometryFilterToIdenticalGeometryDoesntChangeFilterObject()
        {
            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);
            IGeometry       filter     = _factories.GeoFactory.CreateExtents2D(0, 0, 10, 10).ToGeometry();
            FeatureDataView view       = new FeatureDataView(table, filter, "", DataViewRowState.CurrentRows);
            IGeometry       filterCopy = filter.Clone();

            Assert.NotSame(filter, filterCopy);
            Assert.Equal(filter, filterCopy);
            SpatialBinaryExpression expression = SpatialBinaryExpression.Intersects(filterCopy);

            view.SpatialFilter = expression;
            Assert.NotSame(expression, view.SpatialFilter);
        }
        public void ExecutingQueryOnTableTriggersViewListChangedResetNotification()
        {
            FeatureProvider  data        = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable table       = new FeatureDataTable(_factories.GeoFactory);
            IExtents         dataExtents = data.GetExtents();
            IExtents         halfBounds  = _factories.GeoFactory.CreateExtents(
                dataExtents.Min, dataExtents.Max);

            halfBounds.Scale(0.5);

            FeatureQueryExpression query  = FeatureQueryExpression.Intersects(halfBounds);
            IFeatureDataReader     reader = data.ExecuteFeatureQuery(query);

            table.Load(reader, LoadOption.OverwriteChanges, null);
            FeatureDataView view = new FeatureDataView(table);

            Boolean addNotificationOccured = false;

            view.ListChanged += delegate(Object sender, ListChangedEventArgs e)
            {
                if (e.ListChangedType == ListChangedType.Reset)
                {
                    addNotificationOccured = true;
                }
            };

            IExtents otherHalfBounds = _factories.GeoFactory.CreateExtents(
                dataExtents.Min, dataExtents.Max);

            otherHalfBounds.TranslateRelativeToWidth(0.5, 0.5);
            otherHalfBounds.Scale(0.5);

            query  = FeatureQueryExpression.Intersects(otherHalfBounds);
            reader = data.ExecuteFeatureQuery(query);
            table.Load(reader, LoadOption.OverwriteChanges, null);

            Assert.True(addNotificationOccured);
        }
        public void ChangeViewAttributeFilterReturnsOnlyFilteredRows()
        {
            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);
            FeatureDataView view = new FeatureDataView(table);

            Int32 expectedRowCount = 0;

            foreach (FeatureDataRow row in table.Rows)
            {
                if (row["FeatureName"].ToString().StartsWith("A m"))
                {
                    expectedRowCount++;
                }
            }

            Assert.Throws <NotSupportedException>(delegate { view.RowFilter = "FeatureName LIKE 'A m*'"; });
            Assert.Equal(expectedRowCount, view.Count);
        }
        public void SettingViewFilterToIncludeRowsNotPresentInTableCausesFeaturesRequestNotification()
        {
            FeatureProvider  data  = DataSourceHelper.CreateFeatureDatasource(_factories.GeoFactory);
            FeatureDataTable table = new FeatureDataTable(_factories.GeoFactory);

            Boolean featuresRequested = false;
            //table.FeaturesNotFound += delegate { featuresRequested = true; };

            FeatureDataView view = new FeatureDataView(table);

            IExtents otherHalfBounds = data.GetExtents();

            otherHalfBounds.TranslateRelativeToWidth(0.5, 0.5);
            otherHalfBounds.Scale(0.5);

            Assert.False(featuresRequested);

            SpatialBinaryExpression expression = SpatialBinaryExpression.Intersects(otherHalfBounds);

            view.SpatialFilter = expression;

            Assert.True(featuresRequested);
        }
Example #25
0
        ///// <summary>
        ///// Initializes a new, empty features layer
        ///// which handles <see cref="FeatureDataTable.SelectRequested"/> 
        ///// events from <see cref="Features"/>.
        ///// </summary>
        //protected FeatureLayer(IFeatureProvider dataSource)
        //    : this(String.Empty, dataSource) { }

        ///// <summary>
        ///// Initializes a new features layer with the given name and datasource
        ///// and which handles <see cref="FeatureDataTable.SelectRequested"/> 
        ///// events from <see cref="Features"/>.
        ///// </summary>
        ///// <param name="layername">Name of the layer.</param>
        ///// <param name="dataSource">Data source.</param>
        //protected FeatureLayer(String layername, IFeatureProvider dataSource)
        //    : this(layername, new FeatureStyle(), dataSource) { }

        /// <summary>
        /// Initializes a new features layer with the given name, style and datasource
        /// and which handles <see cref="FeatureDataTable.SelectRequested"/> 
        /// events from <see cref="Features"/>.
        /// </summary>
        /// <param name="layername">Name of the layer.</param>
        /// <param name="style">Style to apply to the layer.</param>
        /// <param name="dataSource">Data source.</param>
        protected FeatureLayer(String layername,
                               FeatureStyle style,
                               IFeatureProvider dataSource)
            : base(layername, style, dataSource)
        {
            //ShouldHandleFeaturesNotFoundEvent = handleFeatureDataRequest;

            // We need to get the schema of the feature table.
            DataSource.Open();
            _features = DataSource.CreateNewTable()
                        ?? new FeatureDataTable(dataSource.GeometryFactory);
            GeometryFactory = dataSource.GeometryFactory;
            DataSource.Close();

            // We generally want spatial indexing on the feature table...
            _features.IsSpatiallyIndexed = true;

            // handle the request on the feature data table for features
            _features.SelectRequested += handleFeaturesSelectRequested;

            // setup selected and highlighted views
            _selectedFeatures = new FeatureDataView(_features,
                                                    (FeatureQueryExpression)null,
                                                    "",
                                                    DataViewRowState.CurrentRows);
            _selectedFeatures.IsViewDefinitionExclusive = true;

            _highlightedFeatures = new FeatureDataView(_features,
                                                       (FeatureQueryExpression)null,
                                                       "",
                                                       DataViewRowState.CurrentRows);
            _highlightedFeatures.IsViewDefinitionExclusive = true;
        }
        /// <summary>
        /// Initializes a new features layer with the given name, style and datasource.
        /// </summary>
        /// <param name="layername">Name of the layer.</param>
        /// <param name="style">Style to apply to the layer.</param>
        /// <param name="dataSource">Data source.</param>
        /// <param name="handleFeatureDataRequest">
        /// Value to indicate the layer should handle 
        /// <see cref="FeatureDataTable.FeaturesRequested"/> events from the <see cref="Features"/>
        /// table.
        /// </param>
        protected FeatureLayer(string layername, VectorStyle style, IFeatureLayerProvider dataSource, bool handleFeatureDataRequest)
            : base(layername, style, dataSource)
        {
            ShouldHandleDataCacheMissEvent = handleFeatureDataRequest;

            _features = new FeatureDataTable();
            _selectedFeatures = new FeatureDataView(_features, Point.Empty, "", DataViewRowState.CurrentRows);
            _highlightedFeatures = new FeatureDataView(_features, Point.Empty, "", DataViewRowState.CurrentRows);

            if (ShouldHandleDataCacheMissEvent)
            {
                _features.FeaturesRequested += handleFeaturesRequested;
            }

            init();
        }
Example #27
0
        //Note: currently the selected features are one select behind.
        //e.g on drawing the first region all the layers features are returned
        // on drawing the second region all the features matching the first region are returned etc..
        private void AttributeQueryHandler_End(object sender, MapActionHandlerEventArgs e)
        {
            IFeatureLayer l =
                Enumerable.FirstOrDefault(
                    Caster.Cast<IFeatureLayer>(
                        Processor.Where(Map.SelectedLayers, delegate(ILayer o) { return o as IFeatureLayer != null; })));

            if (l != null)
            {
                FeatureDataView dv = new FeatureDataView(l.SelectedFeatures.Table);

                if (l.SelectedFeatures.AttributeFilter != null)
                    dv.AttributeFilter =
                        (AttributeBinaryExpression)
                        l.SelectedFeatures.AttributeFilter.Clone();

                if (l.SelectedFeatures.SpatialFilter != null)
                    dv.SpatialFilter =
                        (SpatialBinaryExpression)
                        l.SelectedFeatures.SpatialFilter.Clone();

                if (l.SelectedFeatures.OidFilter != null)
                    dv.OidFilter =
                        (OidCollectionExpression)
                        l.SelectedFeatures.OidFilter.Clone();

                if (l.SelectedFeatures.ViewDefinition != null)
                    dv.ViewDefinition =
                        (FeatureQueryExpression)
                        l.SelectedFeatures.ViewDefinition.Clone();


                QueryResultsTab tab = new QueryResultsTab(l.LayerName, dv);
                resultsTabControl.TabPages.Insert(0, tab);
                resultsTabControl.SelectedTab = tab;
            }
        }