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); }
///// <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); }
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); }
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)); }
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); }
//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); }
/// <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(); }
//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; } }